Best way to "renice" a process by name?

Brett Glass brett at lariat.net
Tue Sep 26 08:56:54 PDT 2006


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



More information about the freebsd-questions mailing list