NTP Sync Quality — Co-located VM Test

Does the timekeeping series change how chrony disciplines the clock on an idle guest, under a completely standard NTP setup (no PPS)? Four co-located VMs 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.

Test Matrix

HostInstanceTick ModeKernelSocket
Ei-0bbd4d706b525b2c6periodic (nohz=off, 1000Hz)7.3.0-rc1-timekeeping+host:1
Fi-0a1209b28c3b15800periodic (nohz=off, 1000Hz)7.3.0-rc1-baseline+host:1
Gi-051ba016b4648399aNO_HZ_IDLE7.3.0-rc1-timekeeping+host:0
Hi-061779927cc7e5b35NO_HZ_IDLE7.3.0-rc1-baseline+host:0 (to be confirmed — replacement instance, see below)

Kernels

Setup

Why Co-located?

The earlier bare metal tests showed clear differences between patched and baseline kernels, but confounders (different crystals, different thermal environments, different network paths) made it hard to attribute differences purely to the kernel patches. By placing all 4 VMs on the same physical host, we eliminate:

Any remaining differences must come from the kernel's timekeeping code or the tick configuration.

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: exponentially-weighted RMS (60-sample halflife) of 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: —