aboutsummaryrefslogtreecommitdiff
path: root/sys/fs/specfs/spec_vnops.c
diff options
context:
space:
mode:
authorMatthew Dillon <dillon@FreeBSD.org>2000-12-26 19:41:38 +0000
committerMatthew Dillon <dillon@FreeBSD.org>2000-12-26 19:41:38 +0000
commit2b6b0df7122d70d32da785937c35292cbcc372b6 (patch)
tree4cf765d60a2bf719ed5af9b0b5febf8ee0c68c8c /sys/fs/specfs/spec_vnops.c
parent590a0be0360b4e75df25e5af746ef44dd5bde8b1 (diff)
downloadsrc-2b6b0df7122d70d32da785937c35292cbcc372b6.tar.gz
src-2b6b0df7122d70d32da785937c35292cbcc372b6.zip
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.
Notes
Notes: svn path=/head/; revision=70374
Diffstat (limited to 'sys/fs/specfs/spec_vnops.c')
-rw-r--r--sys/fs/specfs/spec_vnops.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/fs/specfs/spec_vnops.c b/sys/fs/specfs/spec_vnops.c
index 582bece3ba78..f3d7f11f0644 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;