]> git.pld-linux.org Git - projects/rc-scripts.git/blame - rc.d/init.d/cpusets
- silence mkdir
[projects/rc-scripts.git] / rc.d / init.d / cpusets
CommitLineData
686f4b8d
JR
1#!/bin/sh
2#
3# cpusets Create/remove cpusets
4#
5e6dfc29
JR
5# chkconfig: 12345 01 99
6# description: Creates/Removes all cpu sets configured to \
686f4b8d
JR
7# start at boot time.
8#
9# probe: true
10
5032c467 11# $Id$
686f4b8d 12
375e71b8
ER
13. /etc/sysconfig/system
14
15if [ "${CPUSETS:-no}" = "no" ]; then
16 case "$1" in
17 start|stop|restart)
18 exit 0
19 ;;
20 esac
21fi
22
686f4b8d
JR
23# Source function library.
24. /etc/rc.d/init.d/functions
25
969ae86f
JR
26CGDIR=
27CSUBSYS=
7b16a6ac
JR
28if grep -q "/dev/cgroup" /proc/mounts ; then
29 CGDIR="/dev/cgroup"
b707b624 30elif grep -q "/dev/cpuset" /proc/mounts ; then
7b16a6ac 31 CGDIR="/dev/cpuset"
969ae86f
JR
32fi
33
34if [ -e ${CGDIR}/cpuset.cpus ]; then
35 CSUBSYS="cpuset."
36elif [ ! -e ${CGDIR}/cpus ]; then
37 nls "ERROR: CGROUP/CPUSET mounted in a way I can't recognize" >&2
38 exit 1
7b16a6ac
JR
39fi
40
b707b624
JR
41cpuset_mount() {
42 [ -n "${CGDIR}" ] && return
43
44 if grep -q cgroup /proc/filesystems 2>/dev/null ; then
4576427c 45 mkdir -p /dev/cpuset 2>/dev/null
969ae86f
JR
46 mount -t cgroup none /dev/cpuset -ocpuset
47 CSUBSYS="cpuset."
b707b624 48 elif grep -q cpuset /proc/filesystems 2>/dev/null ; then
4576427c 49 mkdir -p /dev/cpuset 2>/dev/null
05fa95a7 50 mount -t cpuset none /dev/cpuset
969ae86f 51 CSUBSYS=""
b707b624
JR
52 else
53 nls "ERROR: CGROUP/CPUSET support not enabled in kernel" >&2
d734fea0 54 exit 1
b707b624 55 fi
969ae86f 56 CGDIR="/dev/cpuset"
b707b624 57}
686f4b8d 58
18bd13ac 59cpuset_create() {
5708fcc4 60 local CPUS MEMS CPU_EXCLUSIVE MEM_EXCLUSIVE NOTIFY_ON_RELEASE TASKS
5e6dfc29
JR
61
62 . /etc/sysconfig/cpusets/cpuset-$i
63
7b16a6ac
JR
64 if mkdir "${CGDIR}/${NAME}" >/dev/null 2>&1 ; then
65 [ -n "$CPUS" ] && echo "$CPUS" >"${CGDIR}/${NAME}/${CSUBSYS}cpus"
66 [ -n "$MEMS" ] && echo "$MEMS" >"${CGDIR}/${NAME}/${CSUBSYS}mems"
67 [ -n "$CPU_EXCLUSIVE" ] && echo "$CPU_EXCLUSIVE" >"${CGDIR}/${NAME}/${CSUBSYS}cpu_exclusive"
68 [ -n "$MEM_EXCLUSIVE" ] && echo "$MEM_EXCLUSIVE" >"${CGDIR}/${NAME}/${CSUBSYS}mem_exclusive"
69 [ -n "$VIRTUALIZE" ] && echo "$VIRTUALIZE" >"${CGDIR}/${NAME}/${CSUBSYS}virtualize"
70 [ -n "$NOTIFY_ON_RELEASE" ] && echo "$NOTIFY_ON_RELEASE" >"${CGDIR}/${NAME}/${CSUBSYS}notify_on_release"
71 [ -n "$TASKS" ] && echo "$TASKS" >"${CGDIR}/${NAME}/tasks"
5e6dfc29
JR
72 return 0
73 fi
74 return 1
686f4b8d
JR
75}
76
18bd13ac 77cpuset_remove() {
5e6dfc29 78 local CPUS MEMS CPU_EXCLUSIVE MEM_EXCLUSIVE NOTIFY_ON_RELEASE TASKS
059ce297 79
5e6dfc29 80 . /etc/sysconfig/cpusets/cpuset-$i
686f4b8d 81
5e6dfc29 82 # This MUST be rmdir (not rm -rf)
7b16a6ac 83 if rmdir "${CGDIR}${NAME}" >/dev/null 2>&1 ; then
5e6dfc29
JR
84 return 0
85 else
86 return 1
87 fi
686f4b8d
JR
88}
89
18bd13ac 90cpuset_empty() {
7b16a6ac 91 if [ $(cat "${CGDIR}/$1/tasks" 2>/dev/null | wc -c) -eq 0 ] ; then
5e6dfc29
JR
92 # true returns zero
93 return 0
94 else
95 # false returns one
96 return 1
97 fi
686f4b8d
JR
98}
99
6236caca 100start() {
686f4b8d
JR
101 rc_splash "bootcpusets start"
102
375e71b8 103 for i in $cpusets_boot; do
f025683f
JR
104 show "$(nls -n "Creating cpuset %s" "$i")"
105 if cpuset_create $i ; then
5e6dfc29 106 ok
f025683f 107 else
5e6dfc29 108 fail
f025683f 109 fi
686f4b8d
JR
110 done
111
5e6dfc29 112 touch /var/lock/subsys/cpusets
6236caca
ER
113}
114
115stop() {
375e71b8 116 for i in $cpusets_boot; do
f025683f 117 show "$(nls -n "Removing cpuset %s" "$i")"
686f4b8d 118 busy
375e71b8
ER
119 if cpuset_empty $i; then
120 if cpuset_remove $i; then
5e6dfc29
JR
121 ok
122 else
123 fail
124 fi
686f4b8d 125 else
5e6dfc29 126 fail
686f4b8d
JR
127 fi
128 done
129
354b37ce 130 rm -f /var/lock/subsys/cpusets >/dev/null 2>&1
6236caca
ER
131}
132
40d5c0e4
ER
133# Get list of config files
134# ignores editor backup files and rpm blackups
18bd13ac 135cpuset_configs() {
40d5c0e4
ER
136 local match="$1"
137 for a in /etc/sysconfig/cpusets/$match; do
138 case "$a" in
139 *rpmorig|*rpmnew|*rpmsave|*~|*.orig)
140 continue
141 ;;
142 *)
143 echo $a
144 ;;
145 esac
146 done
147}
148
149cpuset_files="$(cpuset_configs 'cpuset-*')"
bf14fcab 150cpusets_boot=$(
40d5c0e4
ER
151 for i in $cpuset_files; do
152 ONBOOT=""; . "$i" 2>/dev/null
041f9800 153 is_yes "$ONBOOT" && echo "${i##*/cpuset-}"
40d5c0e4 154 done
bf14fcab 155)
6236caca
ER
156
157# See how we were called.
158case "$1" in
159 start)
b707b624 160 cpuset_mount
6236caca
ER
161 start
162 ;;
163 stop)
164 stop
5e6dfc29 165 ;;
686f4b8d
JR
166 status)
167 nls "Configured cpusets:"
168 echo "$cpusets_boot"
169 echo
170 nls "Currently empty cpusets:"
bf14fcab 171 for i in $(ls /dev/cpuset 2>/dev/null); do
7b16a6ac 172 if [ -d ${CGDIR}/$i ]; then
5e6dfc29
JR
173 cpuset_empty $i && echo $i
174 fi
686f4b8d 175 done
66cba726 176 echo
686f4b8d 177 nls "Currently active cpusets:"
bf14fcab 178 for i in $(ls /dev/cpuset 2>/dev/null); do
7b16a6ac 179 if [ -d ${CGDIR}/$i ]; then
5e6dfc29
JR
180 cpuset_empty $i || echo $i
181 fi
686f4b8d 182 done
66cba726 183 echo
686f4b8d
JR
184 ;;
185 restart)
6236caca 186 stop
b707b624 187 cpuset_mount
6236caca 188 start
686f4b8d
JR
189 ;;
190 *)
34beb396 191 msg_usage "$0 {start|stop|restart|status}"
5afa7275 192 exit 3
686f4b8d
JR
193esac
194
195exit 0
This page took 0.134372 seconds and 4 git commands to generate.