From owner-freebsd-hackers Tue May 14 11:24:47 2002 Delivered-To: freebsd-hackers@freebsd.org Received: from clifford.inch.com (ns.biglist.com [216.223.208.40]) by hub.freebsd.org (Postfix) with SMTP id 0050D37B405 for ; Tue, 14 May 2002 11:24:42 -0700 (PDT) Received: (qmail 75112 invoked by uid 501); 14 May 2002 18:24:41 -0000 Date: Tue, 14 May 2002 14:24:41 -0400 From: Omar Thameen To: freebsd-hackers@FreeBSD.org Subject: tuning a CPU bound server Message-ID: <20020514142441.A73151@clifford.inch.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Hi, I've got a pretty heavily loaded server which is doing mostly mailing list delivery. It happens to be running qmail with a large number of concurrencyremotes (about 1000), meaning that there is one smtp delivery process spawned for each message. I've hit a plateau with regards to the amount of bandwidth that the server can push out - I see similar performance with half the concurrencyremotes. As best as I can tell, the server is CPU bound. My main question is whether there are any kernel parameters I can tune to improve performance, or whether I just need to get more powerful processors (Xeons?). The current system is a dual PIII/800. Here is a typical vmstat: procs memory page disks faults cpu r b w avm fre flt re pi po fr sr da0 da1 in sy cs us sy id 18 10 0 490660 232216 4913 0 0 0 3443 0 5 1 1328 36613 5010 6 90 3 22 10 0 490948 232336 4962 0 0 0 3703 0 21 2 1448 41551 5804 7 92 1 17 11 0 489872 232336 4791 0 0 0 3509 0 1 1 1483 36746 5176 9 88 3 13 11 0 490248 232004 5285 0 0 0 3817 0 6 0 1541 38059 5323 6 92 2 23 11 0 492356 232072 5315 0 0 0 4012 0 0 1 1561 37586 5206 8 90 3 13 11 0 495272 231644 4902 0 0 0 3498 0 0 0 1308 36375 5118 7 87 6 28 11 0 495008 231440 4041 0 0 0 2977 0 119 0 1679 42109 5956 10 86 4 22 11 0 493708 232108 5751 0 0 0 4408 0 0 1 1653 37760 5440 6 93 1 8 11 0 495796 231140 4816 0 0 0 3299 0 0 0 1482 34807 4866 6 86 8 The run queue and runnable-but-blocked queue are obviously problematic. The other thing I noticed when comparing the vmstat output to a heavily hit webserver, is that my context switching is an order of magnitude higher. I'm assuming this is necessary because of the number of remote processes that need to be spawned for message delivery. Any ideas would be much appreciated. Previously, I tweaked some of the variables available via sysctl based on an article for tuning the Lyris ListManager, and have tried other parameters that appear to be related (the sysctl documentation for non-kernel hackers is a bit sparse). Omar To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message