Performance: benchmarking against the national time reference#

Why#

This server shows an RMS offset around a microsecond: is that good or bad? An isolated performance figure means nothing: a point of comparison is needed. That point of comparison exists, and it is public and free: every country has a national metrology laboratory that physically realizes UTC and distributes that reference over NTP. In France, it is the UTC(OP) time scale, realized at the Paris Observatory by the laboratory historically known as SYRTE (Systèmes de Référence Temps-Espace, now part of the Laboratoire Temps Espace, LTE), the one that defines French legal time. This chapter uses it as the detailed example.

Good news: this comparison requires no additional hardware. Following the Chrony chapter, it is already running on this server: the configured upstream sources are precisely the NTP servers of these national laboratories.

The reference: UTC(OP) and the Paris Observatory’s NTP servers#

UTC(OP) is produced from an ensemble of hydrogen masers and cesium atomic fountains. It contributes to the computation of TAI by the BIPM (International Bureau of Weights and Measures), and the UTC − UTC(OP) offset published monthly in the BIPM’s Circular T is measured in nanoseconds. Give or take a few laboratories worldwide, this is as good as it gets.

SYRTE distributes this reference over NTP:

ServerStratumConnectionIntended use
ntp-p1.obspm.fr1PPS tied to UTC(OP)Reserved for secondary servers serving significant sites
ntp.obspm.fr2synced to the aboveOpen to the whole internet community

A public Stratum 1 server built with this guide fits the intended use case of ntp-p1.obspm.fr, but with the same etiquette as for any institutional source: minpoll 6 (at most one query per minute), iburst only at startup, and never dozens of individual clients querying it directly.

National references around the world#

Outside France, the same approach applies with the relevant country’s national laboratory. More than 80 laboratories maintain a UTC(k) realization listed in the BIPM’s Circular T; the table below lists those exposing a public NTP service (hostnames verified at the time of writing, each laboratory publishes its own usage policy, to be read before adding it as an upstream source):

CountryLaboratoryScalePublic NTP servers
FranceLTE / SYRTE (Paris Obs.)UTC(OP)ntp-p1.obspm.fr, ntp.obspm.fr
GermanyPTBUTC(PTB)ptbtime1.ptb.de to ptbtime4.ptb.de (NTS available)
United KingdomNPLUTC(NPL)ntp1.npl.co.uk, ntp2.npl.co.uk
SwedenRISE / NetnodUTC(SP)ntp1.sp.se; gbg1.ntp.se, nts.netnod.se (NTS)
ItalyINRiMUTC(IT)ntp1.inrim.it, ntp2.inrim.it
SpainROA (Navy Observatory)UTC(ROA)hora.roa.es, minuto.roa.es
SwitzerlandMETASUTC(CH)ntp.metas.ch
AustriaBEVUTC(BEV)bevtime1.metrologie.at
BelgiumRoyal ObservatoryUTC(ORB)ntp1.oma.be, ntp2.oma.be
NetherlandsVSLUTC(VSL)ntp.vsl.nl
PolandGUMUTC(PL)tempus1.gum.gov.pl, tempus2.gum.gov.pl
CzechiaUFEUTC(TP)time.ufe.cz (NTS)
FinlandVTT MIKESUTC(MIKE)time1.mikes.fi, ntp1.mikes.fi
RussiaVNIIFTRIUTC(SU)ntp1.vniiftri.ru, ntp2.vniiftri.ru
United StatesNISTUTC(NIST)time.nist.gov
United StatesUSNO (Naval Obs.)UTC(USNO)tick.usno.navy.mil, tock.usno.navy.mil
CanadaNRCUTC(NRC)time.nrc.ca
BrazilObs. Nacional / NIC.brUTC(ONRJ)a.st1.ntp.br (NTP.br project)
MexicoCENAMUTC(CNM)cronos.cenam.mx
JapanNICTUTC(NICT)ntp.nict.jp
South KoreaKRISSUTC(KRIS)time.kriss.re.kr
ChinaNTSC (Acad. of Sciences)UTC(NTSC)ntp.ntsc.ac.cn
TaiwanTLUTC(TL)time.stdtime.gov.tw
IndiaNPL IndiaUTC(NPLI)time.nplindia.org
AustraliaNMIUTC(AUS)time.nmi.gov.au
Hong KongHKOUTC(HKO)stdtime.gov.hk

All these laboratories publish their offset from UTC in the same Circular T: benchmarking against several national references at once is therefore possible, which is exactly what the Chrony chapter’s configuration does (OBSPM, PTB, NPL, RISE, NIST). Favor laboratories that are geographically close: network asymmetry grows with distance, and it is what dominates the measurement (next section).

