conf/142434: [patch] Add cpuset(1) support to rc.subr
Miroslav Lachman
000.fbsd at quip.cz
Thu Jan 7 19:00:13 UTC 2010
The following reply was made to PR conf/142434; it has been noted by GNATS.
From: Miroslav Lachman <000.fbsd at quip.cz>
To: bug-followup at FreeBSD.org
Cc:
Subject: Re: conf/142434: [patch] Add cpuset(1) support to rc.subr
Date: Thu, 07 Jan 2010 19:58:46 +0100
This is a multi-part message in MIME format.
--------------000406030203050904060109
Content-Type: text/plain; charset=ISO-8859-2; format=flowed
Content-Transfer-Encoding: 7bit
Attached patch is for 7.2-RELEASE
--------------000406030203050904060109
Content-Type: text/plain;
name="cpuset_rc.subr_72.patch.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="cpuset_rc.subr_72.patch.txt"
--- /etc/rc.subr.orig 2009-05-28 17:17:57.000000000 +0200
+++ /etc/rc.subr 2010-01-07 18:27:27.000000000 +0100
@@ -58,6 +58,7 @@
IDCMD="if [ -x $ID ]; then $ID -un; fi"
PS="/bin/ps -ww"
JID=`$PS -p $$ -o jid=`
+CPUSET="/usr/bin/cpuset"
case ${OSTYPE} in
FreeBSD)
@@ -421,6 +422,9 @@
# ${name}_chdir n Directory to cd to before running ${command}
# (if not using ${name}_chroot).
#
+# ${name}_cpuset n A list of CPUs to run ${command} on.
+# Requires /usr to be mounted.
+#
# ${name}_flags n Arguments to call ${command} with.
# NOTE: $flags from the parent environment
# can be used to override this.
@@ -572,6 +576,17 @@
_pidcmd=
_procname=${procname:-${command}}
+ eval _cpuset=\$${name}_cpuset
+ # fix for background-fsck problem / check if value start with number
+ case "$_cpuset" in
+ [0-9]*) ;;
+ *) _cpuset="" ;;
+ esac
+ _cpusetcmd=
+ if [ -n "$_cpuset" -a -x $CPUSET ]; then
+ _cpusetcmd="$CPUSET -l $_cpuset"
+ fi
+
# setup pid check command
if [ -n "$_procname" ]; then
if [ -n "$pidfile" ]; then
@@ -629,7 +644,7 @@
if [ -n "$_cmd" ]; then
_run_rc_precmd || return 1
- _run_rc_doit "$_cmd $rc_extra_args" || return 1
+ _run_rc_doit "$_cpusetcmd $_cmd $rc_extra_args" || return 1
_run_rc_postcmd
return $_return
fi
@@ -640,6 +655,11 @@
_run_rc_precmd || return 1
if [ -n "$rc_pid" ]; then
echo "${name} is running as pid $rc_pid."
+ # for cpuset debug only, not committable (cut)
+ if [ -n "$_cpuset" -a -x $CPUSET ]; then
+ echo -n "on CPU(s)"
+ $CPUSET -g -p "$rc_pid" | cut -s -d: -f 2
+ fi
else
echo "${name} is not running."
return 1
@@ -665,13 +685,13 @@
echo "Starting ${name}."
if [ -n "$_chroot" ]; then
_doit="\
-${_nice:+nice -n $_nice }\
+${_nice:+nice -n $_nice } $_cpusetcmd\
chroot ${_user:+-u $_user }${_group:+-g $_group }${_groups:+-G $_groups }\
$_chroot $command $rc_flags $command_args"
else
_doit="\
${_chdir:+cd $_chdir && }\
-$command $rc_flags $command_args"
+$_cpusetcmd $command $rc_flags $command_args"
if [ -n "$_user" ]; then
_doit="su -m $_user -c 'sh -c \"$_doit\"'"
fi
--------------000406030203050904060109--
More information about the freebsd-bugs
mailing list