cvs commit: src/sys/vm vm_page.c

From: Alan Cox <alc_at_FreeBSD.org>
Date: Fri, 29 Sep 2006 04:51:16 +0000 (UTC)
alc         2006-09-29 04:51:16 UTC

  FreeBSD src repository

  Modified files:        (Branch: RELENG_6)
    sys/vm               vm_page.c 
  Log:
  MFC revisions 1.313 and 1.328:
  
  When the VM needs to allocated physical memory pages (for non interrupt use)
  and it has not plenty of free pages it tries to free pages in the cache queue.
  Unfortunately freeing a cached page requires the locking of the object that
  owns the page. However in the context of allocating pages we may not be able
  to lock the object and thus can only TRY to lock the object. If the locking try
  fails the cache page can not be freed and is activated to move it out of the way
  so that we may try to free other cache pages.
  
  If all pages in the cache belong to objects that are currently locked the
  cache queue can be emptied without freeing a single page. This scenario caused
  two problems:
  
      1)  vm_page_alloc always failed allocation when it tried freeing pages from
          the cache queue and failed to do so. However if there are more than
          cnt.v_interrupt_free_min pages on the free list it should return pages
          when requested with priority VM_ALLOC_SYSTEM. Failure to do so can cause
          resource exhaustion deadlocks.
  
      2)  Threads than need to allocate pages spend a lot of time cleaning up the
          page queue without really getting anything done while the pagedaemon
           needs to work overtime to refill the cache.
  
  This change fixes the first problem. (1)
  
  Approved by: re (kensmith)
  
  Revision   Changes    Path
  1.304.2.5  +13 -3     src/sys/vm/vm_page.c
Received on Fri Sep 29 2006 - 04:51:17 UTC