From fd223545d4ce7c8c6fe4896ce1eb916f587f77a8 Mon Sep 17 00:00:00 2001 From: dillon Date: Tue, 26 Dec 2000 19:41:38 +0000 Subject: This implements a better launder limiting solution. There was a solution in 4.2-REL which I ripped out in -stable and -current when implementing the low-memory handling solution. However, maxlaunder turns out to be the saving grace in certain very heavily loaded systems (e.g. newsreader box). The new algorithm limits the number of pages laundered in the first pageout daemon pass. If that is not sufficient then suceessive will be run without any limit. Write I/O is now pipelined using two sysctls, vfs.lorunningspace and vfs.hirunningspace. This prevents excessive buffered writes in the disk queues which cause long (multi-second) delays for reads. It leads to more stable (less jerky) and generally faster I/O streaming to disk by allowing required read ops (e.g. for indirect blocks and such) to occur without interrupting the write stream, amoung other things. NOTE: eventually, filesystem write I/O pipelining needs to be done on a per-device basis. At the moment it is globalized. --- sys/fs/specfs/spec_vnops.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'sys/fs') diff --git a/sys/fs/specfs/spec_vnops.c b/sys/fs/specfs/spec_vnops.c index 582bece..f3d7f11 100644 --- a/sys/fs/specfs/spec_vnops.c +++ b/sys/fs/specfs/spec_vnops.c @@ -684,6 +684,8 @@ spec_getpages(ap) bp->b_bcount = size; bp->b_bufsize = size; bp->b_resid = 0; + bp->b_runningbufspace = bp->b_bufsize; + runningbufspace += bp->b_runningbufspace; cnt.v_vnodein++; cnt.v_vnodepgsin += pcount; -- cgit v1.1