[ntp:questions] Re: ntpd transmit timestamp precision

Per Hedeland per at hedeland.org
Fri Feb 17 20:40:28 UTC 2006


In article <dt3bvu$m56$1 at dewey.udel.edu> "David L. Mills"
<mills at udel.edu> writes:
>
>The NTP get_systime() routine calls one of three library routines, 
>clock_gettime(), getimeofday() and getclock(), depending on 
>autoconfigure. At least the first two and probably the last are kernel 
>system calls and don't depend on other routines.

Hm, how can you (or ntpd) determine whether (say) clock_gettime() on any
given OS is an actual system call or just a library wrapper around a
gettimeofday() system call? Or (perhaps more likely) whether a "real
system call" clock_gettime() actually has a kernel-level implementation
that amounts to a wrapper around gettimeofday()?

There are obviously valid reasons to implement clock_gettime() even on a
system that can't actually produce better than microsecond resolution,
notably to provide a better interface than times() to get
CLOCK_MONOTONIC time stamps.

> The clock_gettime() and 
>getclock() return nanoseconds in a timespec structure; the 
>gettimeofday() returns microseconds in a timeval structure. As these are 
>system calls, no matter what library they are in, they would operate the 
>same way.

The same way as what?:-) Clearly the definition of struct timespec or
struct timeval has no bearing on what the actual resolution of the
returned timestamp is - it's perfectly acceptable for both
gettimeofday() and clock_gettime() to return timestamps that have only
1/HZ resolution, or less. For gettimeofday(), we can only guess or
conduct experiments - for clock_gettime(), clock_getres() is supposed to
give the answer (yet another reason to implement clock_gettime() and
clock_getres()).

Someone else wrote (I think) that clock_get_res() on Linux simply
reported 1/HZ - I did a test and got an even worse result: On a system
running at HZ=1000, clock_get_res reported 10 ms! Anyway it's clearly
broken. On my FreeBSD 5.3, clock_getres() reports 280 ns - whether that
is correct I have no idea, but it sure isn't anywhere near 1/HZ (HZ=100
on this system).

--Per Hedeland
per at hedeland.org




More information about the questions mailing list