NTP Sync Quality — Co-located VM Test

Test Matrix

HostInstanceTick ModeKernelDescription
Ei-0bbd4d706b525b2c6HZ_PERIODIC (1000Hz)039461403dNTP precision patches (v6 series)
Fi-0a1209b28c3b15800HZ_PERIODIC (1000Hz)bc484a509673baseline (tip/timers/ptp)
Gi-051ba016b4648399aNO_HZ_IDLE039461403dNTP precision patches (v6 series)
Hi-06ff421ea34e6dc60NO_HZ_IDLEbc484a509673baseline (tip/timers/ptp)

Summary

Why Co-located?

The bare metal test 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.

Test Restart — 2026-05-27

Data collection restarted with Amazon Time Sync Service correctly configured (both 169.254.169.123 and fd00:ec2::123 as preferred servers). Previous Fedora 43 default chrony config did not include these; see RHBZ#2482393. IPv6 also enabled on all instances.

Test Restart — 2026-05-30

Data collection restarted with clocksource set to acpi_pm on all four virt hosts. This eliminates the TSC as a variable, testing the NTP precision patches against a slower but independent hardware counter.

Test Restart — 2026-06-10

Restarted on the reworked v5 patch series — the generic NTP precision commits being prepared for upstream posting as v5. Patched kernel 2fba787174cf (the 5-commit series tip), baseline bc484a509673 (tip/timers/ptp), both based on 7.1.0-rc2+. Clocksource remains acpi_pm on all four VMs. All host CSVs were truncated to a common start time for this run.

Test Restart — 2026-06-14

Restarted on the reworked v6 patch series — now seven generic NTP precision commits (the competing time_offset/time_adjust skew settlement added since v5), being prepared for upstream posting as v6. Patched kernel 307b20f7dc0f, baseline bc484a509673, both based on 7.1.0-rc2+. Clocksource is now tsc on all four VMs (changed from acpi_pm in the earlier runs) to test the v6 patches against the default high-resolution counter. All host CSVs were truncated to a common start time for this run.

Test Restart — 2026-06-18

Both kernels rebuilt with CONFIG_NO_HZ_IDLE (previously CONFIG_HZ_PERIODIC), so the periodic-vs-nohz split is now real: E and F boot with nohz=off (forced periodic, ~1000 LOC/s on every CPU), while G and H boot tickless (idle CPUs drop to a handful of LOC/s). Earlier runs were periodic on all four despite the labels. Also swapped the F and G instance IDs so each physical socket hosts one patched + one baseline VM: this droplet is dual-socket (host:0/host:1) and the two sockets' TSCs differ by ~2.5 PPM, which previously confounded the patched-vs-baseline comparison. Now socket host:1 = E (patched) + F (baseline) on the periodic arm, and socket host:0 = G (patched) + H (baseline) on the nohz arm — kernel flavour and TSC held constant within each socket. All four kexec'd today and CSVs reset to a common start. Both deployed images also carry a debug-instrumentation tracker (per-tick mult / skew / xtime_rem / ntp_error accounting) on top of the series; the patched tip is now 039461403d (rebased from the 2026-06-14 307b20f7dc0f).

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

Same methodology as the bare metal test. CSV columns from chronyc -c tracking:

Scripts

Raw Data

CSV Format

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

Data last fetched: