123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- #!/bin/sh
- #
- # Test Case 5 - sar
- #
- export TCID="cpuhotplug05"
- export TST_TOTAL=1
- export LC_TIME="POSIX"
- # Includes:
- . test.sh
- . cpuhotplug_testsuite.sh
- . cpuhotplug_hotplug.sh
- cat <<EOF
- Name: $TCID
- Date: `date`
- Desc: Does sar behave properly during CPU hotplug events?
- EOF
- usage()
- {
- cat << EOF
- usage: $0 -c cpu -l loop -d directory
- OPTIONS
- -c cpu which is specified for testing
- -l number of cycle test
- -d directory used to lay file
- EOF
- exit 1
- }
- do_clean()
- {
- pid_is_valid ${SAR_PID} && kill_pid ${SAR_PID}
- online_cpu "$CPU_TO_TEST"
- }
- get_field()
- {
- echo "$1" | awk "{print \$$2}"
- }
- while getopts c:l:d: OPTION; do
- case $OPTION in
- c)
- CPU_TO_TEST=$OPTARG;;
- l)
- HOTPLUG05_LOOPS=$OPTARG;;
- d)
- TMP=$OPTARG;;
- ?)
- usage;;
- esac
- done
- LOOP_COUNT=1
- tst_require_cmds sar
- if [ $(get_present_cpus_num) -lt 2 ]; then
- tst_brkm TCONF "system doesn't have required CPU hotplug support"
- fi
- if [ -z "$CPU_TO_TEST" ]; then
- tst_brkm TBROK "usage: ${0##*} <CPU to offline>"
- fi
- # Validate the specified CPU is available
- if ! cpu_is_valid "${CPU_TO_TEST}" ; then
- tst_brkm TCONF "cpu${CPU_TO_TEST} doesn't support hotplug"
- fi
- # Check that the specified CPU is offline; if not, offline it
- if cpu_is_online "${CPU_TO_TEST}" ; then
- if ! offline_cpu ${CPU_TO_TEST} ; then
- tst_brkm TBROK "CPU${CPU_TO_TEST} cannot be offlined"
- fi
- fi
- TST_CLEANUP=do_clean
- LOG_FILE="$TMP/log_$$"
- until [ $LOOP_COUNT -gt $HOTPLUG05_LOOPS ]; do
- # Start up SAR and give it a couple cycles to run
- sar 1 0 >/dev/null 2>&1 &
- sleep 2
- # "sar 1 0" is supported before 'sysstat-8.1.4(include sar)',
- # after that use "sar 1" instead of. Use 'ps -C sar' to check.
- if ps -C sar >/dev/null 2>&1; then
- pkill sar
- sar -P "$CPU_TO_TEST" 1 0 > "$LOG_FILE" &
- else
- sar -P "$CPU_TO_TEST" 1 > "$LOG_FILE" &
- fi
- sleep 2
- SAR_PID=$!
- # Since the CPU is offline, SAR should display all the 6 fields
- # of CPU statistics as '0.00'
- offline_status=$(tail -n 1 "$LOG_FILE")
- if [ -z "$offline_status" ]; then
- tst_brkm TBROK "SAR output file is empty"
- fi
- cpu_field=$(get_field "$offline_status" "2")
- if [ "${cpu_field}" = "CPU" ]; then
- # Since sysstat-11.7.1, sar/sadf didn't display offline CPU
- tst_resm TINFO "SAR didn't display offline CPU"
- else
- for i in $(seq 3 8); do
- field=$(get_field "$offline_status" "$i")
- if [ "$field" != "0.00" ]; then
- tst_brkm TBROK "Field $i is '$field', '0.00' expected"
- fi
- done
- fi
- # Online the CPU
- if ! online_cpu ${CPU_TO_TEST}; then
- tst_brkm TBROK "CPU${CPU_TO_TEST} cannot be onlined"
- fi
- sleep 2
- # Check that SAR registered the change in CPU online/offline states
- online_status=$(tail -n 1 "$LOG_FILE")
- check_passed=0
- for i in $(seq 3 8); do
- field_online=$(get_field "$online_status" "$i")
- if [ "$field_online" != "0.00" ]; then
- check_passed=1
- break
- fi
- done
- if [ $check_passed -eq 0 ]; then
- tst_resm TFAIL "No change in the CPU statistics"
- tst_exit
- fi
- offline_cpu ${CPU_TO_TEST}
- kill_pid ${SAR_PID}
- LOOP_COUNT=$((LOOP_COUNT+1))
- done
- tst_resm TPASS "SAR updated statistics after the CPU was turned on."
- tst_exit
|