Timers and timing, was: MySQL Performance 6.0rc1

Chuck Swiger cswiger at mac.com
Fri Oct 28 10:24:46 PDT 2005


Robert Watson wrote:
> On Fri, 28 Oct 2005, David Xu wrote:
>> Poul-Henning Kamp wrote:
>>>> On the other hand, a lower risk change might be to simply add a new 
>>>> CLOCK_ type for lower resolution, and have a timer synchronize a 
>>>> variable to the system clock once every 1/10 of a second.  This 
>>>> avoids having to muck with VM layout, etc.
>>>
>>> Is the CLOCK_* namespace ours to muck about with in the first place?
>>>
>> I prefer this way, can you implement it? The global page idea is a 
>> complex, someone can slowly work on it, there are many things can be 
>> done, for example, fast syscall using sysenter/sysexit.
> 
> I'm happy to take a stab at this.
> 
> We still need someone to grab the context switch time keeping by the 
> horns and Do Something, though.

If I understand what was said earlier, the getmicrotime() kernel function ought 
to maintain the time at "(~ 1 msec)" precision.  Could getmicrotime() be 
exported as a syscall, so that we could do something like this:

--- lib/libc/gen/time.c~        Fri Jul 18 22:53:46 2003
+++ lib/libc/gen/time.c Fri Oct 28 13:04:26 2005
@@ -47,7 +47,8 @@
         struct timeval tt;
         time_t retval;

-       if (gettimeofday(&tt, (struct timezone *)0) < 0)
+       getmicrotime(&tt);
+       if (tt.tv_sec == 0)
                 retval = -1;
         else
                 retval = tt.tv_sec;

Note that this might even cause time(2) to return an error if the system is 
using dummyclock, which could be considered a feature.  :-)

-- 
-Chuck



More information about the freebsd-current mailing list