cvs commit: src/sys/vm vm_contig.c

Brian Feldman green at FreeBSD.org
Tue Jun 15 01:02:01 GMT 2004


green       2004-06-15 01:02:00 UTC

  FreeBSD src repository

  Modified files:
    sys/vm               vm_contig.c 
  Log:
  Make contigmalloc() more reliable:
  
  1. Remove a race whereby contigmalloc() would deadlock against the
     running processes in the system if they kept reinstantiating
     the memory on the active and inactive page queues that it was
     trying to flush out.  The process doing the contigmalloc() would
     sit in "swwrt" forever and the swap pager would be going at full
     force, but never get anywhere.  Instead of doing it until the
     queues are empty, launder for as many iterations as there are
     pages in the queue.
  2. Do all laundering to swap synchronously; previously, the vnode
     laundering was synchronous and the swap laundering not.
  3. Increase the number of launder-or-allocate passes to three, from
     two, while failing without bothering to do all the laundering on
     the third pass if allocation was not possible.  This effectively
     gives exactly two chances to launder enough contiguous memory,
     helpful with high memory churn where a lot of memory from one pass
     to the next (and during a single laundering loop) becomes dirtied
     again.
  
  I can now reliably hot-plug hardware requiring a 256KB contigmalloc()
  without having the kldload/cbb ithread sit around failing to make
  progress, while running a busy X session.  Previously, it took killing
  X to get contigmalloc() to get further (that is, quiescing the system),
  and even then contigmalloc() returned failure.
  
  Revision  Changes    Path
  1.35      +25 -6     src/sys/vm/vm_contig.c


More information about the cvs-src mailing list