Two traceability chains to UTC#

        ┌───────────────────────┐                      ┌────────────────┐
        │  National laboratory  │                      │  This server   │
        │  (e.g. SYRTE, Paris)  │                      │  (this guide)  │
        └───────────────────────┘                      └────────────────┘
                    │                                           │
                    ▼ Cs fountains + H masers                   ▼ Atomic clocks on board GNSS satellites
              ┌───────────┐
              │  UTC(OP)  │──Circular T (BIPM)──────────────────►
              └───────────┘
                    │                                           │
                    ▼ PPS signal                                ▼ received PPS signal (~100 ns from true UTC)
          ┌───────────────────┐                         ┌───────────────┐
          │  ntp-p1.obspm.fr  │                         │  this server  │
          │    (Stratum 1)    │                         │  (Stratum 1)  │
          └───────────────────┘                         └───────────────┘

Both chains end at UTC, via different paths: the national laboratory produces its realization of UTC locally with its own clocks; this server receives GNSS time, itself steered to realizations of UTC by the constellation operators (GNSS constellations chapter). One’s traceability goes through the sky, the other’s through its own atomic fountains.

The comparison, measured continuously#

Since ntp-p1.obspm.fr is one of chrony’s configured upstream sources (Chrony chapter), this server continuously measures its offset against the French reference:

chronyc sources -v
chronyc ntpdata ntp-p1.obspm.fr

Real output from this server (only the local address is replaced with a documentation address):

$ chronyc ntpdata ntp-p1.obspm.fr
Remote address  : 145.238.80.80 (91EE5050)
Remote port     : 123
Local address   : 192.0.2.10 (C000020A)
Leap status     : Normal
Version         : 4
Mode            : Server
Stratum         : 1
Poll interval   : 9 (512 seconds)
Precision       : -18 (0.000003815 seconds)
Root delay      : 0.000000 seconds
Root dispersion : 0.000214 seconds
Reference ID    : 4D525300 (MRS)
Reference time  : Sun Jul 19 23:22:36 2026
Offset          : +0.000724725 seconds
Peer delay      : 0.003111070 seconds
Peer dispersion : 0.000003834 seconds
Response time   : 0.000230311 seconds
Jitter asymmetry: -0.46
NTP tests       : 111 111 1111
Interleaved     : No
Authenticated   : No
TX timestamping : Hardware
RX timestamping : Hardware
Total TX        : 92
Total RX        : 92
Total valid RX  : 92
Total good RX   : 84
Total kernel TX : 92
Total kernel RX : 16
Total HW TX     : 76
Total HW RX     : 76

Reading this single output field by field crosses almost every chapter of this guide, to the point of amounting to a summary of it:

FieldWhat it tells, and where the guide explains it
Remote addressthe queried server’s address; the hexadecimal in parentheses (91EE5050) is the 32-bit form of the IPv4, exactly what a stratum 2 client would see as its Reference ID (NTP packet anatomy chapter)
Remote port : 123NTP’s historic UDP port, the one the firewall handles with notrack and rate limiting (nftables chapter)
Local addressthe interface this server went out through (address replaced here with a documentation prefix)
Leap status : Normalno leap second announced: the translation of the header’s LI field (NTP packet anatomy and Leap seconds chapters)
Version : 4NTPv4, RFC 5905 (the header’s VN field)
Mode : Servermode 4, a server’s response to a client request: the only mode this project uses (NTP packet anatomy chapter)
Stratum : 1the peer hangs directly off its physical reference: the national reference itself is answering (Overview chapter)
Poll interval : 9the polling interval in log₂ seconds (2⁹ = 512 s), adjusted dynamically by chrony
Precision : -18the precision the peer declares for its own system clock, in log₂ seconds (2⁻¹⁸ ≈ 3.8 µs); different from this guide’s precision 1e-7 on the PPS refclock (Chrony chapter), in decimal seconds
Root delay / Root dispersiondelay and uncertainty accumulated up to stratum 0: near zero here, the peer is its reference (NTP packet anatomy chapter)
Reference ID : (MRS)the declarative ASCII identifier of a stratum 1, here the laboratory’s local reference; on this side, this server announces PPS0 (NTP packet anatomy chapter, source catalog)
Reference timethe instant of the peer’s last clock update against its reference
Offsetthe apparent offset (+725 µs), computed by the four-timestamp formula (NTP packet anatomy chapter); its critical reading is the subject of this chapter
Peer delaythe network round trip to Paris (3.1 ms), i.e. (T4-T1)-(T3-T2): the unknown asymmetry of that path makes up most of the apparent offset
Peer dispersionthis measurement’s own uncertainty (just a few µs)
Response timethe remote server’s internal processing time (230 µs): the T3-T2 term, subtracted from the delay precisely because it never crosses the network
Jitter asymmetrychrony’s estimate of the noise imbalance between the outbound and return paths: the protocol’s fundamental limit, made visible
NTP teststhe ten validity tests (1 = pass, 0 = fail), detailed below
Interleaved : Nointerleaved mode (xleave, Chrony chapter) was not active on this exchange: it only engages when both sides practice it
Authenticated : Nono NTS on this upstream association; this server, however, offers it to its own clients (NTS chapter)
TX/RX timestamping : Hardwaretimestamping as close to the wire as possible, on both sides of the local network card (PHC chapter)
Total TX to Total good RXthe association’s counters: 92 requests, 92 valid responses, of which 84 kept; the other 8 failed one of the tests below
Total kernel/HW TX/RXwhere the timestamps came from: 76 transmissions and 76 receptions hardware-timestamped, the rest by the kernel (PHC chapter)

