Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Aug 2004 08:06:34 +0000 (UTC)
From:      Alan Cox <alc@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/vm vm_map.c vm_map.h
Message-ID:  <200408130806.i7D86YJZ075107@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



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