From owner-freebsd-questions@FreeBSD.ORG Tue Sep 26 15:56:54 2006 Return-Path: X-Original-To: questions@freebsd.org Delivered-To: freebsd-questions@FreeBSD.ORG Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A20C916A412 for ; Tue, 26 Sep 2006 15:56:54 +0000 (UTC) (envelope-from brett@lariat.net) Received: from lariat.net (lariat.net [65.122.236.2]) by mx1.FreeBSD.org (Postfix) with ESMTP id B07C743DCE for ; Tue, 26 Sep 2006 15:56:35 +0000 (GMT) (envelope-from brett@lariat.net) Received: from Anne (IDENT:ppp1000.lariat.net@lariat.net [65.122.236.2]) by lariat.net (8.9.3/8.9.3) with ESMTP id JAA04228 for ; Tue, 26 Sep 2006 09:56:32 -0600 (MDT) X-message-flag: Warning! Use of Microsoft Outlook renders your system susceptible to Internet worms. Message-Id: <7.0.1.0.2.20060926090533.083a2a88@lariat.net> X-Mailer: QUALCOMM Windows Eudora Version 7.0.1.0 Date: Tue, 26 Sep 2006 09:32:40 -0600 To: questions@freebsd.org From: Brett Glass Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; format=flowed Cc: Subject: Best way to "renice" a process by name? X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Sep 2006 15:56:54 -0000 I'm working with a machine that's operating as a NAT router and recursive DNS resolver and is also running the Squid disk cache. Squid, in turn, spawns the "diskd" daemon, which does disk accesses on behalf of Squid. When Squid spawns diskd, it gives it a priority level 6 greater than itself. In other words, if Squid is launched normally, it gets a priority of 2 (normal) while diskd gets a priority of -4 (very high). Unfortunately, diskd is not an efficient user of CPU (it seems to be polling for I/O completion) and is starving other processes on the machine (for example, natd) which need to operate in near real time. I'd like to keep diskd running on that machine, because having disk access done by a separate process is very efficient -- even more so if the system uses SMP. But I need to re-prioritize Squid and diskd to keep the rest of the machine functional. In particular, I'd like to nice Squid down by 1 (so that natd and named have priority over it) and have diskd run at standard priority (so that it can't starve other processes). This will keep diskd at a higher priority than Squid itself, which in turn will hopefully prevent message queues from overflowing. Reducing Squid's priority is simple; I can just edit the script that starts Squid so that /usr/bin/nice is used to invoke it. But taming diskd is more difficult, because diskd is a child process of Squid. I have to make sure it has started (which may require a delay loop), find out its PID, and then "renice" it by whatever increment is required to get it to the system's standard priority (2 by convention). Is there a "renice by name" utility for FreeBSD (sort of an equivalent of "killall")? I could gin one up, but since this seems like something that people would want to do frequently, find it hard to believe that someone hasn't already written one. --Brett Glass