The 111 111 1111 grouping (3 + 3 + 4) corresponds to six tests inherited from RFC 5905 (tests 1 through 3, then 5 through 7; test 4, an access control, is not displayed by chrony) and four chrony-specific tests, backed by its configuration directives:

GroupTestWhat is checked
RFC 5905, test 1duplicatethe packet is not a copy of the previous one
RFC 5905, test 2spoofingthe origin timestamp matches the request actually sent, which blocks forged or replayed responses
RFC 5905, test 3valid timestampsthe server’s receive and transmit timestamps are not zero
RFC 5905, test 5authenticationthe packet’s signature is valid, or none is required (the case of this exchange, Authenticated : No)
RFC 5905, test 6synchronised serverthe peer does not announce an unsynchronised clock (leap, stratum)
RFC 5905, test 7sane headerroot delay and root dispersion stay below the protocol maxima
chrony, test 1maximum delaythe measurement’s delay stays below maxdelay
chrony, test 2delay ratiothe delay does not exceed maxdelayratio times the observed minimum
chrony, test 3delay/dispersionthe combination of delay and dispersion growth rate stays below maxdelaydevratio
chrony, test 4loopno synchronisation loop: the queried server is not itself synchronised to this machine

A single 0 in this line is enough to discard the measurement: this is the input filtering that protects the selection algorithm (Overview chapter) from corrupted, spoofed, or inconsistent data.

In practice, the observed offset against a remote institutional server typically sits in the range of a few hundred microseconds (here +725 µs). That figure needs a careful reading, because it mixes three things:

  1. the laboratory clock’s error, negligible (nanoseconds);
  2. the local clock’s error, small (RMS offset around a microsecond when following this guide);
  3. the asymmetry of the network path out vs back, dominant (hundreds of µs, not measurable by NTP itself).

In other words: the displayed offset measures neither the laboratory clock’s quality nor really the local server’s, but mostly the quality of the network path between the two. That is precisely the central lesson of this chapter.

The other axis of comparison: stability (Allan deviation)#

The offset analyzed above measures accuracy. A clock is also judged on its stability: how much its frequency varies over time. To characterize this rigorously, beyond the instantaneous “skew” (Metrology chapter), time metrology uses the Allan deviation σᵧ(τ), a measure of a clock’s frequency variability, computed over observation windows of increasing duration τ (1 s, 10 s, 100 s, …). Unlike a plain statistical standard deviation, it stays defined and interpretable even for non-stationary noise sources (slow drift, frequency random walk), which makes it particularly well suited to real oscillators.

On this server, the value measured in production at the finest cadence (τ=4 s, poll 2) is σᵧ ≈ 1.7×10⁻⁸, the limit being set essentially by kernel interrupt jitter (Real-time kernel and IRQ affinity chapters), not by the GNSS receiver itself.

Allan deviation σᵧ(τ) measured on this server, log-log scale.
Allan deviation measured over 143 h of tracking.log, including rotations (PPS Freq ppm column). The floor, ~1.7×10⁻⁸ at τ=4 s, is set by kernel interrupt jitter; the rise in √τ betrays a correlated (thermal) drift; the maximum, ~3.3×10⁻⁷ around τ=8192 s (about 2.3 h), then falls back to ~7.9×10⁻⁸ around τ=131,000 s (about 36 h): chrony's discipline does not merely bound the frequency error, it reins it back in over the longest windows.

