cpuset_hotplug_test.sh revision 9d466859928d3b811032d0cfd9eea99677f9942a
1#!/bin/sh 2 3################################################################################ 4# # 5# Copyright (c) 2009 FUJITSU LIMITED # 6# # 7# This program is free software; you can redistribute it and#or modify # 8# it under the terms of the GNU General Public License as published by # 9# the Free Software Foundation; either version 2 of the License, or # 10# (at your option) any later version. # 11# # 12# This program is distributed in the hope that it will be useful, but # 13# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # 14# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # 15# for more details. # 16# # 17# You should have received a copy of the GNU General Public License # 18# along with this program; if not, write to the Free Software # 19# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # 20# # 21# Author: Miao Xie <miaox@cn.fujitsu.com> # 22# # 23################################################################################ 24 25export TCID="cpuset_hotplug" 26export TST_TOTAL=13 27export TST_COUNT=1 28 29. cpuset_funcs.sh 30 31check 32 33exit_status=0 34 35nr_cpus=$NR_CPUS 36nr_mems=$N_NODES 37 38cpus_all="$(seq -s, 0 $((nr_cpus-1)))" 39cpus_all="`cpuset_list_compute $cpus_all`" 40mems_all="$(seq -s, 0 $((nr_mems-1)))" 41 42# check_result <result> <expect> 43check_result() 44{ 45 local result="$1" 46 local expect="$2" 47 48 case "$expect" in 49 EMPTY) 50 test -z "$result" 51 return $? 52 ;; 53 *) 54 test "$expect" = "$result" 55 return $? 56 ;; 57 esac 58} 59 60# root_cpu_hotplug_test <cpuhotplug> <expect_cpus> <expect_task_cpus> 61root_cpu_hotplug_test() 62{ 63 local cpuhotplug="$1" 64 local expect_cpus="$2" 65 local expect_task_cpus="$3" 66 67 local root_cpus= 68 local task_cpus= 69 local tst_pid= 70 local ret= 71 72 setup_test_environment $cpuhotplug 2> $CPUSET_TMP/stderr 73 if [ $? -ne 0 ]; then 74 cpuset_log_error $CPUSET_TMP/stderr 75 tst_resm TFAIL "setup test environment(offline CPU#$HOTPLUG_CPU) failed" 76 return 1 77 fi 78 79 /bin/cat /dev/zero > /dev/null 2>&1 & 80 tst_pid=$! 81 82 cpu_hotplug $HOTPLUG_CPU $cpuhotplug 2> $CPUSET_TMP/stderr 83 if [ $? -ne 0 ]; then 84 cpuset_log_error $CPUSET_TMP/stderr 85 tst_resm TFAIL "$cpuoffline CPU#$HOTPLUG_CPU failed." 86 return 1 87 fi 88 89 root_cpus="`cat $CPUSET/cpus`" 90 91 task_cpus="`cat /proc/$tst_pid/status | grep Cpus_allowed_list`" 92 task_cpus="`echo $task_cpus | sed -e 's/Cpus_allowed_list: //'`" 93 94 check_result "$root_cpus" "$expect_cpus" 95 ret=$? 96 if [ $ret -eq 0 ] 97 then 98 check_result "$task_cpus" "$expect_task_cpus" 99 ret=$? 100 if [ $ret -ne 0 ]; then 101 tst_resm TFAIL "task's allowed list isn't expected.(Result: $task_cpus, Expect: $expect_task_cpus)" 102 fi 103 else 104 tst_resm TFAIL "root group's cpus isn't expected(Result: $root_cpus, Expect: $expect_cpus)." 105 fi 106 107 /bin/kill -9 $tst_pid > /dev/null 2>&1 108 109 return $ret 110} 111 112# general_cpu_hotplug_test <cpuhotplug> <cpus> <expect_cpus> <expect_task_cpus> 113general_cpu_hotplug_test() 114{ 115 local cpuhotplug="$1" 116 local cpus="$2" 117 local expect_cpus="$3" 118 local expect_task_cpus="$4" 119 local path="$CPUSET/1" 120 121 local tst_pid= 122 local task_cpus= 123 local ret= 124 125 setup_test_environment $cpuhotplug 2> $CPUSET_TMP/stderr 126 if [ $? -ne 0 ]; then 127 cpuset_log_error $CPUSET_TMP/stderr 128 tst_resm TFAIL "setup test environment(offline CPU#$HOTPLUG_CPU) failed" 129 return 1 130 fi 131 132 cpuset_set "$path" "$cpus" "$mems_all" "0" 2> $CPUSET_TMP/stderr 133 if [ $? -ne 0 ]; then 134 cpuset_log_error $CPUSET_TMP/stderr 135 tst_resm TFAIL "set general group parameter failed." 136 return 1 137 fi 138 139 /bin/cat /dev/zero > /dev/null 2>&1 & 140 tst_pid=$! 141 142 echo $tst_pid > "$path/tasks" 2> $CPUSET_TMP/stderr 143 if [ $? -ne 0 ]; then 144 cpuset_log_error $CPUSET_TMP/stderr 145 tst_resm TFAIL "attach test tasks to group failed." 146 /bin/kill -s SIGKILL $tst_pid 147 return 1 148 fi 149 150 cpu_hotplug $HOTPLUG_CPU $cpuhotplug 2> $CPUSET_TMP/stderr 151 if [ $? -ne 0 ]; then 152 cpuset_log_error $CPUSET_TMP/stderr 153 tst_resm TFAIL ignored "$cpuoffline CPU#$HOTPLUG_CPU failed." 154 /bin/kill -s SIGKILL $tst_pid 155 return 1 156 fi 157 158 cpus="`cat $path/cpus`" 159 160 task_cpus="`cat /proc/$tst_pid/status | grep Cpus_allowed_list`" 161 task_cpus="`echo $task_cpus | sed -e 's/Cpus_allowed_list: //'`" 162 163 if [ "$expect_cpus" = "EMPTY" ]; then 164 local tasks=`cat $path/tasks | grep "\b$tst_pid\b"` 165 check_result "$tasks" "EMPTY" 166 if [ $? -ne 0 ]; then 167 tst_resm TFAIL "test task was still in general group, but its cpus is NULL" 168 /bin/kill -s SIGKILL $tst_pid 169 return 1 170 fi 171 172 tasks=`cat $CPUSET/tasks | grep "\b$tst_pid\b"` 173 check_result "$tasks" "$tst_pid" 174 if [ $? -ne 0 ]; then 175 tst_resm TFAIL "test task wasn't moved to parent group" 176 /bin/kill -s SIGKILL $tst_pid 177 return 1 178 fi 179 fi 180 181 check_result "$cpus" "$expect_cpus" 182 ret=$? 183 if [ $ret -eq 0 ]; then 184 check_result $task_cpus $expect_task_cpus 185 ret=$? 186 if [ $ret -ne 0 ]; then 187 tst_resm TFAIL "task's cpu allowed list isn't expected(Result: $task_cpus, Expect: $expect_task_cpus)." 188 fi 189 else 190 if [ "$cpus" = "" ]; then 191 cpus="EMPTY" 192 fi 193 tst_resm TFAIL "general group's cpus isn't expected(Result: $cpus, Expect: $expect_cpus)." 194 fi 195 /bin/kill -s SIGKILL $tst_pid > /dev/null 2>&1 196 197 return $ret 198} 199 200base_test() 201{ 202 setup 203 if [ $? -ne 0 ]; then 204 exit_status=1 205 else 206 "$test_function" "$@" 207 if [ $? -ne 0 ]; then 208 exit_status=1 209 cleanup 210 else 211 cleanup 212 if [ $? -ne 0 ]; then 213 exit_status=1 214 else 215 tst_resm TPASS "Cpuset vs CPU hotplug test succeeded." 216 fi 217 fi 218 219 cpu_hotplug_cleanup 220 fi 221 TST_COUNT=$(($TST_COUNT + 1)) 222} 223 224# Test Case 1-2 225test_root_cpu_hotplug() 226{ 227 local tmp_cpus="`cpuset_list_compute -s $cpus_all $HOTPLUG_CPU`" 228 229 test_function="root_cpu_hotplug_test" 230 while read hotplug cpus_expect task_expect 231 do 232 base_test "$hotplug" "$cpus_expect" "$task_expect" 233 done <<- EOF 234 offline $tmp_cpus $cpus_all 235 online $cpus_all $cpus_all 236 EOF 237 # while read hotplug cpus_expect task_expect 238} 239 240# Test Case 3-6 241test_general_cpu_hotplug() 242{ 243 local tmp_cpus="`cpuset_list_compute -s $cpus_all $HOTPLUG_CPU`" 244 245 test_function="general_cpu_hotplug_test" 246 while read hotplug cpus cpus_expect task_expect 247 do 248 base_test "$hotplug" "$cpus" "$cpus_expect" "$task_expect" 249 done <<- EOF 250 offline 0-1 0 0 251 offline 1 EMPTY $cpus_all 252 offline 0 0 0 253 online 0 0 0 254 EOF 255 # while read hotplug cpus cpus_expect task_expect 256} 257 258test_root_cpu_hotplug 259test_general_cpu_hotplug 260 261exit $exit_status 262