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.
| Host | Instance | Tick Mode | Kernel | |
|---|---|---|---|---|
| A | i-0af5ab4f24fb27f23 | periodic (nohz=off, 1000Hz) | 7.3.0-rc1-timekeeping+ | — |
| B | i-087c029c2e38af9b2 | periodic (nohz=off, 1000Hz) | 7.3.0-rc1-baseline+ | — |
| C | i-055d5d7f2a87b5c76 | NO_HZ_IDLE | 7.3.0-rc1-timekeeping+ | — |
| D | i-04bc451daa83780b2 | NO_HZ_IDLE | 7.3.0-rc1-baseline+ | — |
cee9395acd80)./sys/kernel/debug/tk_sample
sampler exposing ntp_error, mult etc..config (only CONFIG_LOCALVERSION
differs): HZ=1000, NO_HZ_IDLE=y. Tick mode selected per host by
nohz=off on the command line. Deployed by kexec; the grub
default remains the stock Fedora kernel.server 169.254.169.123 prefer iburst (Amazon Time Sync) and
log tracking measurements statistics. Polling is fully adaptive —
the poll interval is a measured output, not a controlled input.PTP_SYS_OFFSET_EXTENDED), independent of
chrony's own beliefs. The PHC derives from the same AWS time infrastructure
as the NTP service, without the network path.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.
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).
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 = +½).
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.
Two collectors run on each host:
chronyc -c tracking every 30 s → ntp_quality.csv (chrony's self-view)phc_phase_log every 1 s → phc_phase.csv (PHC referee + adjtimex() readback + tk_sample kernel discipline state)enable_phc param is lost on kexec), ensure chrony log directive, start collectorschronyc -c tracking)| Column | Description |
|---|---|
| offset_ns | Current offset from NTP source (instantaneous error) |
| freq_ppm | Frequency correction applied by chrony |
| rms_offset_ns | RMS of recent offsets (jitter measure) |
| skew_ppm | Rate of frequency change (stability measure) |
| root_delay_ns | Round-trip delay to stratum-1 |
| root_disp_ns | Estimated maximum error from root |
| Column | Description |
|---|---|
| phc_offset_ns | CLOCK_REALTIME − PHC, tightest of 5 bracketed reads |
| bracket_ns | Width of the winning bracket (quality bound) |
| adj_freq_scaled, adj_offset, adj_status | adjtimex() readback |
| snap_err_ns | Extrapolated ntp_error deducted by the snapshot correction |
| ntp_error, mult, ntp_err_mult, ntp_err_frac | Timekeeper discipline state from tk_sample |
Data last fetched: —