cvs commit: src/sys/vm swap_pager.c swap_pager.h vm_glue.c
phk at FreeBSD.org
Sun Aug 3 06:35:35 PDT 2003
phk 2003/08/03 06:35:31 PDT
FreeBSD src repository
sys/vm swap_pager.c swap_pager.h vm_glue.c
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
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
Rename vm_swap_size to swap_pager_avail for consistency with other
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.
Revision Changes Path
1.213 +125 -149 src/sys/vm/swap_pager.c
1.47 +3 -2 src/sys/vm/swap_pager.h
1.181 +1 -1 src/sys/vm/vm_glue.c
1.240 +2 -2 src/sys/vm/vm_pageout.c
1.37 +2 -1 src/sys/vm/vm_pageout.h
More information about the cvs-src