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

Christian S.J. Peron csjp at freebsd.org
Fri Aug 13 06:09:40 PDT 2004


Neat!
On 13 Aug 2004 Alan Cox wrote:
> alc         2004-08-13 08:06:34 UTC
> 
>   FreeBSD src repository
> 
>   Modified files:
>     sys/vm               vm_map.c vm_map.h 
>   Log:
>   Replace the linear search in vm_map_findspace() with an O(log n)
>   algorithm built into the map entry splay tree.  This replaces the
>   first_free hint in struct vm_map with two fields in vm_map_entry:
>   adj_free, the amount of free space following a map entry, and
>   max_free, the maximum amount of free space in the entry's subtree.
>   These fields make it possible to find a first-fit free region of a
>   given size in one pass down the tree, so O(log n) amortized using
>   splay trees.
>   
>   This significantly reduces the overhead in vm_map_findspace() for
>   applications that mmap() many hundreds or thousands of regions, and
>   has a negligible slowdown (0.1%) on buildworld.  See, for example, the
>   discussion of a micro-benchmark titled "Some mmap observations
>   compared to Linux 2.6/OpenBSD" on -hackers in late October 2003.
>   
>   OpenBSD adopted this approach in March 2002, and NetBSD added it in
>   November 2003, both with Red-Black trees.
>   
>   Submitted by: Mark W. Krentel
>   
>   Revision  Changes    Path
>   1.357     +212 -98   src/sys/vm/vm_map.c
>   1.116     +2 -1      src/sys/vm/vm_map.h

-- 
Christian S.J. Peron
csjp at FreeBSD.ORG
FreeBSD Committer


More information about the cvs-all mailing list