]> git.pld-linux.org Git - projects/rc-scripts.git/blame - rc.d/init.d/cpusets
- moved cpuset/cgroup mounting code into cpuset startup script
[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
7b16a6ac
JR
26if grep -q "/dev/cgroup" /proc/mounts ; then
27 CGDIR="/dev/cgroup"
28 CSUBSYS="cpuset."
b707b624 29elif grep -q "/dev/cpuset" /proc/mounts ; then
7b16a6ac
JR
30 CGDIR="/dev/cpuset"
31 CSUBSYS=""
32fi
33
b707b624
JR
34cpuset_mount() {
35 [ -n "${CGDIR}" ] && return
36
37 if grep -q cgroup /proc/filesystems 2>/dev/null ; then
38 if ! grep -q "^[^#].*cgroup" /etc/fstab 2>/dev/null ; then
39 # creating is more convenient than artificial conflict with older udev
40 mkdir -p /dev/cgroup
41 modprobe -s blk-cgroup 2>/dev/null
42 # mount w/o options enables all available cgroup subsystems
43 mount -n -t cgroup none /dev/cgroup
44 fi
45 elif grep -q cpuset /proc/filesystems 2>/dev/null ; then
46 if ! grep -q "^[^#].*cpuset" /etc/fstab 2>/dev/null ; then
47 mount -n -t cpuset none /dev/cpuset
48 fi
49 else
50 nls "ERROR: CGROUP/CPUSET support not enabled in kernel" >&2
51 return 1
52 fi
53}
686f4b8d 54
18bd13ac 55cpuset_create() {
5708fcc4 56 local CPUS MEMS CPU_EXCLUSIVE MEM_EXCLUSIVE NOTIFY_ON_RELEASE TASKS
5e6dfc29
JR
57
58 . /etc/sysconfig/cpusets/cpuset-$i
59
7b16a6ac
JR
60 if mkdir "${CGDIR}/${NAME}" >/dev/null 2>&1 ; then
61 [ -n "$CPUS" ] && echo "$CPUS" >"${CGDIR}/${NAME}/${CSUBSYS}cpus"
62 [ -n "$MEMS" ] && echo "$MEMS" >"${CGDIR}/${NAME}/${CSUBSYS}mems"
63 [ -n "$CPU_EXCLUSIVE" ] && echo "$CPU_EXCLUSIVE" >"${CGDIR}/${NAME}/${CSUBSYS}cpu_exclusive"
64 [ -n "$MEM_EXCLUSIVE" ] && echo "$MEM_EXCLUSIVE" >"${CGDIR}/${NAME}/${CSUBSYS}mem_exclusive"
65 [ -n "$VIRTUALIZE" ] && echo "$VIRTUALIZE" >"${CGDIR}/${NAME}/${CSUBSYS}virtualize"
66 [ -n "$NOTIFY_ON_RELEASE" ] && echo "$NOTIFY_ON_RELEASE" >"${CGDIR}/${NAME}/${CSUBSYS}notify_on_release"
67 [ -n "$TASKS" ] && echo "$TASKS" >"${CGDIR}/${NAME}/tasks"
5e6dfc29
JR
68 return 0
69 fi
70 return 1
686f4b8d
JR
71}
72
18bd13ac 73cpuset_remove() {
5e6dfc29 74 local CPUS MEMS CPU_EXCLUSIVE MEM_EXCLUSIVE NOTIFY_ON_RELEASE TASKS
059ce297 75
5e6dfc29 76 . /etc/sysconfig/cpusets/cpuset-$i
686f4b8d 77
5e6dfc29 78 # This MUST be rmdir (not rm -rf)
7b16a6ac 79 if rmdir "${CGDIR}${NAME}" >/dev/null 2>&1 ; then
5e6dfc29
JR
80 return 0
81 else
82 return 1
83 fi
686f4b8d
JR
84}
85
18bd13ac 86cpuset_empty() {
7b16a6ac 87 if [ $(cat "${CGDIR}/$1/tasks" 2>/dev/null | wc -c) -eq 0 ] ; then
5e6dfc29
JR
88 # true returns zero
89 return 0
90 else
91 # false returns one
92 return 1
93 fi
686f4b8d
JR
94}
95
6236caca 96start() {
686f4b8d
JR
97 rc_splash "bootcpusets start"
98
375e71b8 99 for i in $cpusets_boot; do
f025683f
JR
100 show "$(nls -n "Creating cpuset %s" "$i")"
101 if cpuset_create $i ; then
5e6dfc29 102 ok
f025683f 103 else
5e6dfc29 104 fail
f025683f 105 fi
686f4b8d
JR
106 done
107
5e6dfc29 108 touch /var/lock/subsys/cpusets
6236caca
ER
109}
110
111stop() {
375e71b8 112 for i in $cpusets_boot; do
f025683f 113 show "$(nls -n "Removing cpuset %s" "$i")"
686f4b8d 114 busy
375e71b8
ER
115 if cpuset_empty $i; then
116 if cpuset_remove $i; then
5e6dfc29
JR
117 ok
118 else
119 fail
120 fi
686f4b8d 121 else
5e6dfc29 122 fail
686f4b8d
JR
123 fi
124 done
125
354b37ce 126 rm -f /var/lock/subsys/cpusets >/dev/null 2>&1
6236caca
ER
127}
128
40d5c0e4
ER
129# Get list of config files
130# ignores editor backup files and rpm blackups
18bd13ac 131cpuset_configs() {
40d5c0e4
ER
132 local match="$1"
133 for a in /etc/sysconfig/cpusets/$match; do
134 case "$a" in
135 *rpmorig|*rpmnew|*rpmsave|*~|*.orig)
136 continue
137 ;;
138 *)
139 echo $a
140 ;;
141 esac
142 done
143}
144
145cpuset_files="$(cpuset_configs 'cpuset-*')"
bf14fcab 146cpusets_boot=$(
40d5c0e4
ER
147 for i in $cpuset_files; do
148 ONBOOT=""; . "$i" 2>/dev/null
041f9800 149 is_yes "$ONBOOT" && echo "${i##*/cpuset-}"
40d5c0e4 150 done
bf14fcab 151)
6236caca
ER
152
153# See how we were called.
154case "$1" in
155 start)
b707b624 156 cpuset_mount
6236caca
ER
157 start
158 ;;
159 stop)
160 stop
5e6dfc29 161 ;;
686f4b8d
JR
162 status)
163 nls "Configured cpusets:"
164 echo "$cpusets_boot"
165 echo
166 nls "Currently empty cpusets:"
bf14fcab 167 for i in $(ls /dev/cpuset 2>/dev/null); do
7b16a6ac 168 if [ -d ${CGDIR}/$i ]; then
5e6dfc29
JR
169 cpuset_empty $i && echo $i
170 fi
686f4b8d 171 done
66cba726 172 echo
686f4b8d 173 nls "Currently active cpusets:"
bf14fcab 174 for i in $(ls /dev/cpuset 2>/dev/null); do
7b16a6ac 175 if [ -d ${CGDIR}/$i ]; then
5e6dfc29
JR
176 cpuset_empty $i || echo $i
177 fi
686f4b8d 178 done
66cba726 179 echo
686f4b8d
JR
180 ;;
181 restart)
6236caca 182 stop
b707b624 183 cpuset_mount
6236caca 184 start
686f4b8d
JR
185 ;;
186 *)
34beb396 187 msg_usage "$0 {start|stop|restart|status}"
5afa7275 188 exit 3
686f4b8d
JR
189esac
190
191exit 0
This page took 0.13914 seconds and 4 git commands to generate.