blob: 77fc0ca1cc88d0a6b6db795af896f41855f44fd7 [file] [log] [blame]
#!/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_config_options() {
if ( ! ${3} "${1}" ${2} | grep -v "#" > /dev/null ) ; then
echo "NOSUPPORT: current system dosen't support ${1}"
fi
}
no_of_cpus() {
echo $(cat /proc/cpuinfo | grep processor | wc -l)
}
get_topology() {
declare -a cpus
declare -a phyid
total_cpus=$(no_of_cpus)
(( 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=$(no_of_cpus)
(( total_cpus-=1 ))
for cpu in $(seq 0 "${total_cpus}" )
do
if [ ! -d /sys/devices/system/cpu/cpu${cpu}/cpufreq ] ; then
echo "NOSUPPORT: cpufreq support not found please check Kernel configuration or BIOS settings"
exit $NOSUPPORT
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=`cat /proc/cpuinfo | grep siblings | uniq | cut -f2 -d':'`
cpu_cores=`cat /proc/cpuinfo | grep "cpu cores" | uniq | cut -f2 -d':'`
[ $siblings -gt $cpu_cores ]; return $?
}
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 ] ; return $?
}
is_multi_core() {
siblings=`cat /proc/cpuinfo | grep siblings | uniq | cut -f2 -d':'`
cpu_cores=`cat /proc/cpuinfo | grep "cpu cores" | uniq | cut -f2 -d':'`
if [ $siblings -eq $cpu_cores ]; then
[ $cpu_cores -gt 1 ]; return $?
else
: $(( num_of_cpus = siblings / cpu_cores ))
[ $num_of_cpus -gt 1 ]; return $?
fi
}
is_dual_core() {
siblings=`cat /proc/cpuinfo | grep siblings | uniq | cut -f2 -d':'`
cpu_cores=`cat /proc/cpuinfo | grep "cpu cores" | uniq | cut -f2 -d':'`
if [ $siblings -eq $cpu_cores ]; then
[ $cpu_cores -eq 2 ]; return $?
else
: $(( num_of_cpus = siblings / cpu_cores ))
[ $num_of_cpus -eq 2 ]; return $?
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
case "$sched_mc" in
0)
case "$sched_smt" in
0)
if [ $pass_count -lt 5 ]; then
tst_resm TPASS "cpu consolidation failed for sched_mc=\
$sched_mc & sched_smt=$sched_smt"
else
RC=1
tst_resm TFAIL "cpu consolidation passed for sched_mc=\
$sched_mc & sched_smt=$sched_smt"
fi
;;
*)
if [ $pass_count -lt 5 ]; then
tst_resm TFAIL "cpu consolidation for sched_mc=\
$sched_mc & sched_smt=$sched_smt"
else
RC=1
tst_resm TPASS "cpu consolidation for sched_mc=\
$sched_mc & sched_smt=$sched_smt"
fi
;;
esac ;;
*)
if [ $pass_count -lt 5 ]; then
tst_resm TFAIL "cpu consolidation for sched_mc=\
$sched_mc & sched_smt=$sched_smt"
else
RC=1
tst_resm TPASS "cpu consolidation for sched_mc=\
$sched_mc & sched_smt=$sched_smt"
fi
;;
esac
}
analyze_package_consolidation_result() {
sched_mc=$1
pass_count=$2
if [ $# -gt 2 ]
then
sched_smt=$3
else
sched_smt=-1
fi
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
tst_resm TPASS "cpu consolidation failed for sched_mc=\
$sched_mc"
else
RC=1
tst_resm TFAIL "cpu consolidation passed for sched_mc=\
$sched_mc"
fi ;;
*)
if [ $pass_count -lt 5 ]; then
tst_resm TFAIL "Consolidation at package level failed for \
sched_mc=$sched_mc"
else
tst_resm TPASS "Consolidation at package level passed for \
sched_mc=$sched_mc"
fi
;;
esac
fi
}
analyze_core_consolidation_result() {
sched_smt=$1
pass_count=$2
case "$sched_smt" in
0)
if [ $pass_count -lt 5 ]; then
tst_resm TPASS "Consolidation at core level failed \
when sched_smt=$sched_smt"
else
tst_resm TFAIL "Consolidation at core level passed for \
sched_smt=$sched_smt"
fi ;;
*)
if [ $pass_count -lt 5 ]; then
RC=1
tst_resm TFAIL "Consolidation at core level failed for \
sched_smt=$sched_smt"
else
tst_resm TPASS "Consolidation at core level passed for \
sched_smt=$sched_smt"
fi ;;
esac
}
analyze_sched_domain_result(){
sched_mc=$1
result=$2
sched_smt=$3
if [ $hyper_threaded -eq $YES ]; then
if [ $sched_smt ]; then
if [ "$result" = 0 ];then
tst_resm TPASS "sched domain test for sched_mc=$sched_mc & sched_smt=$sched_smt"
else
RC=1
tst_resm TFAIL "sched domain test sched_mc=$sched_mc & sched_smt=$sched_smt"
fi
else
if [ "$result" = 0 ];then
tst_resm TPASS "sched domain test for sched_mc=$sched_mc"
else
RC=1
tst_resm TFAIL "sched domain test for sched_mc=$sched_mc"
fi
fi
else
if [ "$result" = 0 ];then
tst_resm TPASS "sched domain test for sched_mc=$sched_mc"
else
RC=1
tst_resm TFAIL "sched domain test sched_mc=$sched_mc"
fi
fi
}