Date: Sat, 28 Mar 2009 02:18:42 +0530 From: Prashant Vaibhav <prashant.vaibhav@gmail.com> To: Robert Watson <rwatson@freebsd.org> Cc: freebsd-current@freebsd.org Subject: Re: Improving the kernel/i386 timecounter performance (GSoC proposal) Message-ID: <17560ccf0903271348p52351481v4cc83c14037e8836@mail.gmail.com> In-Reply-To: <alpine.BSF.2.00.0903271821060.60642@fledge.watson.org> References: <11609492.9579.1238167614335.JavaMail.root@vms070.mailsrvcs.net> <49CD0405.1060704@samsco.org> <alpine.BSF.2.00.0903271821060.60642@fledge.watson.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Actually OS X is more similar than that: the shared page also contains functions that can be called by user applications, though their entry points are fixed and they're not in any particular format like elf/mach-o. Userspace implementations of gettimeofday, bcopy etc. are provided in the kernel itself, which is a nice design imo as the specific version to load is chosen by the kernel at boot time depending on processor capabilities. On Fri, Mar 27, 2009 at 11:53 PM, Robert Watson <rwatson@freebsd.org> wrote: > > On Fri, 27 Mar 2009, Scott Long wrote: > > I've been talking about this for years. All I need is help with the VM >> magic to create the page on fork. I also want two pages, one global for >> gettimeofday (and any other global data we can think of) and one per-process >> for static data like getpid/getgid. >> > > FWIW, there are some variations in schemes across OS's -- one extreme is > the Linux approach, which actually exports a mini shared library in ELF > format on the shared page, providing implementations of various services > (such as entering system calls), time stuff, etc. Less extreme are the > shared pages offered on Mac OS X, etc. > > Robert N M Watson > Computer Laboratory > University of Cambridge > > > >> Scott >> >> >> Sergey Babkin wrote: >> >>> (Sorry for the top quoting). Probably the best implementation of >>> gettimeofd=y() is to have >>> a page in the kernel mapped read-only to all the user pr=cesses. Put >>> the kernel's idea of time >>> into this page. Then getting the =ime becomes a simple read (OK, two >>> reads, to make sure that >>> no update =as happened in between). >>> The TSC can then be used to add the precis=on between the ticks of >>> the kernel timer: >>> i.e. remember the value of TS= when the last tick happen, and the >>> highest rate at which >>> TSC may be ti=king 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=. TSC is guaranteed to have >>> the same value >>> on all the processors that s=are the same system bus. But if the >>> machine is built of multiple >>> buses =ith bridges between them, all bets are off. Each bus may be >>> stopped, resta=ted >>> and clocked separately. There is no way to tell, on which CPU is th= >>> process currently >>> runnning, and it may be rescheduled do a different C=U right before >>> or after the RDTSC >>> instruction. >>> -SB >>> Ma= 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= to read the timestamp counter (TSC) from the processor, >>> and use the >>> &g=;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= read, that you know that there are other relvant >>> functions than gettim=ofday() and that these must provide a >>> monotonic timescale when queried =nterleaved ? >>> Be aware that the TSC may not be, and may not stay syn=hronized >>> across multiple cores. >>> Further more, the TSC is not con=tant frequency and in particular >>> not "known frequency" at all times. >>> There are a lot of nasty cases to check, and a nasty interpolation >>> =equired, which, in my tests some years back, totally negated any >>> speedu= from using the TSC in the first place. >>> At the very minimum, you wi=l have to add a quirk table where >>> known good {CPU+MOBO+BIOS} combinatio=s can be entered, as we >>> find them. >>> >This will also pave way f=r optionally making the >>> >FreeBSD kernel tickless, >>> Rubbish. T=mecounters are not even closely associated with the >>> tick or ticklessnes= of the kernel. [1] >>> > - The TSC frequency might change on cert=in processors with >>> non-constant >>> > TSC rate (because of SpeedStep, =ynamic freq scaling etc.). The >>> only way to >>> > combat this is that t=e kernel be notified every time the >>> processor >>> > frequency changes.=very cpu frequency driver will need to be >>> updated to >>> > notify the=ernel 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=owing exactly _when_ and _how_ the cpu >>> clock >>> changed, is a significant =umber of microseconds, plenty of time >>> to make strange things happen. >>> You will want to study carefully Dave Mills work to tame the alpha >>> =hips wandering SAW clocks. >>> Poul-Henning >>> [1] In my mind, rewo=king the callout system in the kernel would >>> be a much better more neded=nd much more worthwhile project. >>> -- >>> Poul-Henning Kamp | =NIX since Zilog Zeus 3.20 >>> [3]phk@FreeBSD.ORG | TCP=IP since RFC 956 >>> FreeBSD committer | BSD since 4.3-tahoe >>> N=ver attribute to malice what can adequately be explained by >>> incompetence.<=r>_______________________________________________ >>> [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_______________________________________________ >>> freebsd-current@freebsd.org mailing list >>> http://lists.freebsd.org/mailman/listinfo/freebsd-current >>> To unsubscribe, send any mail to " >>> freebsd-current-unsubscribe@freebsd.org" >>> >> >> _______________________________________________ >> freebsd-current@freebsd.org mailing list >> http://lists.freebsd.org/mailman/listinfo/freebsd-current >> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org >> " >> >>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?17560ccf0903271348p52351481v4cc83c14037e8836>