Comparison of NTP implementations
This document compares features and performance of the following NTP implementations:
Presence of the features was determined from documentation, observed behaviour and source code. There may be mistakes, please let us know if you find any.
Features
Basic
chrony |
ntp |
openntpd |
|
|---|---|---|---|
Supported systems |
Linux, FreeBSD, NetBSD, Solaris, Mac OS X |
Linux, FreeBSD, NetBSD, OpenBSD, Solaris, Mac OS X, Windows, … |
Linux, FreeBSD, NetBSD, OpenBSD, Solaris, Mac OS X |
License |
GPLv2 |
MIT + BSD |
BSD |
Programming language |
C |
C |
C |
Size of daemon binary in default configuration on Linux x86-64 |
171 KB |
659 KB |
95 KB |
Time sources
chrony |
ntp |
openntpd |
|
|---|---|---|---|
NTP |
Yes |
Yes |
Yes |
Reference clocks |
Yes |
Yes |
Yes |
Manual input |
Yes |
No |
No |
Source tracking
chrony |
ntp |
openntpd |
|
|---|---|---|---|
Fixed sample filtering |
Yes |
Yes |
Yes |
Adaptive sample filtering |
Yes |
No |
No |
Sample weighting |
Yes |
No |
No |
Frequency tracking |
Yes |
No |
No |
Restore state from file |
Yes |
No |
No |
Source selection
chrony |
ntp |
openntpd |
|
|---|---|---|---|
Nonrandom selection |
Yes |
Yes |
Yes |
Falseticker detection |
Yes |
Yes |
No |
Clustering |
No |
Yes |
No |
Offset combining |
Yes |
Yes |
No |
Frequency combining |
Yes |
N/A |
N/A |
Minimum number of sources |
1 (configurable) |
1 (configurable) |
1 |
Clock discipline
chrony |
ntp |
openntpd |
|
|---|---|---|---|
Independent phase and frequency control |
Yes |
No |
Yes |
Allowed random update interval (e.g. intermittent connection) |
Yes |
No |
Yes |
Step threshold |
Infinity (configurable) |
0.128 s (configurable) |
N/A |
Limited number of steps |
Yes (configurable) |
No |
Yes |
Panic threshold |
Infinity (configurable) |
1000 s (configurable) |
N/A |
Maximum slew rate |
System specific (Linux: 100000 ppm, FreeBSD/NetBSD: 5000 ppm, Solaris: 32500 ppm) (configurable) |
500 ppm |
System specific (Linux: 500 ppm, FreeBSD/NetBSD: 5000 ppm, Solaris: 65000 ppm) |
Restore frequency from file |
Yes |
Yes |
Yes |
Limited wakeups (power saving) |
Yes |
No |
Yes |
Temperature compensation |
Yes |
No |
No |
NTP modes
chrony |
ntp |
openntpd |
|
|---|---|---|---|
Server (mode 4) |
Yes |
Yes |
Yes |
Client (mode 3) |
Yes |
Yes |
Yes |
Persistent symmetric |
Yes |
Yes |
No |
Ephemeral symmetric |
No |
Yes |
No |
Broadcast server |
Yes |
Yes |
No |
Broadcast client |
No |
Yes |
No |
Multicast server |
No |
Yes |
No |
Multicast client |
No |
Yes |
No |
Manycast server |
No |
Yes |
No |
Manycast client |
No |
Yes |
No |
Orphan mode |
No |
Yes |
No |
NTP client
chrony |
ntp |
openntpd |
|
|---|---|---|---|
Multiple servers per name (pool) |
Yes |
Yes |
Yes |
Fixed delay-based sample filtering |
Yes |
Yes |
Yes |
Adaptive delay-based sample filtering |
Yes |
No |
No |
KoD RATE handling |
Yes |
Yes |
No |
Ready for next NTP era (year 2036) |
Yes |
Yes |
No |
Extra timestamp validation |
No |
No |
Yes (HTTPS date) |
Configurable port number |
Yes |
No |
No |
NTP server
chrony |
ntp |
openntpd |
|
|---|---|---|---|
NTP version |
NTPv4 |
NTPv4 |
SNTPv4 |
Root dispersion/delay accumulation |
Yes |
Yes |
No |
Adaptive dispersion rate |
Yes |
No |
N/A |
Restricted access |
Yes |
Yes |
No |
Rate limiting |
No |
Yes |
No |
Local stratum/driver |
Yes |
Yes |
No |
Served time not fixed to local time |
Yes |
No |
Yes |
Time smoothing |
Yes |
N/A |
No |
Configurable port number |
Yes |
No |
No |
NTP authentication
chrony |
ntp |
openntpd |
|
|---|---|---|---|
Symmetric keys |
Yes |
Yes |
No |
Autokey (insecure) |
No |
Yes |
No |
Network Time Security |
No |
No |
No |
Samba MS-SNTP signing |
No |
Yes |
No |
MAC hash functions |
MD5, SHA-1, SHA-2, … |
MD5, SHA-1 |
N/A |
NTP pool use
chrony |
ntp |
openntpd |
|
|---|---|---|---|
Number of used servers |
By DNS, max 4 (configurable) |
10 (configurable) |
By DNS |
Replace unreachable |
Yes |
Yes |
No |
Replace falsetickers |
Yes |
Yes |
N/A |
NTP poll control
chrony |
ntp |
openntpd |
|
|---|---|---|---|
Polling interval |
64-1024 s (configurable) |
64-1024 s (configurable) |
5-1500 s |
Minimum configurable polling interval |
1 s |
8 s |
N/A |
Randomization |
Yes |
Yes |
Yes |
Burst |
Yes |
Yes |
No |
Interval independent from other sources |
Yes |
Yes |
No |
Aware of jitter |
Yes |
Yes |
No |
User controlled polling |
Yes |
No |
No |
Reference clocks
chrony |
ntp |
openntpd |
|
|---|---|---|---|
System drivers |
PPS, PTP clock (Linux) |
PPS |
Timedelta sensors (OpenBSD) |
Interfaces to connect 3rd party drivers |
SHM, SOCK |
SHM |
None |
Number of HW specific drivers |
0 |
> 30 |
0 |
Sample filtering |
Yes |
Yes |
Yes |
Real-time clock (RTC)
chrony |
ntp |
openntpd |
|
|---|---|---|---|
Time initialization from RTC |
Yes (Linux) |
No |
No |
RTC drift tracking |
Yes (Linux) |
No |
No |
RTC trimming |
Yes (Linux) |
No |
No |
RTC kernel sync (11-minute mode) |
Yes (Linux) |
Yes |
No |
Restore time from file w/o RTC |
Yes |
No |
No |
Leap seconds
chrony |
ntp |
openntpd |
|
|---|---|---|---|
Supported |
Yes |
Yes |
No |
Clock correction modes |
system, step, slew, ignore |
system, step, ignore |
ignore |
Majority of sources required to agree on leap |
Yes |
Yes |
N/A |
Additional leap second source |
system tzdata |
leapfile |
N/A |
Server leap smear |
Yes (quadratic) |
Yes (cosine) |
N/A |
Accepted on |
Jun 30 / Dec 31 |
any day |
N/A |
Applied on |
Jun 30 / Dec 31 |
last day of any month |
N/A |
Announced on |
Jun 30 / Dec 31 |
last day of any month |
N/A |
Runtime management
chrony |
ntp |
openntpd |
|
|---|---|---|---|
Local monitoring |
Yes |
Yes |
Yes |
Local configuration |
Yes |
Yes |
No |
Remote monitoring |
Yes |
Yes |
No |
Remote configuration |
No ( |
Yes |
No |
Restricted access |
Yes |
Yes |
N/A |
Security
chrony |
ntp |
openntpd |
|
|---|---|---|---|
Root privileges dropping |
Yes (Linux, NetBSD) |
Yes (Linux, NetBSD, Solaris) |
No |
Privilege separation |
No |
No |
Yes |
System call filter (Linux seccomp) |
Yes |
Yes |
No |
Random NTP client source port |
Yes |
No |
Yes |
Connected NTP client sockets |
Yes |
No |
Yes |
NTP server port disabled by default |
Yes |
No |
Yes |
Remote management disabled by default |
N/A |
No |
N/A |
Remote management port separate from NTP |
Yes |
No |
N/A |
No traffic amplification in management protocol |
Yes |
No |
N/A |
Performance
This is a comparison of accuracies that can be achieved when the NTP implementations are used as NTP clients in several clock and network conditions. The accuracy of the synchronized clock was measured in a simulated Linux environment. The results are mean values and standard deviations from 100 simulations. The values are in microseconds.
Test 1: permanent network connection and stable clock
In this test with one NTP server the clients were using their default polling configuration. The clock was relatively stable (1ppb/s wander).
| Network jitter | chrony |
ntp |
openntpd |
|---|---|---|---|
10 μs |
35 ± 8 |
234 ± 46 |
857 ± 226 |
100 μs |
109 ± 14 |
256 ± 50 |
888 ± 221 |
1.0 ms |
475 ± 93 |
454 ± 94 |
980 ± 262 |
10.0 ms |
1603 ± 447 |
3665 ± 651 |
2014 ± 387 |
Test 2: permanent network connection and less stable clock
In this test the polling interval of the clients was fixed to 64 seconds and
the clock was quite unstable (10ppb/s wander). openntpd couldn’t be included
as its polling interval is not configurable.
| Network jitter | chrony |
ntp |
openntpd |
|---|---|---|---|
10 μs |
14 ± 0 |
165 ± 17 |
N/A |
100 μs |
56 ± 3 |
167 ± 18 |
N/A |
1.0 ms |
229 ± 15 |
217 ± 17 |
N/A |
10.0 ms |
750 ± 91 |
1467 ± 100 |
N/A |
Test 3: intermittent network connection
In this test the network was available to the clients only for 30 continuous minutes every 24 hours. The polling interval configuration and the clock wander were the same as in the first test.
| Network jitter | chrony |
ntp |
openntpd |
|---|---|---|---|
10 μs |
7273 ± 1744 |
608803 ± 510468 |
170583 ± 140321 |
100 μs |
9528 ± 1895 |
580679 ± 481379 |
160203 ± 112421 |
1 ms |
10706 ± 2521 |
1115961 ± 733914 |
168645 ± 126309 |
10 ms |
26105 ± 70408 |
897703 ± 847901 |
285437 ± 295667 |
