freebsd-nq/sys/vm
Stephan Uphoff 224409590d 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)

Reviewed by:	tegge@
2006-02-15 22:29:53 +00:00
..
default_pager.c
device_pager.c Add a comment to the effect that fictitious pages do not require the 2005-06-10 17:27:54 +00:00
memguard.c Improve memguard a bit: 2005-12-30 11:45:07 +00:00
memguard.h Improve memguard a bit: 2005-12-30 11:45:07 +00:00
phys_pager.c
pmap.h Eliminate pmap_init2(). It's no longer used. 2005-11-20 06:09:49 +00:00
redzone.c Add buffer corruption protection (RedZone) for kernel's malloc(9). 2006-01-31 11:09:21 +00:00
redzone.h Add buffer corruption protection (RedZone) for kernel's malloc(9). 2006-01-31 11:09:21 +00:00
swap_pager.c Make sure b_vp and b_bufobj are NULL before calling relpbuf(), as it asserts 2006-01-27 21:11:50 +00:00
swap_pager.h
uma_core.c Skip per-cpu caches associated with absent CPUs when generating a 2006-02-11 19:20:56 +00:00
uma_dbg.c Improve canonicalization of copyrights. Order copyrights by order of 2005-07-16 09:51:52 +00:00
uma_dbg.h Improve canonicalization of copyrights. Order copyrights by order of 2005-07-16 09:51:52 +00:00
uma_int.h Wrap inlines in uma_int.h in #ifdef _KERNEL so that uma_int.h can be 2005-08-04 10:03:53 +00:00
uma.h As alc pointed out to me, vm_page.c 1.305 was incomplete: uma_startup() 2005-10-08 21:03:54 +00:00
vm_contig.c The change a few years ago of having contigmalloc start its scan at the top 2006-01-29 08:24:54 +00:00
vm_extern.h Use sf_buf_alloc() instead of vm_map_find() on exec_map to create the 2005-12-16 18:34:14 +00:00
vm_fault.c Adjust old comment (present in rev 1.1) to match changes in rev 1.82. 2006-02-02 21:55:38 +00:00
vm_glue.c Use sf_buf_alloc() instead of vm_map_find() on exec_map to create the 2005-12-16 18:34:14 +00:00
vm_init.c Add the vm.exec_map_entries tunable and read-only sysctl, which controls 2005-04-25 19:22:05 +00:00
vm_kern.c
vm_kern.h
vm_map.c Use the new macros abstracting the page coloring/queues implementation. 2006-01-27 07:28:51 +00:00
vm_map.h Eliminate unneeded preallocation at initialization. 2005-12-03 22:41:15 +00:00
vm_meter.c Enable debug_mpsafevm on ia64 due to the severe functional regression 2005-05-08 23:56:16 +00:00
vm_mmap.c Move execve's access time update functionality into a new 2005-10-12 06:56:00 +00:00
vm_object.c - Install a temporary bandaid in vm_object_reference() that will stop 2006-02-01 09:47:02 +00:00
vm_object.h Make vm_object_vndeallocate() static. The external calls to it were 2006-01-22 23:56:20 +00:00
vm_page.c When the VM needs to allocated physical memory pages (for non interrupt use) 2006-02-15 22:29:53 +00:00
vm_page.h With the recent changes to the implementation of page coloring, the 2006-01-24 19:24:54 +00:00
vm_pageout.c Remove an unnecessary call to pmap_remove_all(). The given page is not 2006-02-04 22:37:10 +00:00
vm_pageout.h
vm_pageq.c Style: Add blank line after local variable declarations. 2006-01-27 21:06:37 +00:00
vm_pager.c Normalize a significant number of kernel malloc type names: 2005-10-31 15:41:29 +00:00
vm_pager.h Update some comments to reflect the change from spl-based to lock-based 2005-05-18 22:08:52 +00:00
vm_param.h
vm_unix.c
vm_zeroidle.c MI changes: 2005-12-31 14:39:20 +00:00
vm.h - Change the vm_mmap() function to accept an objtype_t parameter specifying 2005-04-01 20:00:11 +00:00
vnode_pager.c - Fix silly VI locking that is used to check a single flag. The vnode 2006-02-06 10:14:12 +00:00
vnode_pager.h