Re: [RFC][PATCH] new timeofday core subsystem (v.A0)
From: George Anzinger
Date: Fri Sep 03 2004 - 19:09:49 EST
john stultz wrote:
Really quick: I'm off on vacation until Weds. Hopefully I've addressed
in some way everyone's comments and my email box won't be stuffed when I
return. I might peek in every once in awhile, though.
Just one last response...
On Fri, 2004-09-03 at 15:10, George Anzinger wrote:
john stultz wrote:
I feel trying to keep two notions of time, one in the timeofday code and
one in the timer code is the real issue. Trying to better keep them
synced will just lead to madness. Instead the timer subsystem needs to
move to using monotonic_clock(), or get_lowres_timestamp() instead of
using jiffies for its notion of time. Jiffies is just an interrupt
counter.
Well, there may be a better way. Suppose we change all the accounting code to
work with nanoseconds. That way when we do an accounting pass we would just add
what has elapsed since the last pass.
Yep, that'd work too.
Still need some way to do user timers that are tightly pegged to the clock.
I see that as just a problem of programming the timer interrupt
generator. If you have a nanosecond (or as high as the best timesource
on your system provides) resolution notion of time, then there is
nothing to peg or tie the timer with. You simply just program it to go
off every X nanoseconds. Should it be so inaccurate that it does not go
off right at X nanoseconds, then you've hit a limit of the hardware.
Pick a more accurate interval length, dynamically change your interval,
or live with it. If the soft-timers use monotonic-clock() to determine
when they expire, then you won't get accumulating drift (as
monotonic-clock()is NTP frequency adjusted), only the minor jitter
caused latency caused by the interrupt programming.
A thought I had along these lines was to program a timer for each tick. The PIT
is much too slow for this, but the APIC timers seem to be rather easy to
program. I am not sure how fast the access is but it can not be anything like
the PIT. Under this scheme we would use the monotonic clock to figure out just
how far out the next tick should be and program that.
Yep, tickless systems also start being possible. We just have interrupts
for scheduled events.
This could be modified to use repeating hardware if it is available. (What does
the HPET provide? Does it interrupt?) Since the APIC clock is not the
reference clock (the PIT & pm timer clock is) we would have to correct these
from time to time but that is rather easy (I do it today in HRT code).
Don't know the details of interrupt generation, so I can't tell ya. I'm
not sure I followed the correction bit?
This brings up another issue. We know what the PIT clock frequency is but not
what the TSC clock frequency. Currently we do a calibration run at boot to
figure this but I can easily show that this run consistently gives the wrong
answer (I am sure this has to do with the I/O access delays). If we are going
to use the TSC (or any other "clock" that is not derived from the PITs
14.3181818MHZ ital) we need both a way to get the correct value AND a way to
adjust it for drift over time. (Possibly this is the same thing.) Of course
this is all just x86 stuff. Other archs will have their own issues.
Again, monotonic_clock() and friends are NTP adjusted, so drift caused
by inaccurate calibration shouldn't be a problem the interval timer code
should need to worry about (outside of maybe adjusting its interval time
if its always arriving late/early). If possible the timesource
calibration code should be improved, but that's icing on the cake and
isn't critical.
Are you providing a way to predict what clock count provide a given time offset
INCLUDING ntp? If so, cool. If not we need to get this conversion right. We
will go into this more on your return.
Have fun.
Again, thanks to everyone for the great feedback and discussion!
-john
--
George Anzinger george@xxxxxxxxxx
High-res-timers: http://sourceforge.net/projects/high-res-timers/
Preemption patch: http://www.kernel.org/pub/linux/kernel/people/rml
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/