Improving the kernel/i386 timecounter performance (GSoC
proposal)
Suleiman Souhlal
ssouhlal at FreeBSD.org
Sat Mar 28 19:17:34 PDT 2009
On Mar 27, 2009, at 11:30 AM, Scott Long wrote:
> Robert Watson 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.
>
> Yes, but I'd like to start somewhere, and considering that it's been
> impossible in _5_ years to get the 30 minutes of Peter or JeffR or JHB
> time to get the basic VM magic done, I'm keeping my expectations as
> modest as possible.
>
You can find a proof-of-concept implementation for amd64 of a global
page mapped in every process at http://people.freebsd.org/~ssouhlal/
testing/syspage-20090328.diff .
It exports ticks to userland at VM_MIN_KERNEL_ADDRESS
(0xfffffffe40000000).
In order for this to work on architectures without a direct map, the
page will need to be mapped a second time as read/write (you might
want to have a vm_offset_t pmap_map_syspage(vm_page_t m) function
that does the right thing for each architecture).
Unfortunately, this trick probably won't work for per-process pages
without more work, because we wouldn't be able to just insert the
page in kernel_map.
-- Suleiman
More information about the freebsd-hackers
mailing list