NTP Sync Quality — Bare Metal Test

Does the timekeeping series change how chrony disciplines the clock on an idle bare-metal host, under a completely standard NTP setup (no PPS)? Four metal hosts run patched/baseline kernels in periodic/tickless tick modes, all disciplined by chrony from Amazon Time Sync, and judged by an independent referee: the ENA PHC (/dev/ptp0), sampled at 1 Hz. Companion to the co-located VM test.

Test Matrix

HostInstanceTick ModeKernel
Ai-0af5ab4f24fb27f23periodic (nohz=off, 1000Hz)7.3.0-rc1-timekeeping+—
Bi-087c029c2e38af9b2periodic (nohz=off, 1000Hz)7.3.0-rc1-baseline+—
Ci-055d5d7f2a87b5c76NO_HZ_IDLE7.3.0-rc1-timekeeping+—
Di-04bc451daa83780b2NO_HZ_IDLE7.3.0-rc1-baseline+—

Kernels

Setup

Relation to the VM test

The co-located VM test eliminates crystal, thermal and network-path confounders by putting all four kernels on one physical host. This bare-metal companion trades those controls for direct hardware timekeeping (no hypervisor between the kernel and the TSC) and much larger, idler machines.

PHC Referee

CLOCK_REALTIME minus the ENA PHC at 1 Hz per host — ground truth for how well each kernel's clock actually tracks, independent of chrony's self-assessment. Second panel: the kernel's own ntp_error from the tk_sample sampler. Third: PHC read bracket width (measurement quality bound).

PHC referee

CDF of PHC Offset

PHC offset CDF

Allan Deviation

Allan deviation measures clock stability at different averaging timescales. Lower is better. A clock that's well-disciplined by NTP should show decreasing ADEV at longer timescales (the servo corrects drift). The slope indicates the dominant noise type (white noise = −½, flicker = 0, random walk = +½).

Allan deviation

Time Series

The "RMS Offset (chrony)" panel shows chrony's internally-tracked RMS which uses an exponentially-weighted history that predates our test window. The "RMS Offset (cumulative)" panel computes RMS directly from the offset samples collected during this test, giving a fairer comparison unaffected by each host's different convergence history.

Time series comparison

Distribution (Box Plot)

Box plot comparison

CDF of Absolute Offset

CDF comparison

Methodology

Two collectors run on each host:

Scripts

Raw Data

ntp_quality.csv columns (from chronyc -c tracking)

ColumnDescription
offset_nsCurrent offset from NTP source (instantaneous error)
freq_ppmFrequency correction applied by chrony
rms_offset_nsRMS of recent offsets (jitter measure)
skew_ppmRate of frequency change (stability measure)
root_delay_nsRound-trip delay to stratum-1
root_disp_nsEstimated maximum error from root

phc_phase.csv columns

ColumnDescription
phc_offset_nsCLOCK_REALTIME − PHC, tightest of 5 bracketed reads
bracket_nsWidth of the winning bracket (quality bound)
adj_freq_scaled, adj_offset, adj_statusadjtimex() readback
snap_err_nsExtrapolated ntp_error deducted by the snapshot correction
ntp_error, mult, ntp_err_mult, ntp_err_fracTimekeeper discipline state from tk_sample

Data last fetched: —