cvs commit: src/sys/sys time.h src/sys/kern kern_time.c
Bruce Evans
bde at zeta.org.au
Sun Nov 27 13:10:43 GMT 2005
On Sun, 27 Nov 2005, Robert Watson wrote:
> ... Attached is a small LD_PRELOAD library to
> allow applications to be switched to the _FAST variants for gettimeofday().
% /*
% * Small wrapper library to substitute implementations of gettimeofday(2) and
% * time(3) with lower resolution variations. time(3) is unconditionally
% * degraded, since it will return a truncated time anyway. gettimeofday(3)
% * checks the TIMEWRAPPER environmental variable, which can be set to either
% * "PRECISE" or "FAST".
% */
time(3) should use the environment variable too, since the fast version
gives a value that is both imprecise and wrong. It inherits bugs from
the kernel's time_second variable. time_second is not the current
time truncated, but is the (current time less up to about tc_tick/HZ)
truncated. It lags the current time by more than 1 second for up to
about tc_tick/HZ seconds before every rollover of the correct truncated
time.
When HZ was 100 it was very easy for applications to see time_second
being wring since the average size of the window of incoherency was
1/200 second. time_second is visible in file times by default for ffs
file times. The bug can be fixed for ffs too globally using the
vfs.timestamp_precision sysctl. I only use this sysctl for running
POSIX tests for this bug, but would be surprised if always using it
caused noticeable pessimization. Updates of file timestamps are cached
in non-broken file systems, so it is hard for them to occur as often
as ones for context switches -- they will usually be limited by physical
disk write bandwidth.
Bruce
More information about the cvs-src
mailing list