• Miroslav Lichvar's avatar
    timekeeping/ntp: Determine the multiplier directly from NTP tick length · 78b98e3c
    Miroslav Lichvar authored
    When the length of the NTP tick changes significantly, e.g. when an
    NTP/PTP application is correcting the initial offset of the clock, a
    large value may accumulate in the NTP error before the multiplier
    converges to the correct value. It may then take a very long time (hours
    or even days) before the error is corrected. This causes the clock to
    have an unstable frequency offset, which has a negative impact on the
    stability of synchronization with precise time sources (e.g. NTP/PTP
    using hardware timestamping or the PTP KVM clock).
    
    Use division to determine the correct multiplier directly from the NTP
    tick length and replace the iterative approach. This removes the last
    major source of the NTP error. The only remaining source is now limited
    resolution of the multiplier, which is corrected by adding 1 to the
    multiplier when the system clock is behind the NTP time.
    Signed-off-by: default avatarMiroslav Lichvar <mlichvar@redhat.com>
    Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Prarit Bhargava <prarit@redhat.com>
    Cc: Richard Cochran <richardcochran@gmail.com>
    Cc: Stephen Boyd <stephen.boyd@linaro.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/1520620971-9567-3-git-send-email-john.stultz@linaro.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    78b98e3c
timekeeping.c 65.5 KB