Re: [RFC PATCH 1/4] timekeeping: Remove xtime_remainder from ntp_error accumulation
From: David Woodhouse
Date: Tue May 19 2026 - 18:19:22 EST
On Tue, 2026-05-19 at 14:54 -0700, John Stultz wrote:
>
> > By simply adding ntp_interval and then subtracting the correct current
> > value of xtime_interval, logarithmic_accumulation doesn't *need* a
> > separate variable which tracks that delta. I don't quite understand why
> > it ever did add it in the first place.
>
> Again, it's due to the error caused by the granularity of the
> clocksource (against the HZ interval). That initial delta will
> otherwise cause an accurate clock to get erroniously steered either
> faster or slower when no NTP adjustments being made. The subtracting
> of that remainder is just trying to compensate for this base error.
I must be confused. We *are* subtracting that remainder, not ignoring
it.
The value of xtime_remainder was (tick_length - xtime_interval). It's
the discrepancy between the distance we *want* the clock to move in a
single tick, and the distance it *does* move in a single tick at a
given value of 'mult'.
So we add tick_length, and we subtract xtime_interval. Thus adjusting
ntp_error by the difference between them.
I don't understand why the old code was then *also* subtracting a stale
value of xtime_remainder which had been calculated at boot time.
Am I missing something here?
I've updated the commit message:
https://git.infradead.org/?p=users/dwmw2/linux.git;a=commitdiff;h=459ebaef612
> Now, it is imperfect because it's a constant adjustment and not
> proportioned to the NTP adjustments that might be later made.
>
> And clearly there is some issue as you're having problems with it
> using a fine-grained clocksource like the TSC where it really
> shouldn't be a major factor.
None of it matters if you have NTP running and constantly re-adjusting
your clock. You can have a +50PPM drift through errors in the tracking,
and NTP will just assume your oscillator is running 50PPM fast and
adjust accordingly.
But when you set the kernel to follow a precise y=mx+c line for the TSC
to real time conversion and *expect* it to do as it's told while
tracking the divergence to the nanosecond... all counters are course-
grained :)
Attachment:
smime.p7s
Description: S/MIME cryptographic signature