cvs commit: src/sys/vm vm_phys.c vm_phys.h

Jeff Roberson jroberson at chesapeake.net
Sun Jun 10 04:35:35 UTC 2007


On Sun, 10 Jun 2007, Alan Cox wrote:

> alc         2007-06-10 00:49:16 UTC
>
>  FreeBSD src repository
>
>  Added files:
>    sys/vm               vm_phys.c vm_phys.h
>  Log:
>  Add a new physical memory allocator.  However, do not yet connect it
>  to the build.

Can you tell us about the time complexity of allocating multiple 
physically contiguous pages?

Thanks,
Jeff

>
>  This allocator uses a binary buddy system with a twist.  First and
>  foremost, this allocator is required to support the implementation of
>  superpages.  As a side effect, it enables a more robust implementation
>  of contigmalloc(9).  Moreover, this reimplementation of
>  contigmalloc(9) eliminates the acquisition of Giant by
>  contigmalloc(..., M_NOWAIT, ...).
>
>  The twist is that this allocator tries to reduce the number of TLB
>  misses incurred by accesses through a direct map to small, UMA-managed
>  objects and page table pages.  Roughly speaking, the physical pages
>  that are allocated for such purposes are clustered together in the
>  physical address space.  The performance benefits vary.  In the most
>  extreme case, a uniprocessor kernel running on an Opteron, I measured
>  an 18% reduction in system time during a buildworld.
>
>  This allocator does not implement page coloring.  The reason is that
>  superpages have much the same effect.  The contiguous physical memory
>  allocation necessary for a superpage is inherently colored.
>
>  Finally, the one caveat is that this allocator does not effectively
>  support prezeroed pages.  I hope this is temporary.  On i386, this is
>  a slight pessimization.  However, on amd64, the beneficial effects of
>  the direct-map optimization outweigh the ill effects.  I speculate
>  that this is true in general of machines with a direct map.
>
>  Approved by:    re
>
>  Revision  Changes    Path
>  1.1       +689 -0    src/sys/vm/vm_phys.c (new)
>  1.1       +52 -0     src/sys/vm/vm_phys.h (new)
>


More information about the cvs-src mailing list