From owner-cvs-all@FreeBSD.ORG Sun Aug 3 06:35:34 2003 Return-Path: Delivered-To: cvs-all@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 42D1137B40E; Sun, 3 Aug 2003 06:35:34 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id A0CA943FA3; Sun, 3 Aug 2003 06:35:32 -0700 (PDT) (envelope-from phk@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.6/8.12.6) with ESMTP id h73DZW0U008080; Sun, 3 Aug 2003 06:35:32 -0700 (PDT) (envelope-from phk@repoman.freebsd.org) Received: (from phk@localhost) by repoman.freebsd.org (8.12.6/8.12.6/Submit) id h73DZWJl008079; Sun, 3 Aug 2003 06:35:32 -0700 (PDT) Message-Id: <200308031335.h73DZWJl008079@repoman.freebsd.org> From: Poul-Henning Kamp Date: Sun, 3 Aug 2003 06:35:31 -0700 (PDT) To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org X-FreeBSD-CVS-Branch: HEAD Subject: cvs commit: src/sys/vm swap_pager.c swap_pager.h vm_glue.c vm_pageout.c vm_pageout.h X-BeenThere: cvs-all@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the entire tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 03 Aug 2003 13:35:35 -0000 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