freebsd-dev/sys/vm
Alan Cox 13458803f4 Give vm_fault()'s sequential access optimization a makeover.
There are two aspects to the sequential access optimization: (1) read ahead
of pages that are expected to be accessed in the near future and (2) unmap
and cache behind of pages that are not expected to be accessed again.  This
revision changes both aspects.

The read ahead optimization is now more effective.  It starts with the same
initial read window as before, but arithmetically grows the window on
sequential page faults.  This can yield increased read bandwidth.  For
example, on one of my machines, a program using mmap() to read a file that
is several times larger than the machine's physical memory takes about 17%
less time to complete.

The unmap and cache behind optimization is now more selectively applied.
The read ahead window must grow to its maximum size before unmap and cache
behind is performed.  This significantly reduces the number of times that
pages are unmapped and cached only to be reactivated a short time later.

The unmap and cache behind optimization now clears each page's referenced
flag.  Previously, in the case of dirty pages, if the containing file was
still mapped at the time that the page daemon examined the dirty pages,
they would be reactivated.

From a stylistic standpoint, this revision also cleanly separates the
implementation of the read ahead and unmap/cache behind optimizations.

Glanced at:	kib
MFC after:	2 weeks
2012-05-10 15:16:42 +00:00
..
default_pager.c Replace pointer to "struct uidinfo" with pointer to "struct ucred" 2010-12-02 17:37:16 +00:00
device_pager.c Update the device pager interface, while keeping the compatibility 2011-11-15 14:40:00 +00:00
memguard.c Mark all SYSCTL_NODEs static that have no corresponding SYSCTL_DECLs. 2011-11-07 15:43:11 +00:00
memguard.h Make memguard(9) capable to guard uma(9) allocations. 2011-10-12 18:08:28 +00:00
phys_pager.c Remove unneeded includes of <sys/linker_set.h>. Other headers that use 2011-01-11 13:59:06 +00:00
pmap.h Sort function prototypes. 2011-01-16 20:40:50 +00:00
redzone.c Mark all SYSCTL_NODEs static that have no corresponding SYSCTL_DECLs. 2011-11-07 15:43:11 +00:00
redzone.h
sg_pager.c Eliminate duplication of the fake page code and zone by the device and sg 2011-03-11 07:07:48 +00:00
swap_pager.c Remove direct access to si_name. 2012-02-10 12:35:57 +00:00
swap_pager.h Implement the linprocfs swaps file, providing information about the 2011-08-01 19:12:15 +00:00
uma_core.c exclude kmem_alloc'ed ARC data buffers from kernel minidumps on amd64 2012-01-27 20:18:31 +00:00
uma_dbg.c
uma_dbg.h
uma_int.h 1. Prior to r214782, UMA did not support multipage allocations before 2011-05-21 17:43:43 +00:00
uma.h exclude kmem_alloc'ed ARC data buffers from kernel minidumps on amd64 2012-01-27 20:18:31 +00:00
vm_contig.c In vm_object_page_clean(), do not clean OBJ_MIGHTBEDIRTY object flag 2012-03-17 23:00:32 +00:00
vm_extern.h Eliminate vm_phys_bootstrap_alloc(). It was a failed attempt at 2011-10-30 05:06:14 +00:00
vm_fault.c Give vm_fault()'s sequential access optimization a makeover. 2012-05-10 15:16:42 +00:00
vm_glue.c Move kstack_cache_entry into the private header, and make the 2011-12-16 10:56:16 +00:00
vm_init.c Introduce exec_alloc_args(). The objective being to encapsulate the 2010-07-27 17:31:03 +00:00
vm_kern.c Simplify kmem_alloc() by eliminating code that existed on account of 2012-02-29 05:41:29 +00:00
vm_kern.h
vm_map.c Give vm_fault()'s sequential access optimization a makeover. 2012-05-10 15:16:42 +00:00
vm_map.h Give vm_fault()'s sequential access optimization a makeover. 2012-05-10 15:16:42 +00:00
vm_meter.c - The previous commit (r228449) accidentally moved the vm.stats.vm.* sysctls 2011-12-14 13:25:00 +00:00
vm_mmap.c When MAP_STACK mapping is created, the map entry is created only to 2012-04-21 18:36:53 +00:00
vm_object.c Fix madvise(MADV_WILLNEED) to properly handle individual mappings larger 2012-03-19 18:47:34 +00:00
vm_object.h Fix madvise(MADV_WILLNEED) to properly handle individual mappings larger 2012-03-19 18:47:34 +00:00
vm_page.c Avoid a lock order reversal in pmap_extract_and_hold() from relocking 2012-04-22 17:58:30 +00:00
vm_page.h Fix mincore(2) so that it reports PG_CACHED pages as resident. 2012-04-08 18:25:12 +00:00
vm_pageout.c In vm_object_page_clean(), do not clean OBJ_MIGHTBEDIRTY object flag 2012-03-17 23:00:32 +00:00
vm_pageout.h In vm_object_page_clean(), do not clean OBJ_MIGHTBEDIRTY object flag 2012-03-17 23:00:32 +00:00
vm_pager.c Remove the condition that is always true. 2011-11-15 14:09:53 +00:00
vm_pager.h Update the device pager interface, while keeping the compatibility 2011-11-15 14:40:00 +00:00
vm_param.h On Alan's advice, rather than do a wholesale conversion on a single 2010-04-30 00:46:43 +00:00
vm_phys.c Bah, just revert my earlier change entirely. (Missed alc's request to do 2012-03-19 19:06:40 +00:00
vm_phys.h Refactor the code that performs physically contiguous memory allocation, 2011-11-16 16:46:09 +00:00
vm_reserv.c If a page belonging a reservation is cached, then mark the reservation so 2012-04-08 17:00:46 +00:00
vm_reserv.h Introduce vm_reserv_alloc_contig() and teach vm_page_alloc_contig() how to 2011-12-05 18:29:25 +00:00
vm_unix.c Control the execution permission of the readable segments for 2011-10-15 12:35:18 +00:00
vm_zeroidle.c
vm.h Replace pointer to "struct uidinfo" with pointer to "struct ucred" 2010-12-02 17:37:16 +00:00
vnode_pager.c Keep track of the mount point associated with a special device 2012-03-28 20:49:11 +00:00
vnode_pager.h Account the writeable shared mappings backed by file in the vnode 2012-02-23 21:07:16 +00:00