Date: Sun, 3 Aug 2003 06:35:31 -0700 (PDT) From: Poul-Henning Kamp <phk@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sys/vm swap_pager.c swap_pager.h vm_glue.c vm_pageout.c vm_pageout.h Message-ID: <200308031335.h73DZWJl008079@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
phk 2003/08/03 06:35:31 PDT FreeBSD src repository Modified files: sys/vm swap_pager.c swap_pager.h vm_glue.c vm_pageout.c vm_pageout.h Log: 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. 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200308031335.h73DZWJl008079>