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:
| Server | Stratum | Connection | Intended use |
|---|---|---|---|
ntp-p1.obspm.fr | 1 | PPS tied to UTC(OP) | Reserved for secondary servers serving significant sites |
ntp.obspm.fr | 2 | synced to the above | Open 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):
| Country | Laboratory | Scale | Public NTP servers |
|---|---|---|---|
| France | LTE / SYRTE (Paris Obs.) | UTC(OP) | ntp-p1.obspm.fr, ntp.obspm.fr |
| Germany | PTB | UTC(PTB) | ptbtime1.ptb.de to ptbtime4.ptb.de (NTS available) |
| United Kingdom | NPL | UTC(NPL) | ntp1.npl.co.uk, ntp2.npl.co.uk |
| Sweden | RISE / Netnod | UTC(SP) | ntp1.sp.se; gbg1.ntp.se, nts.netnod.se (NTS) |
| Italy | INRiM | UTC(IT) | ntp1.inrim.it, ntp2.inrim.it |
| Spain | ROA (Navy Observatory) | UTC(ROA) | hora.roa.es, minuto.roa.es |
| Switzerland | METAS | UTC(CH) | ntp.metas.ch |
| Austria | BEV | UTC(BEV) | bevtime1.metrologie.at |
| Belgium | Royal Observatory | UTC(ORB) | ntp1.oma.be, ntp2.oma.be |
| Netherlands | VSL | UTC(VSL) | ntp.vsl.nl |
| Poland | GUM | UTC(PL) | tempus1.gum.gov.pl, tempus2.gum.gov.pl |
| Czechia | UFE | UTC(TP) | time.ufe.cz (NTS) |
| Finland | VTT MIKES | UTC(MIKE) | time1.mikes.fi, ntp1.mikes.fi |
| Russia | VNIIFTRI | UTC(SU) | ntp1.vniiftri.ru, ntp2.vniiftri.ru |
| United States | NIST | UTC(NIST) | time.nist.gov |
| United States | USNO (Naval Obs.) | UTC(USNO) | tick.usno.navy.mil, tock.usno.navy.mil |
| Canada | NRC | UTC(NRC) | time.nrc.ca |
| Brazil | Obs. Nacional / NIC.br | UTC(ONRJ) | a.st1.ntp.br (NTP.br project) |
| Mexico | CENAM | UTC(CNM) | cronos.cenam.mx |
| Japan | NICT | UTC(NICT) | ntp.nict.jp |
| South Korea | KRISS | UTC(KRIS) | time.kriss.re.kr |
| China | NTSC (Acad. of Sciences) | UTC(NTSC) | ntp.ntsc.ac.cn |
| Taiwan | TL | UTC(TL) | time.stdtime.gov.tw |
| India | NPL India | UTC(NPLI) | time.nplindia.org |
| Australia | NMI | UTC(AUS) | time.nmi.gov.au |
| Hong Kong | HKO | UTC(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.frReal 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 : 76Reading this single output field by field crosses almost every chapter of this guide, to the point of amounting to a summary of it:
| Field | What it tells, and where the guide explains it |
|---|---|
Remote address | the 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 : 123 | NTP’s historic UDP port, the one the firewall handles with notrack and rate limiting (nftables chapter) |
Local address | the interface this server went out through (address replaced here with a documentation prefix) |
Leap status : Normal | no leap second announced: the translation of the header’s LI field (NTP packet anatomy and Leap seconds chapters) |
Version : 4 | NTPv4, RFC 5905 (the header’s VN field) |
Mode : Server | mode 4, a server’s response to a client request: the only mode this project uses (NTP packet anatomy chapter) |
Stratum : 1 | the peer hangs directly off its physical reference: the national reference itself is answering (Overview chapter) |
Poll interval : 9 | the polling interval in log₂ seconds (2⁹ = 512 s), adjusted dynamically by chrony |
Precision : -18 | the 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 dispersion | delay 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 time | the instant of the peer’s last clock update against its reference |
Offset | the apparent offset (+725 µs), computed by the four-timestamp formula (NTP packet anatomy chapter); its critical reading is the subject of this chapter |
Peer delay | the 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 dispersion | this measurement’s own uncertainty (just a few µs) |
Response time | the remote server’s internal processing time (230 µs): the T3-T2 term, subtracted from the delay precisely because it never crosses the network |
Jitter asymmetry | chrony’s estimate of the noise imbalance between the outbound and return paths: the protocol’s fundamental limit, made visible |
NTP tests | the ten validity tests (1 = pass, 0 = fail), detailed below |
Interleaved : No | interleaved mode (xleave, Chrony chapter) was not active on this exchange: it only engages when both sides practice it |
Authenticated : No | no NTS on this upstream association; this server, however, offers it to its own clients (NTS chapter) |
TX/RX timestamping : Hardware | timestamping as close to the wire as possible, on both sides of the local network card (PHC chapter) |
Total TX to Total good RX | the 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/RX | where 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:
| Group | Test | What is checked |
|---|---|---|
| RFC 5905, test 1 | duplicate | the packet is not a copy of the previous one |
| RFC 5905, test 2 | spoofing | the origin timestamp matches the request actually sent, which blocks forged or replayed responses |
| RFC 5905, test 3 | valid timestamps | the server’s receive and transmit timestamps are not zero |
| RFC 5905, test 5 | authentication | the packet’s signature is valid, or none is required (the case of this exchange, Authenticated : No) |
| RFC 5905, test 6 | synchronised server | the peer does not announce an unsynchronised clock (leap, stratum) |
| RFC 5905, test 7 | sane header | root delay and root dispersion stay below the protocol maxima |
| chrony, test 1 | maximum delay | the measurement’s delay stays below maxdelay |
| chrony, test 2 | delay ratio | the delay does not exceed maxdelayratio times the observed minimum |
| chrony, test 3 | delay/dispersion | the combination of delay and dispersion growth rate stays below maxdelaydevratio |
| chrony, test 4 | loop | no 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:
- the laboratory clock’s error, negligible (nanoseconds);
- the local clock’s error, small (RMS offset around a microsecond when following this guide);
- 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.
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#
| Criterion | National laboratory (e.g. SYRTE) | This server (this guide) |
|---|---|---|
| Time source | Cs fountains, H masers | GNSS (PPS) |
| Source offset from UTC | a few ns | ~100 ns |
| Accuracy served locally (LAN) | n/a (different network) | a few µs |
| Accuracy served over the internet | limited to ~0.5-2 ms by the network, or more | same |
| Cost | expensive | ~€250 |
| Role | legal reference, metrology | proximity 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 sourcesoffset 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 tontp-p1.obspm.frwhile 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.frexplicitly 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.
xleavemode (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.