From owner-freebsd-stable Fri Dec 15 14:47:44 2000 From owner-freebsd-stable@FreeBSD.ORG Fri Dec 15 14:47:42 2000 Return-Path: Delivered-To: freebsd-stable@freebsd.org Received: from earth.backplane.com (placeholder-dcat-1076843399.broadbandoffice.net [64.47.83.135]) by hub.freebsd.org (Postfix) with ESMTP id 8C5ED37B400 for ; Fri, 15 Dec 2000 14:47:42 -0800 (PST) Received: (from dillon@localhost) by earth.backplane.com (8.11.1/8.9.3) id eBFMlg727583; Fri, 15 Dec 2000 14:47:42 -0800 (PST) (envelope-from dillon) Date: Fri, 15 Dec 2000 14:47:42 -0800 (PST) From: Matt Dillon Message-Id: <200012152247.eBFMlg727583@earth.backplane.com> To: stable@FreeBSD.ORG Subject: New performance patch available for testing on stable Sender: owner-freebsd-stable@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG The URL: http://apollo.backplane.com/FreeBSD4/ This patch reworks the pageout daemon and the buf_daemon. It is based on my previous patch but hopefully has the kinks worked out. The patch is for -stable only, I will have a -current patch tonight. The main change is to the buf_daemon. I ripped out the dynamic speedup / slowdown code because it just wasn't working. I replaced it with code to track the amount of I/O in-progress in order to be able to limit the flush rate based on that. I also ripped out the non-working hysteresis for waking up the buf_daemon and put in real hysteresis, and I ripped out the artificial limitations on the number of buffers that could be flushed per wakeup (just like I ripped out the maxlaunder limitation in the pageout daemon in the last patch), and instead flush until the low water mark is reached, using the runningbufspace (bytes in transit to the I/O device) to limit the flush rate. In my testing, these changes lead to much, much smoother operation in heavily loaded situations and also appears to improve the write rate: 4.2-STABLE: (dd'ing to a CCD stripe of two SCSI drives) serv02:/data1# dd if=/dev/zero of=test bs=32k count=49152 49152+0 records in 49152+0 records out 1610612736 bytes transferred in 34.506011 secs (46676295 bytes/sec) 4.2-STABLE + patches: (dd'ing to a CCD stripe of two SCSI drives) serv01:/data1# dd if=/dev/zero of=test bs=32k count=49152 49152+0 records in 49152+0 records out 1610612736 bytes transferred in 27.995698 secs (57530722 bytes/sec) The current patchset will pageout a little more then 4.2-RELEASE, but hopefully to the benefit of the system rather then the detriment. This is because I ripped out the two-pass inactive queue scan in the pageout daemon that was skipping dirty pages in the first pass (giving them too much priority) and replaced it with a one-pass scan. I am slowly making my way to per-(disk)-device I/O pipelining. At the moment the pipelining is system-wide. -Matt To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message