Date: Mon, 02 Jun 2008 15:51:20 -0400 From: Gary Stanley <gary@velocity-servers.net> To: Bruce Evans <brde@optusnet.com.au> Cc: freebsd-performance@freebsd.org Subject: Re: Micro-benchmark for various time syscalls... Message-ID: <20080602195125.245858FC1D@mx1.freebsd.org> In-Reply-To: <20080602203217.T3100@delplex.bde.org> References: <2B465A44-2578-4675-AA17-EBE17A072017@chittenden.org> <20080602060624.93F5F8FC4A@mx1.freebsd.org> <20080602203217.T3100@delplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
At 06:55 AM 6/2/2008, Bruce Evans wrote: >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). Here's a sloppy thought :) What about just rewriting gettimeofday in libc to query the TSC and convert it to usecs etc? That would eliminate any costly userland -> kernel overhead. I have a proof of concept here to do this. The only bad thing is the skewing of the TSC..
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080602195125.245858FC1D>