]>
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 | ||
7b16a6ac JR |
26 | if grep -q "/dev/cgroup" /proc/mounts ; then |
27 | CGDIR="/dev/cgroup" | |
28 | CSUBSYS="cpuset." | |
b707b624 | 29 | elif grep -q "/dev/cpuset" /proc/mounts ; then |
7b16a6ac JR |
30 | CGDIR="/dev/cpuset" |
31 | CSUBSYS="" | |
32 | fi | |
33 | ||
b707b624 JR |
34 | cpuset_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 | 55 | cpuset_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 | 73 | cpuset_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 | 86 | cpuset_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 | 96 | start() { |
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 | ||
111 | stop() { | |
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 | 131 | cpuset_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 | ||
145 | cpuset_files="$(cpuset_configs 'cpuset-*')" | |
bf14fcab | 146 | cpusets_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. | |
154 | case "$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 |
189 | esac |
190 | ||
191 | exit 0 |