Micro-benchmark for various time syscalls...

Bruce Evans brde at optusnet.com.au
Mon Jun 2 10:55:36 UTC 2008


On Mon, 2 Jun 2008, Gary Stanley wrote:

> At 12:54 AM 6/2/2008, Sean Chittenden wrote:
>> PS  Is there a reason that time(3) can't be implemented in terms of
>> clock_gettime(CLOCK_SECOND)?  10ms seems precise enough compared to
>> time_t's whole second resolution.
>
> Another interesting idea is to map gettimeofday() to userland, sort of like 
> darwin (commpage) and linux (vsyscall) via read only page.

time() can reasonably be implemented like that, but not gettimeofday().
gettimeofday() should have an accuracy of 1 usec and it returns a large
data structure that cannot be locked by simple atomic accesses.  The
read-only page would have to be updated millions of times per second
or take a pagefault to access to give the same functionality as FreeBSD
gettimeofday().  The updates would cost about 100% of 1 CPU.  Other
CPUs could then read the time using locking like that in binuptime()
but more complicated (needs an atomic update for at least the generation
count, and probably more).  The pagefaults would give a smaller
pessimization (I guess slightly longer to reach microtime() than via
the current syscall, and identical time in microtime() to do the update
on demand).

Bruce


More information about the freebsd-performance mailing list