Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 27 Mar 2009 10:26:54 -0500 (CDT)
From:      Sergey Babkin <babkin@verizon.net>
To:        phk@phk.freebsd.dk
Cc:        attilio@freebsd.org, freebsd-hackers@freebsd.org, freebsd-current@freebsd.org, prashant.vaibhav@gmail.com
Subject:   Re: Re: Improving the kernel/i386 timecounter performance (GSoC proposal)
Message-ID:  <11609492.9579.1238167614335.JavaMail.root@vms070.mailsrvcs.net>

next in thread | raw e-mail | index | archive | help

   (Sorry for the top quoting). Probably the best implementation of
   gettimeofd= ay() is to have
   a page in the kernel mapped read-only to all the user pr= ocesses. Put
   the kernel's idea of time
   into this page. Then getting the = time becomes a simple read (OK, two
   reads, to make sure that
   no update = has happened in between).
   The TSC can then be used to add the precis= ion between the ticks of
   the kernel timer:
   i.e. remember the value of TS= C when the last tick happen, and the
   highest rate at which
   TSC may be ti= cking at this CPU, and export in the same page. This
   would guarantee thatthe time is not moving back.
   However there are more issues with TS= C. TSC is guaranteed to have
   the same value
   on all the processors that s= hare the same system bus. But if the
   machine is built of multiple
   buses = with bridges between them, all bets are off. Each bus may be
   stopped, resta= rted
   and clocked separately. There is no way to tell, on which CPU is th= e
   process currently
   runnning, and it may be rescheduled do a different C= PU right before
   or after the RDTSC
   instruction.
   -SB
   Ma= r 26, 2009 06:55:04 PM, [1]phk@phk.freebsd.dk wrote:
   
     In message <[2]17560ccf0903260551v1f5cba9eu8=
     7727c0bae7baa3@mail.gmail.com>, Prasha
     nt Vaibhav writes:
     = >The gettimeofday() function's implementation will then be
     >change= d to read the timestamp counter (TSC) from the processor,
     and use the
     &g= t;reading in conjunction with the timing info exported by the
     kernel to
     = >calculate and return the time info in proper format.
     I take it a= s read, that you know that there are other relvant
     functions than gettim= eofday() and that these must provide a
     monotonic timescale when queried = interleaved ?
     Be aware that the TSC may not be, and may not stay syn= chronized
     across multiple cores.
     Further more, the TSC is not con= stant frequency and in particular
     not "known frequency" at all times.
     There are a lot of nasty cases to check, and a nasty interpolation
     = required, which, in my tests some years back, totally negated any
     speedu= p from using the TSC in the first place.
     At the very minimum, you wi= ll have to add a quirk table where
     known good {CPU+MOBO+BIOS} combinatio= ns can be entered, as we
     find them.
     >This will also pave way f= or optionally making the
     >FreeBSD kernel tickless,
     Rubbish. T= imecounters are not even closely associated with the
     tick or ticklessnes= s of the kernel. [1]
     > - The TSC frequency might change on cert= ain processors with
     non-constant
     > TSC rate (because of SpeedStep, = dynamic freq scaling etc.). The
     only way to
     > combat this is that t= he kernel be notified every time the
     processor
     > frequency changes.= Every cpu frequency driver will need to be
     updated to
     > notify the= kernel before and after a cpu freq change.
     That is not good enough= , the bios may autonomously change the cpu
     speed
     and the skew from not k= nowing exactly _when_ and _how_ the cpu
     clock
     changed, is a significant = number of microseconds, plenty of time
     to make strange things happen.
     You will want to study carefully Dave Mills work to tame the alpha
     = chips wandering SAW clocks.
     Poul-Henning
     [1] In my mind, rewo= rking the callout system in the kernel would
     be a much better more neded= and much more worthwhile project.
     --
     Poul-Henning Kamp | = UNIX since Zilog Zeus 3.20
     [3]phk@FreeBSD.ORG | TCP= /IP since RFC 956
     FreeBSD committer | BSD since 4.3-tahoe
     N= ever attribute to malice what can adequately be explained by
     incompetence.<= br>_______________________________________________
     [4]freebsd-hackers@freebsd.org mailing list
     [5]http://lists.freebsd.org/mailman/listinfo/freebsd-hackersTo
     unsubscribe, send any mail to "[6]fre=
     ebsd-hackers-unsubscribe@freebsd.org"
     

References

   1. 3D"mailto:phk@phk.freebsd.dk"
   2. file://localhost/tmp/3D=
   3. 3D"mailto:phk@FreeBSD.ORG"
   4. 3D"mailto:fre=
   5. 3D"http://lists.=/
   6. 3D"mailto:freebsd-hackers-unsub=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?11609492.9579.1238167614335.JavaMail.root>