[ntp:questions] NTP vs chrony comparison (Was: oscillations in ntp clock synchronization)

David Woolley forums at david-woolley.me.uk
Sat Jan 26 12:09:51 UTC 2008

Petri Kaukasoina wrote:
> David Woolley  <david at ex.djwhome.demon.co.uk.invalid> wrote:

>> That has quite a lot of similarity with what ntpd itself does if it is 
>> cold started with iburst.  The only big difference is that it uses 900, 

> Hmm, I can't see that. I put in only one good time source with iburst,
> deleted the drift file and started ntpd. The time offset just keeps growing
> and the frequency changes in very small steps. Now, after 30 minutes time is
> already 25 ms off and the frequency is only 1.5 ppm (the correct value would
> be about 25 ppm).

Looking at the comments in the 4.2.0 source code, it looks like you may 
be right; yet another reason why ntpd doesn't handle startup transients 

If this is still true in the latest version ("< max" means offset < 128ms):

  *      State   < max   > max                   Comments
  *      ====================================================
  *      NSET    FREQ    FREQ                    no ntp.drift

  *      FREQ    SYNC    if (mu < 900) FREQ      calculate frequency
  *                      else if (allow) TSET
  *                      else FREQ

Worse than is obvious here, it only sets the time on the first sample if 
it is out by more than 128ms.  More obvious, unless the frequency error 
is so high that the time changes by more than  128ms between the first 
two good samples, it will use the slow PLL method of calibrating the 
frequency.  Even then, unless the offset is more than 128ms both the for 
first sample, and after every subsequent sample, it will compute the 
frequency based on the final absolute value of clock offset, not the 
difference between the first and last readings; this might not be too 
important, because it looks to me to require the intial offset to be 
very close to 128ms (low  probability) or the frequency error to be 
quite high (percentage error in frequency calculation relatively low) 
for it to complete the frequency calibration.

What I was expecting was for it to unconditionally do both frequency and 
phase calibration, in the absence of the drift file.  I presume that 
chrony does a correction on the first couple of samples and then refines it.

Incidentally, the "else FREQ" doesn't seem to match the code and looks 
like it would prevent it ever getting out of the calibration under some 

It looks like I need to fetch the latest source, although it looks, from 
your observations, as though it is still far from what I would consider 

More information about the questions mailing list