42 lines
1.4 KiB
Plaintext
42 lines
1.4 KiB
Plaintext
|
Time Interpolators
|
||
|
------------------
|
||
|
|
||
|
Time interpolators are a base of time calculation between timer ticks and
|
||
|
allow an accurate determination of time down to the accuracy of the time
|
||
|
source in nanoseconds.
|
||
|
|
||
|
The architecture specific code typically provides gettimeofday and
|
||
|
settimeofday under Linux. The time interpolator provides both if an arch
|
||
|
defines CONFIG_TIME_INTERPOLATION. The arch still must set up timer tick
|
||
|
operations and call the necessary functions to advance the clock.
|
||
|
|
||
|
With the time interpolator a standardized interface exists for time
|
||
|
interpolation between ticks. The provided logic is highly scalable
|
||
|
and has been tested in SMP situations of up to 512 CPUs.
|
||
|
|
||
|
If CONFIG_TIME_INTERPOLATION is defined then the architecture specific code
|
||
|
(or the device drivers - like HPET) may register time interpolators.
|
||
|
These are typically defined in the following way:
|
||
|
|
||
|
static struct time_interpolator my_interpolator {
|
||
|
.frequency = MY_FREQUENCY,
|
||
|
.source = TIME_SOURCE_MMIO32,
|
||
|
.shift = 8, /* scaling for higher accuracy */
|
||
|
.drift = -1, /* Unknown drift */
|
||
|
.jitter = 0 /* time source is stable */
|
||
|
};
|
||
|
|
||
|
void time_init(void)
|
||
|
{
|
||
|
....
|
||
|
/* Initialization of the timer *.
|
||
|
my_interpolator.address = &my_timer;
|
||
|
register_time_interpolator(&my_interpolator);
|
||
|
....
|
||
|
}
|
||
|
|
||
|
For more details see include/linux/timex.h and kernel/timer.c.
|
||
|
|
||
|
Christoph Lameter <christoph@lameter.com>, October 31, 2004
|
||
|
|