freebsd-nq/sys/vm
Poul-Henning Kamp 8f60c087e6 Change the layout policy of the swap_pager from a hardcoded width
striping to a per device round-robin algorithm.

Because of the policy of not attempting to retain previous swap
allocation on page-out, this means that a newly added swap device
almost instantly takes its 1/N share of the I/O load but it takes
somewhat longer for it to assume it's 1/N share of the pages if there
is plenty of space on the other devices.

Change the 8G total swapspace limitation to 8G per device instead
by using a per device blist rather than one global blist.  This
reduces the memory footprint by 75% (typically a couple hundred
kilobytes) for the common case with one swapdevice but NSWAPDEV=4.

Remove the compile time constant limit of number of swap devices,
there is no limit now.  Instead of a fixed size array, store the
per swapdev structure in a TAILQ.

Total swap space is still addressed by a 32 bit page number and
therefore the upper limit is now 2^42 bytes = 16TB (for i386).

We still do not allocate the first page of each device in order to
give some amount of protection to any bsdlabel at the start of the
device.

A new device is appended after the existing devices in the swap space,
no attempt is made to fill in holes left behind by swapoff (this can
trivially be changed should it ever become a problem).

The sysctl vm.nswapdev now reflects the number of currently configured
swap devices.

Rename vm_swap_size to swap_pager_avail for consistency with other
exported names.

Change argument type for vm_proc_swapin_all() and swap_pager_isswapped()
to be a struct swdevt pointer rather than an index.

Not changed: we are still using blists to manage the free space,
but since the swapspace is no longer fragmented by the striping
different resource managers might fare better.
2003-08-03 13:35:31 +00:00
..
default_pager.c Use __FBSDID(). 2003-06-11 23:50:51 +00:00
device_pager.c Assert that the vm object is locked on entry to dev_pager_getpages(). 2003-06-24 19:48:34 +00:00
phys_pager.c Use __FBSDID(). 2003-06-11 23:50:51 +00:00
pmap.h Background: pmap_object_init_pt() premaps the pages of a object in 2003-07-03 20:18:02 +00:00
swap_pager.c Change the layout policy of the swap_pager from a hardcoded width 2003-08-03 13:35:31 +00:00
swap_pager.h Change the layout policy of the swap_pager from a hardcoded width 2003-08-03 13:35:31 +00:00
uma_core.c Revise obj_alloc(). Most notably, use the object's lock to prevent two 2003-08-03 06:08:48 +00:00
uma_dbg.c Use __FBSDID(). 2003-06-11 23:50:51 +00:00
uma_dbg.h
uma_int.h - Get rid of the ill-conceived uz_cachefree member of uma_zone. 2003-07-30 05:59:17 +00:00
uma.h Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
vm_contig.c Use pmap_zero_page() to zero pages instead of bzero() because 2003-07-27 10:41:33 +00:00
vm_extern.h Migrate the thread stack management functions from the machine-dependent 2003-06-14 23:23:55 +00:00
vm_fault.c Maintain a lock on the vm object of interest throughout vm_fault(), 2003-06-22 21:35:41 +00:00
vm_glue.c Change the layout policy of the swap_pager from a hardcoded width 2003-08-03 13:35:31 +00:00
vm_init.c Avoid an unnecessary calculation: there is no need to subtract 2003-07-13 21:02:11 +00:00
vm_kern.c Update the comment at the head of kmem_alloc_nofault() to describe its 2003-08-01 19:51:43 +00:00
vm_kern.h Move kernel_vm_end's declaration to pmap.h; add a comment regarding the 2003-02-15 19:38:23 +00:00
vm_map.c Move the implementation of the vmspace_swap_count() (used only in 2003-07-18 10:47:58 +00:00
vm_map.h Introduce vm_map_pmap_enter(). Presently, this is a stub calling the MD 2003-06-29 23:32:55 +00:00
vm_meter.c Use __FBSDID(). 2003-06-11 23:50:51 +00:00
vm_mmap.c Remove unnecessary cast. 2003-07-04 12:23:43 +00:00
vm_object.c Allow vm_object_reference() on kernel_object without Giant. 2003-07-27 05:43:58 +00:00
vm_object.h - Add VM_OBJECT_TRYLOCK(). 2003-06-04 19:59:23 +00:00
vm_page.c Modify vm_page_alloc() and vm_page_select_cache() to allow the page that 2003-07-01 07:33:41 +00:00
vm_page.h - Add vm_paddr_t, a physical address type. This is required for systems 2003-03-25 00:07:06 +00:00
vm_pageout.c Change the layout policy of the swap_pager from a hardcoded width 2003-08-03 13:35:31 +00:00
vm_pageout.h Change the layout policy of the swap_pager from a hardcoded width 2003-08-03 13:35:31 +00:00
vm_pageq.c Modify vm_pageq_requeue() to handle a PQ_NONE page without dereferencing 2003-06-26 03:14:40 +00:00
vm_pager.c Move extern declaration of the various pagerops from vm_pager.c 2003-08-03 09:27:39 +00:00
vm_pager.h Move extern declaration of the various pagerops from vm_pager.c 2003-08-03 09:27:39 +00:00
vm_param.h Rev 1.16 renamed VM_METER to VM_TOTAL. This is breaking 3rd-party apps. 2003-01-18 21:14:02 +00:00
vm_unix.c Use __FBSDID(). 2003-06-11 23:50:51 +00:00
vm_zeroidle.c Use __FBSDID(). 2003-06-11 23:50:51 +00:00
vm.h
vnode_pager.c Maintain a lock on the vm object of interest throughout vm_fault(), 2003-06-22 21:35:41 +00:00
vnode_pager.h