You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
328 lines
6.8 KiB
328 lines
6.8 KiB
#!/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
|
|
}
|