An active hydrogen maser like those at SYRTE typically shows σᵧ(τ=1s) on the order of 10⁻¹³, a cesium atomic fountain drops toward 10⁻¹⁶ over integration times on the order of a day (general orders of magnitude for this type of reference, not figures specifically published by SYRTE; the BIPM’s Circular T and SYRTE’s publications give the exact, sourced values). The gap with the value measured above, 5 to 6 orders of magnitude, is real, but the raw comparison doesn’t really make sense: these two σᵧ don’t measure the same thing. A maser’s or a fountain’s characterizes the intrinsic stability of the atomic reference itself. This server’s characterizes the residual of chrony’s estimate after continuous correction by the GNSS PPS on an ordinary mass-market crystal with no merit of its own, dominated by short-term measurement noise and by thermal drift beyond a few minutes. Comparing the two amounts to comparing the precision of an atomic clock sitting on a stable table to that of an onboard altimeter that recalibrates its drift every 4 seconds against a GPS signal.

On the stability axis as on the accuracy axis, a raw comparison to a national reference is misleading: the verdict that matters for this project is read below.

The real verdict of the comparison#

CriterionNational laboratory (e.g. SYRTE)This server (this guide)
Time sourceCs fountains, H masersGNSS (PPS)
Source offset from UTCa few ns~100 ns
Accuracy served locally (LAN)n/a (different network)a few µs
Accuracy served over the internetlimited to ~0.5-2 ms by the network, or moresame
Costexpensive~€250
Rolelegal reference, metrologyproximity service, hobby

The decisive row is the third one: as soon as a client queries a server across the internet, network path asymmetry (500 µs to several ms) crushes the server’s intrinsic accuracy, whatever it is. Querying the best clock in the country through 15 router hops gives a less accurate result than querying a Raspberry Pi sitting 100 ns from UTC on the same Ethernet switch.

That is the final justification for this entire guide: a local Stratum 1 doesn’t claim to rival a national laboratory at metrology: it wins because it is close. The accuracy of an NTP service is decided as much by network topology as by the clock itself.

Pitfalls to avoid#

Never interpret the chronyc sources offset to a remote server as the local clock’s error. That offset includes network asymmetry, invisible to and uncorrectable by NTP (the protocol assumes a symmetric round trip, RFC 5905, and the Anatomy of the NTP packet chapter). A 400 µs offset to ntp-p1.obspm.fr while the local PPS RMS offset is 0.07 µs means the network is asymmetric, not that the local clock is off by 400 µs.

  • Concluding from a single measurement. Network asymmetry varies with link load (office hours vs night). Watch the dispersion over several days (chronyc sourcestats, Munin chapter) before drawing a conclusion.
  • Over-polling institutional servers. ntp-p1.obspm.fr explicitly states it is reserved for secondary servers of significant sites. minpoll 6, a handful of diversified sources (OBSPM, PTB, NPL, RISE, NIST), no more. Diversity also protects against the case where one institutional source temporarily goes wrong or unreachable.
  • Forgetting that the comparison is only as good as the timestamps at both ends. xleave mode (when the NTP source supports it) and hardware timestamping (Chrony and PHC chapters) reduce the local-noise share of the measurement; without them, it is mostly the jitter of the local network stack that gets measured.

Verify#

# Current offset against each institutional source
chronyc sources -v

# Accumulated statistics (dispersion, estimated drift per source)
chronyc sourcestats

# Full detail of the measurement against the French reference
chronyc ntpdata ntp-p1.obspm.fr
# Interesting fields: "Peer delay" (round trip), "Root delay",
# "Offset", comparing the offset to half the peer delay gives an
# order of magnitude for the possible asymmetry.

A healthy server shows: the PPS selected (*), the institutional sources mutually consistent (+) with offsets around a hundred µs, and a local RMS offset around a microsecond, the three levels of the comparison, each in its place.


📚 Going further

  • SYRTE / Paris Observatory, Diffusion de l’heure par internet : NTP (French): the reference page for the NTP servers tied to UTC(OP).
  • BIPM, Circular T: monthly publication of the UTC − UTC(k) offsets for every national laboratory, the official report card of national clocks, freely accessible.
  • French legal time is defined from UTC(OP) (decree no. 2017-292 on French legal time).
  • The Allan deviation was introduced by David W. Allan in 1966 (Statistics of Atomic Frequency Standards, Proceedings of the IEEE); it is the reference tool for characterizing the frequency stability of oscillators and atomic clocks.