]>
Commit | Line | Data |
---|---|---|
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 | ||
15 | if [ "${CPUSETS:-no}" = "no" ]; then | |
16 | case "$1" in | |
17 | start|stop|restart) | |
18 | exit 0 | |
19 | ;; | |
20 | esac | |
21 | fi | |
22 | ||
686f4b8d JR |
23 | # Source function library. |
24 | . /etc/rc.d/init.d/functions | |
25 | ||
969ae86f JR |
26 | CGDIR= |
27 | CSUBSYS= | |
7b16a6ac JR |
28 | if grep -q "/dev/cgroup" /proc/mounts ; then |
29 | CGDIR="/dev/cgroup" | |
b707b624 | 30 | elif grep -q "/dev/cpuset" /proc/mounts ; then |
7b16a6ac | 31 | CGDIR="/dev/cpuset" |
969ae86f JR |
32 | fi |
33 | ||
34 | if [ -e ${CGDIR}/cpuset.cpus ]; then | |
35 | CSUBSYS="cpuset." | |
36 | elif [ ! -e ${CGDIR}/cpus ]; then | |
37 | nls "ERROR: CGROUP/CPUSET mounted in a way I can't recognize" >&2 | |
38 | exit 1 | |
7b16a6ac JR |
39 | fi |
40 | ||
b707b624 JR |
41 | cpuset_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 | 59 | cpuset_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 | 77 | cpuset_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 | 90 | cpuset_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 | 100 | start() { |
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 | ||
115 | stop() { | |
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 | 135 | cpuset_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 | ||
149 | cpuset_files="$(cpuset_configs 'cpuset-*')" | |
bf14fcab | 150 | cpusets_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. | |
158 | case "$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 |
193 | esac |
194 | ||
195 | exit 0 |