Package: boinc-client Version: 5.8.17-1+b1 Severity: wishlist Tags: patch I have attached a patch to the init script to make the boinc client (and children) get scheduled with more advanced schedulers if available and if the schedtool package is installed. It first tries idleprio, then batch, and falls back to nice if neither of those is available. It also tries to schedule the IO to batch using the ionice command if that is installed.
I also added a print out of current scheduling to the status command. The advance scheduling makes the boinc computations interfere as little as possible with current operations, even less so than using nice does. The while loop waiting for the pid file may seem like overkill but I've had a couple times where it took a little while for the pid file to show up. -- System Information: Debian Release: lenny/sid APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental') Architecture: i386 (i686) Kernel: Linux 2.6.21.1-ck1-1 (SMP w/2 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages boinc-client depends on: ii adduser 3.102 Add and remove users and groups ii ca-certi 20070303 Common CA Certificates PEM files ii debconf 1.5.13 Debian configuration management sy ii libc6 2.5-7 GNU C Library: Shared libraries ii libcomer 1.39+1.40-WIP-2007.04.07+dfsg-2 common error description library ii libcurl3 7.15.5-1 Multi-protocol file transfer libra ii libgcc1 1:4.1.2-6 GCC support library ii libidn11 0.6.5-1 GNU libidn library, implementation ii libkrb53 1.6.dfsg.1-3 MIT Kerberos runtime libraries ii libssl0. 0.9.8e-4 SSL shared libraries ii libstdc+ 4.1.2-6 The GNU Standard C++ Library v3 ii lsb-base 3.1-23.1 Linux Standard Base 3.1 init scrip ii python 2.4.4-3 An interactive high-level object-o ii zlib1g 1:1.2.3-13 compression library - runtime boinc-client recommends no packages. -- debconf information excluded
--- boinc-client.init.old 2007-05-01 11:36:36.000000000 -0700 +++ boinc-client.init 2007-05-10 16:05:04.000000000 -0700 @@ -94,11 +94,64 @@ log_end_msg 0 } +schedule() +{ + log_begin_msg "Setting up scheduling for $DESC and children:" + + if ! is_running; then + log_progress_msg "not running" + log_end_msg 0 + else + local pid max + max=5 + while [[ $max -gt 0 ]]; do + if [[ -f $PIDFILE ]]; then + pid=$(cat $PIDFILE) + break + fi + sleep 1 + max=$((max-1)) + done + + if [[ -z $pid ]]; then + log_failure_msg "unable to find pid to do scheduling." + return 1 + fi + + if ! which schedtool >/dev/null; then + log_progress_msg "Warning: no schedtool in the path" + else + children=$(ps --ppid $pid -opid= || true) + ( sudo schedtool -n 20 -D $pid $children >/dev/null && log_progress_msg "idleprio,") || \ + (sudo schedtool -n 20 -B $pid $children >/dev/null && log_progress_msg "batch," ) || \ + (sudo schedtool -n 20 $pid $children && log_progress_msg "only niced,") + fi + if ! which ionice >/dev/null; then + log_progress_msg "Warning: no ionice in the path" + else + ionice -n 4 -c 3 -p $pid + log_progress_msg "ioniced" + fi + + log_end_msg 0 + fi +} + status() { STATUS="Status of $DESC:" if is_running; then log_success_msg "$STATUS running." + if which schedtool >/dev/null; then + local pid + pid=$(cat $PIDFILE) + log_success_msg "" + log_success_msg "Scheduling of $DESC:" + schedtool -v $pid + log_success_msg "" + log_success_msg "Scheduling of $DESC's children:" + schedtool -v $(ps --ppid $pid -opid=) + fi else log_success_msg "$STATUS stopped." fi @@ -107,6 +160,11 @@ case "$1" in start) start + schedule + ;; + + schedule) + schedule ;; stop) @@ -124,7 +182,7 @@ ;; *) - log_success_msg "Usage: $0 {start|stop|restart|force-reload|status}" >&2 + log_success_msg "Usage: $0 {start|stop|restart|force-reload|status|schedule}" >&2 exit 1 ;; esac