#!/bin/bash TMPDIR=/tmp PASS=0 FAIL=1 NOSUPPORT=2 MISSING_FILE=3 UNTESTED=4 YES=0 cleanup() { if [ -f ${1} ] ; then rm -f ${1} fi } check_kervel_arch() { # Checking required kernel version and architecture if tst_kvcmp -lt "2.6.21"; then tst_brkm TCONF "Kernel version not supported; not " \ "running testcases" else case "$(uname -m)" in i[4-6]86|x86_64) ;; *) tst_brkm TCONF "Arch not supported; not running " \ "testcases" ;; esac fi } check_config_options() { if ( ! ${3} "${1}" ${2} | grep -v "#" > /dev/null ) ; then tst_brkm TCONF "NOSUPPORT: current system dosen't support ${1}" fi } get_topology() { declare -a cpus declare -a phyid total_cpus=`tst_ncpus` (( total_cpus-=1 )) for cpu in $(seq 0 "${total_cpus}" ) do cpus[$cpu]=cpu${cpu} phyid[$cpu]=$(cat \ /sys/devices/system/cpu/cpu${cpu}/topology/physical_package_id) done j=0 while [ "${j}" -lt "${total_cpus}" ] do (( k = $j + 1 )) if [ ${phyid[$j]} -eq ${phyid[$k]} ] ; then echo "${cpus[$j]} -P ${cpus[$k]}" | sed -e "s/cpu//g" fi (( j+=1 )) done } check_cpufreq() { total_cpus=`tst_ncpus` (( total_cpus-=1 )) for cpu in $(seq 0 "${total_cpus}" ) do if [ ! -d /sys/devices/system/cpu/cpu${cpu}/cpufreq ] ; then tst_brkm TCONF "NOSUPPORT: cpufreq support not " \ "found please check Kernel configuration " \ "or BIOS settings" fi done } get_supporting_freq() { cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies \ | uniq } get_supporting_govr() { cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_governors \ | uniq } is_hyper_threaded() { siblings=`grep siblings /proc/cpuinfo | uniq | cut -f2 -d':'` cpu_cores=`grep "cpu cores" /proc/cpuinfo | uniq | cut -f2 -d':'` [ $siblings -gt $cpu_cores ]; echo $? } check_input() { validity_check=${2:-valid} testfile=$3 if [ "${validity_check}" = "invalid" ] ; then PASS="Testcase FAIL - Able to execute" FAIL="Testcase PASS - Unable to execute" else PASS="Testcase PASS" FAIL="Testcase FAIL" fi RC=0 for input in ${1} do echo ${input} > ${test_file} 2>/dev/null return_value=$? output=$(cat ${test_file}) if [ "${return_value}" = "0" -a "${input}" = "${output}" ] ; then echo "${0}: ${PASS}: echo ${input} > ${test_file}" if [ "${validity_check}" = "invalid" ] ; then RC=1 fi else echo "${0}: ${FAIL}: echo ${input} > ${test_file}" if [ "${validity_check}" = "valid" ] ; then RC=1 fi fi done return $RC } is_multi_socket() { no_of_sockets=`cat \ /sys/devices/system/cpu/cpu?/topology/physical_package_id \ | uniq | wc -l` [ $no_of_sockets -gt 1 ] ; echo $? } is_multi_core() { siblings=`grep siblings /proc/cpuinfo | uniq | cut -f2 -d':'` cpu_cores=`grep "cpu cores" /proc/cpuinfo | uniq | cut -f2 -d':'` if [ $siblings -eq $cpu_cores ]; then [ $cpu_cores -gt 1 ]; echo $? else : $(( num_of_cpus = siblings / cpu_cores )) [ $num_of_cpus -gt 1 ]; echo $? fi } is_dual_core() { siblings=`grep siblings /proc/cpuinfo | uniq | cut -f2 -d':'` cpu_cores=`grep "cpu cores" /proc/cpuinfo | uniq \ | cut -f2 -d':'` if [ $siblings -eq $cpu_cores ]; then [ $cpu_cores -eq 2 ]; echo $? else : $(( num_of_cpus = siblings / cpu_cores )) [ $num_of_cpus -eq 2 ]; echo $? fi } get_kernel_version() { # Get kernel minor version export kernel_version=`uname -r | awk -F. '{print $1"."$2"."$3}' \ | cut -f1 -d'-'` } get_valid_input() { kernel_version=$1 case "$kernel_version" in '2.6.26' | '2.6.27' | '2.6.28') export valid_input="0 1" ;; *) export valid_input="0 1 2" ;; esac } analyze_result_hyperthreaded() { sched_mc=$1 pass_count=$2 sched_smt=$3 PASS="Test PASS" FAIL="Test FAIL" RC=0 case "$sched_mc" in 0) case "$sched_smt" in 0) if [ $pass_count -lt 5 ]; then echo "${PASS}: cpu consolidation failed for" \ "sched_mc=$sched_mc & sched_smt=$sched_smt" else RC=1 echo "${FAIL}: cpu consolidation passed for" \ "sched_mc=$sched_mc & sched_smt=$sched_smt" fi ;; *) if [ $pass_count -lt 5 ]; then RC=1 echo "${FAIL}: cpu consolidation for" \ "sched_mc=$sched_mc & sched_smt=$sched_smt" else echo "${PASS}: cpu consolidation for" \ "sched_mc=$sched_mc & sched_smt=$sched_smt" fi ;; esac ;; *) if [ $pass_count -lt 5 ]; then RC=1 echo "${FAIL}: cpu consolidation for" \ "sched_mc=$sched_mc & sched_smt=$sched_smt" else echo "${PASS}: cpu consolidation for" \ "sched_mc=$sched_mc & sched_smt=$sched_smt" fi ;; esac return $RC } analyze_package_consolidation_result() { sched_mc=$1 pass_count=$2 if [ $# -gt 2 ] then sched_smt=$3 else sched_smt=-1 fi PASS="Test PASS" FAIL="Test FAIL" RC=0 if [ $hyper_threaded -eq $YES -a $sched_smt -gt -1 ]; then analyze_result_hyperthreaded $sched_mc $pass_count $sched_smt else case "$sched_mc" in 0) if [ $pass_count -lt 5 ]; then echo "${PASS}: cpu consolidation failed for" \ "sched_mc=$sched_mc" else RC=1 echo "${FAIL}: cpu consolidation passed for" \ "sched_mc=$sched_mc" fi ;; *) if [ $pass_count -lt 5 ]; then RC=1 echo "${FAIL}: consolidation at package level" \ "failed for sched_mc=$sched_mc" else echo "${PASS}: consolidation at package level" \ "passed for sched_mc=$sched_mc" fi ;; esac fi return $RC } analyze_core_consolidation_result() { sched_smt=$1 pass_count=$2 PASS="Test PASS" FAIL="Test FAIL" RC=0 case "$sched_smt" in 0) if [ $pass_count -lt 5 ]; then echo "${PASS}: consolidation at core level failed" \ "when sched_smt=$sched_smt" else RC=1 echo "${FAIL}: consolidation at core level passed for" \ "sched_smt=$sched_smt" fi ;; *) if [ $pass_count -lt 5 ]; then RC=1 echo "${FAIL}: consolidation at core level failed for" \ "sched_smt=$sched_smt" else echo "${PASS}: consolidation at core level passed for" \ "sched_smt=$sched_smt" fi ;; esac return $RC } analyze_sched_domain_result(){ sched_mc=$1 result=$2 sched_smt=$3 PASS="Test PASS" FAIL="Test FAIL" RC=0 if [ $hyper_threaded -eq $YES ]; then if [ $sched_smt ]; then if [ "$result" = 0 ];then echo "${PASS}: sched domain test for" \ "sched_mc=$sched_mc & sched_smt=$sched_smt" else RC=1 echo "${FAIL}: sched domain test for" \ "sched_mc=$sched_mc & sched_smt=$sched_smt" fi else if [ "$result" = 0 ];then echo "${PASS}: sched domain test for" \ "sched_mc=$sched_mc" else RC=1 echo "${FAIL}: sched domain test for" \ "sched_mc=$sched_mc" fi fi else if [ "$result" = 0 ];then echo "${PASS}: sched domain test for sched_mc=$sched_mc" else RC=1 echo "${FAIL}: sched domain test for sched_mc=$sched_mc" fi fi return $RC }