]>
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 | ||
375e71b8 ER |
26 | if is_yes "${CPUSETS}" && ! grep -q "/dev/cpuset" /proc/mounts ; then |
27 | nls "ERROR: CPUSET support not enabled in kernel or /dev/cpuset not mounted" >&2 | |
b1b7d442 | 28 | exit 1 |
686f4b8d JR |
29 | fi |
30 | ||
18bd13ac | 31 | cpuset_create() { |
5e6dfc29 JR |
32 | local CPUS MEMS CPU_EXCLUSIVE MEM_EXCLUSIVE NOTIFY_ON_RELEASE TASKS |
33 | ||
34 | . /etc/sysconfig/cpusets/cpuset-$i | |
35 | ||
36 | if mkdir /dev/cpuset/"$NAME" >/dev/null 2>&1 ; then | |
37 | [ -n "$CPUS" ] && echo "$CPUS" >/dev/cpuset/"$NAME"/cpus | |
38 | [ -n "$MEMS" ] && echo "$MEMS" >/dev/cpuset/"$NAME"/mems | |
39 | [ -n "$CPU_EXCLUSIVE" ] && echo "$CPU_EXCLUSIVE" >/dev/cpuset/"$NAME"/cpu_exclusive | |
40 | [ -n "$MEM_EXCLUSIVE" ] && echo "$MEM_EXCLUSIVE" >/dev/cpuset/"$NAME"/mem_exclusive | |
41 | [ -n "$NOTIFY_ON_RELEASE" ] && echo "$NOTIFY_ON_RELEASE" >/dev/cpuset/"$NAME"/notify_on_release | |
cc3ff68c | 42 | [ -n "$VIRTUALIZE" ] && echo "$VIRTUALIZE" >/dev/cpuset/"$NAME"/virtualize |
5e6dfc29 JR |
43 | [ -n "$TASKS" ] && echo "$TASKS" >/dev/cpuset/"$NAME"/tasks |
44 | return 0 | |
45 | fi | |
46 | return 1 | |
686f4b8d JR |
47 | } |
48 | ||
18bd13ac | 49 | cpuset_remove() { |
5e6dfc29 | 50 | local CPUS MEMS CPU_EXCLUSIVE MEM_EXCLUSIVE NOTIFY_ON_RELEASE TASKS |
059ce297 | 51 | |
5e6dfc29 | 52 | . /etc/sysconfig/cpusets/cpuset-$i |
686f4b8d | 53 | |
5e6dfc29 JR |
54 | # This MUST be rmdir (not rm -rf) |
55 | if rmdir /dev/cpuset/"$NAME" >/dev/null 2>&1 ; then | |
56 | return 0 | |
57 | else | |
58 | return 1 | |
59 | fi | |
686f4b8d JR |
60 | } |
61 | ||
18bd13ac | 62 | cpuset_empty() { |
5e6dfc29 JR |
63 | if [ $(cat /dev/cpuset/$1/tasks 2>/dev/null | wc -c) -eq 0 ] ; then |
64 | # true returns zero | |
65 | return 0 | |
66 | else | |
67 | # false returns one | |
68 | return 1 | |
69 | fi | |
686f4b8d JR |
70 | } |
71 | ||
6236caca | 72 | start() { |
686f4b8d JR |
73 | rc_splash "bootcpusets start" |
74 | ||
375e71b8 | 75 | for i in $cpusets_boot; do |
f025683f JR |
76 | show "$(nls -n "Creating cpuset %s" "$i")" |
77 | if cpuset_create $i ; then | |
5e6dfc29 | 78 | ok |
f025683f | 79 | else |
5e6dfc29 | 80 | fail |
f025683f | 81 | fi |
686f4b8d JR |
82 | done |
83 | ||
5e6dfc29 | 84 | touch /var/lock/subsys/cpusets |
6236caca ER |
85 | } |
86 | ||
87 | stop() { | |
375e71b8 | 88 | for i in $cpusets_boot; do |
f025683f | 89 | show "$(nls -n "Removing cpuset %s" "$i")" |
686f4b8d | 90 | busy |
375e71b8 ER |
91 | if cpuset_empty $i; then |
92 | if cpuset_remove $i; then | |
5e6dfc29 JR |
93 | ok |
94 | else | |
95 | fail | |
96 | fi | |
686f4b8d | 97 | else |
5e6dfc29 | 98 | fail |
686f4b8d JR |
99 | fi |
100 | done | |
101 | ||
5e6dfc29 | 102 | rm -f /var/lock/subsys/cpusets |
6236caca ER |
103 | } |
104 | ||
40d5c0e4 ER |
105 | # Get list of config files |
106 | # ignores editor backup files and rpm blackups | |
18bd13ac | 107 | cpuset_configs() { |
40d5c0e4 ER |
108 | local match="$1" |
109 | for a in /etc/sysconfig/cpusets/$match; do | |
110 | case "$a" in | |
111 | *rpmorig|*rpmnew|*rpmsave|*~|*.orig) | |
112 | continue | |
113 | ;; | |
114 | *) | |
115 | echo $a | |
116 | ;; | |
117 | esac | |
118 | done | |
119 | } | |
120 | ||
121 | cpuset_files="$(cpuset_configs 'cpuset-*')" | |
bf14fcab | 122 | cpusets_boot=$( |
40d5c0e4 ER |
123 | for i in $cpuset_files; do |
124 | ONBOOT=""; . "$i" 2>/dev/null | |
041f9800 | 125 | is_yes "$ONBOOT" && echo "${i##*/cpuset-}" |
40d5c0e4 | 126 | done |
bf14fcab | 127 | ) |
6236caca ER |
128 | |
129 | # See how we were called. | |
130 | case "$1" in | |
131 | start) | |
132 | start | |
133 | ;; | |
134 | stop) | |
135 | stop | |
5e6dfc29 | 136 | ;; |
686f4b8d JR |
137 | status) |
138 | nls "Configured cpusets:" | |
139 | echo "$cpusets_boot" | |
140 | echo | |
141 | nls "Currently empty cpusets:" | |
bf14fcab | 142 | for i in $(ls /dev/cpuset 2>/dev/null); do |
375e71b8 | 143 | if [ -d /dev/cpuset/$i ]; then |
5e6dfc29 JR |
144 | cpuset_empty $i && echo $i |
145 | fi | |
686f4b8d | 146 | done |
66cba726 | 147 | echo |
686f4b8d | 148 | nls "Currently active cpusets:" |
bf14fcab | 149 | for i in $(ls /dev/cpuset 2>/dev/null); do |
375e71b8 | 150 | if [ -d /dev/cpuset/$i ]; then |
5e6dfc29 JR |
151 | cpuset_empty $i || echo $i |
152 | fi | |
686f4b8d | 153 | done |
66cba726 | 154 | echo |
686f4b8d JR |
155 | ;; |
156 | restart) | |
6236caca ER |
157 | stop |
158 | start | |
686f4b8d JR |
159 | ;; |
160 | *) | |
34beb396 | 161 | msg_usage "$0 {start|stop|restart|status}" |
5afa7275 | 162 | exit 3 |
686f4b8d JR |
163 | esac |
164 | ||
165 | exit 0 |