* Modify Makefile. * Split runpwtests.sh into separate testcases, eg. runpwtests01.sh.
* Use functions in test.sh, eg. tst_brkm. * Fix error of change_govr.sh, change_freq.sh, etc. * Since I don't have suitable machines and can't test some testcases' correctness, currently these cases are disabled. Signed-off-by: Xing Gu <gux.f...@cn.fujitsu.com> --- configure.ac | 14 - include/mk/features.mk.default | 7 - include/mk/features.mk.in | 7 - runtest/Makefile | 4 - runtest/power_management_tests | 8 +- runtest/power_management_tests_exclusive | 13 +- scenario_groups/default | 1 + testcases/kernel/Makefile | 6 +- testcases/kernel/power_management/Makefile | 10 +- testcases/kernel/power_management/change_freq.sh | 2 +- testcases/kernel/power_management/change_govr.sh | 2 +- .../power_management/check_cpufreq_sysfs_files.sh | 2 +- .../kernel/power_management/cpu_consolidation.py | 6 +- testcases/kernel/power_management/ilb_test.py | 2 - testcases/kernel/power_management/lib/Makefile | 25 ++ testcases/kernel/power_management/lib/sched_mc.py | 50 ++- testcases/kernel/power_management/pm_include.sh | 121 ++++--- testcases/kernel/power_management/runpwtests.sh | 380 --------------------- testcases/kernel/power_management/runpwtests01.sh | 60 ++++ testcases/kernel/power_management/runpwtests02.sh | 58 ++++ testcases/kernel/power_management/runpwtests03.sh | 75 ++++ testcases/kernel/power_management/runpwtests04.sh | 48 +++ testcases/kernel/power_management/runpwtests05.sh | 93 +++++ testcases/kernel/power_management/runpwtests06.sh | 62 ++++ .../power_management/runpwtests_exclusive01.sh | 112 ++++++ .../power_management/runpwtests_exclusive02.sh | 82 +++++ .../power_management/runpwtests_exclusive03.sh | 110 ++++++ .../power_management/runpwtests_exclusive04.sh | 67 ++++ .../power_management/runpwtests_exclusive05.sh | 112 ++++++ testcases/kernel/power_management/sched_domain.py | 2 - 30 files changed, 1034 insertions(+), 507 deletions(-) create mode 100644 testcases/kernel/power_management/lib/Makefile delete mode 100755 testcases/kernel/power_management/runpwtests.sh create mode 100755 testcases/kernel/power_management/runpwtests01.sh create mode 100755 testcases/kernel/power_management/runpwtests02.sh create mode 100755 testcases/kernel/power_management/runpwtests03.sh create mode 100755 testcases/kernel/power_management/runpwtests04.sh create mode 100755 testcases/kernel/power_management/runpwtests05.sh create mode 100755 testcases/kernel/power_management/runpwtests06.sh create mode 100755 testcases/kernel/power_management/runpwtests_exclusive01.sh create mode 100755 testcases/kernel/power_management/runpwtests_exclusive02.sh create mode 100755 testcases/kernel/power_management/runpwtests_exclusive03.sh create mode 100755 testcases/kernel/power_management/runpwtests_exclusive04.sh create mode 100755 testcases/kernel/power_management/runpwtests_exclusive05.sh diff --git a/configure.ac b/configure.ac index 794059c..0ca21a6 100644 --- a/configure.ac +++ b/configure.ac @@ -102,20 +102,6 @@ fi # Testsuites knobs -# testcases/kernel/power_management requires python. -if test "x$with_python" = xyes; then - AC_ARG_WITH([power-management-testsuite], - [AC_HELP_STRING([--with-power-management-testsuite], - [compile and install the x86 power management testsuite (default=no)])], - [with_power_management_testsuite=yes], - ) -fi -if test "x$with_power_management_testsuite" = xyes; then - AC_SUBST([WITH_POWER_MANAGEMENT_TESTSUITE],["yes"]) -else - AC_SUBST([WITH_POWER_MANAGEMENT_TESTSUITE],["no"]) -fi - AC_ARG_WITH([open-posix-testsuite], [AC_HELP_STRING([--with-open-posix-testsuite], [compile and install the open posix testsuite (default=no)])], diff --git a/include/mk/features.mk.default b/include/mk/features.mk.default index c9edc1c..69425ca 100644 --- a/include/mk/features.mk.default +++ b/include/mk/features.mk.default @@ -34,13 +34,6 @@ HAVE_SECUREBITS := no # Test suite knobs -# Enable testcases/kernel/power_management's compile and install? -ifeq ($(UCLINUX),1) -WITH_POWER_MANAGEMENT_TESTSUITE := no -else -WITH_POWER_MANAGEMENT_TESTSUITE := -endif - # Enable testcases/open_posix_testsuite's compile and install? WITH_OPEN_POSIX_TESTSUITE := no diff --git a/include/mk/features.mk.in b/include/mk/features.mk.in index 1fd28f8..49471fd 100644 --- a/include/mk/features.mk.in +++ b/include/mk/features.mk.in @@ -34,13 +34,6 @@ HAVE_SECUREBITS := @HAVE_SECUREBITS@ # Test suite knobs -# Enable testcases/kernel/power_management's compile and install? -ifeq ($(UCLINUX),1) -WITH_POWER_MANAGEMENT_TESTSUITE := no -else -WITH_POWER_MANAGEMENT_TESTSUITE := @WITH_POWER_MANAGEMENT_TESTSUITE@ -endif - # Enable testcases/open_posix_testsuite's compile and install? WITH_OPEN_POSIX_TESTSUITE := @WITH_OPEN_POSIX_TESTSUITE@ diff --git a/runtest/Makefile b/runtest/Makefile index 8702559..0907ef6 100644 --- a/runtest/Makefile +++ b/runtest/Makefile @@ -32,10 +32,6 @@ UNWANTED_FILES := Makefile CVS STAX INSTALL_MODE := 00644 -ifneq ($(WITH_POWER_MANAGEMENT_TESTSUITE),yes) -UNWANTED_FILES += power_management_tests -endif - INSTALL_TARGETS := $(filter-out $(UNWANTED_FILES),$(notdir $(patsubst $(abs_srcdir)/%,%,$(wildcard $(abs_srcdir)/*)))) MAKE_TARGETS := diff --git a/runtest/power_management_tests b/runtest/power_management_tests index 5aa18bf..884e615 100644 --- a/runtest/power_management_tests +++ b/runtest/power_management_tests @@ -1 +1,7 @@ -POWER_MANAGEMENT runpwtests.sh +#POWER_MANAGEMENT +runpwtests01 runpwtests01.sh +runpwtests02 runpwtests02.sh +runpwtests03 runpwtests03.sh +runpwtests04 runpwtests04.sh +#runpwtests05 runpwtests05.sh +runpwtests06 runpwtests06.sh diff --git a/runtest/power_management_tests_exclusive b/runtest/power_management_tests_exclusive index a1692df..26176e2 100644 --- a/runtest/power_management_tests_exclusive +++ b/runtest/power_management_tests_exclusive @@ -1 +1,12 @@ -POWER_MANAGEMENT runpwtests.sh -exclusive +#POWER_MANAGEMENT exclusive +runpwtests01 runpwtests01.sh +runpwtests02 runpwtests02.sh +runpwtests03 runpwtests03.sh +runpwtests04 runpwtests04.sh +#runpwtests05 runpwtests05.sh +runpwtests06 runpwtests06.sh +#runpwtests_exclusive01 runpwtests_exclusive01.sh +#runpwtests_exclusive02 runpwtests_exclusive02.sh +#runpwtests_exclusive03 runpwtests_exclusive03.sh +#runpwtests_exclusive04 runpwtests_exclusive04.sh +#runpwtests_exclusive05 runpwtests_exclusive05.sh diff --git a/scenario_groups/default b/scenario_groups/default index 3a55702..0c2505f 100644 --- a/scenario_groups/default +++ b/scenario_groups/default @@ -20,6 +20,7 @@ connectors admin_tools timers power_management_tests +power_management_tests_exclusive numa hugetlb commands diff --git a/testcases/kernel/Makefile b/testcases/kernel/Makefile index 50a12fa..689350b 100644 --- a/testcases/kernel/Makefile +++ b/testcases/kernel/Makefile @@ -53,11 +53,7 @@ SUBDIRS += connectors \ timers \ tracing \ module \ - -ifeq ($(WITH_POWER_MANAGEMENT_TESTSUITE),yes) -SUBDIRS += power_management -endif - + power_management endif MAKE_DEPS := include/linux_syscall_numbers.h diff --git a/testcases/kernel/power_management/Makefile b/testcases/kernel/power_management/Makefile index 24f75f8..bc189b9 100644 --- a/testcases/kernel/power_management/Makefile +++ b/testcases/kernel/power_management/Makefile @@ -13,8 +13,8 @@ ## for more details. ## ## ## ## You should have received a copy of the GNU General Public License ## -## along with this program; if not, write to the Free Software ## -## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ## +## along with this program; if not, write to the Free Software Foundation, ## +## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ## ## ## ################################################################################ @@ -22,10 +22,8 @@ top_srcdir ?= ../../.. include $(top_srcdir)/include/mk/testcases.mk -vpath %.c $(srcdir):$(top_srcdir)/lib - -INSTALL_TARGETS := lib/*.py *.py *.sh +INSTALL_TARGETS := *.py *.sh MAKE_DEPS += $(APICMDS_DIR)/tst_kvercmp -include $(top_srcdir)/include/mk/generic_leaf_target.mk +include $(top_srcdir)/include/mk/generic_trunk_target.mk diff --git a/testcases/kernel/power_management/change_freq.sh b/testcases/kernel/power_management/change_freq.sh index 204e21f..3a971d2 100755 --- a/testcases/kernel/power_management/change_freq.sh +++ b/testcases/kernel/power_management/change_freq.sh @@ -5,7 +5,7 @@ available_freq=$(get_supporting_freq) available_govr=$(get_supporting_govr) RC=0 -total_cpus=$(no_of_cpus) +total_cpus=$(tst_ncpus) (( total_cpus-=1 )) if ( echo ${available_govr} | grep -i "userspace" 2>&1 >/dev/null ) ; then diff --git a/testcases/kernel/power_management/change_govr.sh b/testcases/kernel/power_management/change_govr.sh index 4c2546e..bfe6c5b 100755 --- a/testcases/kernel/power_management/change_govr.sh +++ b/testcases/kernel/power_management/change_govr.sh @@ -3,7 +3,7 @@ . pm_include.sh available_govr=$(get_supporting_govr) -total_cpus=$(no_of_cpus) +total_cpus=$(tst_ncpus) (( total_cpus-=1 )) RC=0 diff --git a/testcases/kernel/power_management/check_cpufreq_sysfs_files.sh b/testcases/kernel/power_management/check_cpufreq_sysfs_files.sh index cb51aa0..dcf8a1d 100755 --- a/testcases/kernel/power_management/check_cpufreq_sysfs_files.sh +++ b/testcases/kernel/power_management/check_cpufreq_sysfs_files.sh @@ -2,7 +2,7 @@ . pm_include.sh -total_cpus=$(no_of_cpus) +total_cpus=$(tst_ncpus) (( total_cpus-=1 )) RC=0 diff --git a/testcases/kernel/power_management/cpu_consolidation.py b/testcases/kernel/power_management/cpu_consolidation.py index 992a745..b15bb9b 100755 --- a/testcases/kernel/power_management/cpu_consolidation.py +++ b/testcases/kernel/power_management/cpu_consolidation.py @@ -6,8 +6,6 @@ import os import sys import time -LIB_DIR = "%s/lib" % os.path.dirname(__file__) -sys.path.append(LIB_DIR) from optparse import OptionParser from sched_mc import * @@ -80,6 +78,8 @@ def main(argv=None): generate_report() status = validate_cpu_consolidation("partial", work_ld, options.mc_value, options.smt_value) + if background == "yes": + stop_wkld(work_ld) if status == 0: print "INFO: Consolidation worked sched_smt &(/) sched_mc is set" #Disable sched_smt & sched_mc interface values @@ -95,8 +95,10 @@ def main(argv=None): smt_value = 0 if work_ld == "kernbench": + trigger_kernbench (smt_value, "partial", background, pinned, "no") time.sleep(240) else: + trigger_ebizzy (smt_value, "partial", duration, background, pinned) time.sleep(120) generate_report() diff --git a/testcases/kernel/power_management/ilb_test.py b/testcases/kernel/power_management/ilb_test.py index cec0b29..ec990bc 100755 --- a/testcases/kernel/power_management/ilb_test.py +++ b/testcases/kernel/power_management/ilb_test.py @@ -5,8 +5,6 @@ import os import sys -LIB_DIR = "%s/lib" % os.path.dirname(__file__) -sys.path.append(LIB_DIR) from optparse import OptionParser from sched_mc import * diff --git a/testcases/kernel/power_management/lib/Makefile b/testcases/kernel/power_management/lib/Makefile new file mode 100644 index 0000000..cf7f079 --- /dev/null +++ b/testcases/kernel/power_management/lib/Makefile @@ -0,0 +1,25 @@ +# +# Copyright (c) 2014 Fujitsu Ltd. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +top_srcdir ?= ../../../.. + +include $(top_srcdir)/include/mk/env_pre.mk + +INSTALL_TARGETS := *.py + +include $(top_srcdir)/include/mk/generic_leaf_target.mk diff --git a/testcases/kernel/power_management/lib/sched_mc.py b/testcases/kernel/power_management/lib/sched_mc.py index cb78b55..1687f6f 100755 --- a/testcases/kernel/power_management/lib/sched_mc.py +++ b/testcases/kernel/power_management/lib/sched_mc.py @@ -319,25 +319,17 @@ def trigger_ebizzy (sched_smt, stress, duration, background, pinned): try: threads = get_job_count(stress, "ebizzy", sched_smt) olddir = os.getcwd() - path = '%s/utils/benchmark' % os.environ['LTPROOT'] + path = '%s/testcases/bin' % os.environ['LTPROOT'] os.chdir(path) - wklds_avlbl = list() - workload = "ebizzy" - workload_dir = "" - - # Use the latest version of similar workload available + workload_file = "" for file_name in os.listdir('.'): - if file_name.find(workload) != -1: - wklds_avlbl.append(file_name) - - wklds_avlbl.sort() - workload_dir = wklds_avlbl[len(wklds_avlbl)-1] - if workload_dir != "": - new_path = os.path.join(path,"%s" % workload_dir) + if file_name == "ebizzy": + workload_file = file_name + break + if workload_file != "": get_proc_data(stats_start) get_proc_loc_count(intr_start) try: - os.chdir(new_path) if background == "yes": succ = os.system('./ebizzy -t%s -s4096 -S %s >/dev/null &' % (threads, duration)) @@ -356,13 +348,16 @@ def trigger_ebizzy (sched_smt, stress, duration, background, pinned): #in background #get_proc_loc_count(intr_stop) #get_proc_data(stats_stop) - else: + else: print "INFO: ebizzy workload triggerd failed" os.chdir(olddir) sys.exit(1) except Exception, details: print "Ebizzy workload trigger failed ", details sys.exit(1) + else: + print "INFO: ebizzy benchmark not found" + sys.exit(1) except Exception, details: print "Ebizzy workload trigger failed ", details sys.exit(1) @@ -378,21 +373,18 @@ def trigger_kernbench (sched_smt, stress, background, pinned, perf_test): dst_path = "/root" olddir = os.getcwd() - path = '%s/utils/benchmark' % os.environ['LTPROOT'] + path = '%s/testcases/bin' % os.environ['LTPROOT'] os.chdir(path) - wklds_avlbl = list() + workload_file = "" for file_name in os.listdir('.'): - if file_name.find("kernbench") != -1: - wklds_avlbl.append(file_name) - if len(wklds_avlbl): - wklds_avlbl.sort() - workload_dir = wklds_avlbl[len(wklds_avlbl)-1] - if workload_dir != "": - benchmark_path = os.path.join(path,"%s" % workload_dir) - else: - print "INFO: kernbench benchmark not found" - sys.exit(1) - os.chdir(olddir) + if file_name == "kernbench": + workload_file = file_name + break + if workload_file != "": + benchmark_path = path + else: + print "INFO: kernbench benchmark not found" + sys.exit(1) os.chdir(dst_path) linux_source_dir="" @@ -405,7 +397,7 @@ def trigger_kernbench (sched_smt, stress, background, pinned, perf_test): else: print "INFO: Linux kernel source not found in /root. Workload\ Kernbench cannot be executed" - sys.exit(1) + sys.exit(1) get_proc_data(stats_start) get_proc_loc_count(intr_start) diff --git a/testcases/kernel/power_management/pm_include.sh b/testcases/kernel/power_management/pm_include.sh index b1867e6..70ea4d2 100755 --- a/testcases/kernel/power_management/pm_include.sh +++ b/testcases/kernel/power_management/pm_include.sh @@ -30,7 +30,8 @@ get_topology() { 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) + phyid[$cpu]=$(cat \ + /sys/devices/system/cpu/cpu${cpu}/topology/physical_package_id) done j=0 while [ "${j}" -lt "${total_cpus}" ] @@ -50,18 +51,22 @@ check_cpufreq() { 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" + 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 + 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 + cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_governors \ + | uniq } is_hyper_threaded() { @@ -102,7 +107,9 @@ check_input() { } is_multi_socket() { - no_of_sockets=`cat /sys/devices/system/cpu/cpu?/topology/physical_package_id | uniq | wc -l` + no_of_sockets=`cat \ + /sys/devices/system/cpu/cpu?/topology/physical_package_id \ + | uniq | wc -l` [ $no_of_sockets -gt 1 ] ; return $? } @@ -119,7 +126,8 @@ is_multi_core() { 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':'` + cpu_cores=`cat /proc/cpuinfo | grep "cpu cores" | uniq \ + | cut -f2 -d':'` if [ $siblings -eq $cpu_cores ]; then [ $cpu_cores -eq 2 ]; return $? else @@ -130,7 +138,8 @@ is_dual_core() { get_kernel_version() { # Get kernel minor version - export kernel_version=`uname -r | awk -F. '{print $1"."$2"."$3}' | cut -f1 -d'-'` + export kernel_version=`uname -r | awk -F. '{print $1"."$2"."$3}' \ + | cut -f1 -d'-'` } get_valid_input() { @@ -146,42 +155,46 @@ 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 - tst_resm TPASS "cpu consolidation failed for sched_mc=\ -$sched_mc & sched_smt=$sched_smt" + echo "${PASS}: 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" + echo "${FAIL}: 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" + 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 - 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" + 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() { @@ -195,84 +208,104 @@ analyze_package_consolidation_result() { 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 - tst_resm TPASS "cpu consolidation failed for sched_mc=\ -$sched_mc" + echo "${PASS}: cpu consolidation failed for" \ + "sched_mc=$sched_mc" else RC=1 - tst_resm TFAIL "cpu consolidation passed for sched_mc=\ -$sched_mc" - fi ;; + echo "${FAIL}: 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" + RC=1 + echo "${FAIL}: consolidation at package level" \ + "failed for sched_mc=$sched_mc" else - tst_resm TPASS "Consolidation at package level passed for \ -sched_mc=$sched_mc" + 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 - tst_resm TPASS "Consolidation at core level failed \ -when sched_smt=$sched_smt" + echo "${PASS}: consolidation at core level failed" \ + "when sched_smt=$sched_smt" else - tst_resm TFAIL "Consolidation at core level passed for \ -sched_smt=$sched_smt" + RC=1 + echo "${FAIL}: 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" + echo "${FAIL}: consolidation at core level failed for" \ + "sched_smt=$sched_smt" else - tst_resm TPASS "Consolidation at core level passed for \ -sched_smt=$sched_smt" + 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 - tst_resm TPASS "sched domain test for sched_mc=$sched_mc & sched_smt=$sched_smt" + echo "${PASS}: 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" + echo "${FAIL}: sched domain test for" \ + "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" + echo "${PASS}: sched domain test for" \ + "sched_mc=$sched_mc" else RC=1 - tst_resm TFAIL "sched domain test for sched_mc=$sched_mc" + echo "${FAIL}: 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" + echo "${PASS}: sched domain test for sched_mc=$sched_mc" else RC=1 - tst_resm TFAIL "sched domain test sched_mc=$sched_mc" + echo "${FAIL}: sched domain test for sched_mc=$sched_mc" fi fi + return $RC } diff --git a/testcases/kernel/power_management/runpwtests.sh b/testcases/kernel/power_management/runpwtests.sh deleted file mode 100755 index 9055964..0000000 --- a/testcases/kernel/power_management/runpwtests.sh +++ /dev/null @@ -1,380 +0,0 @@ -#! /bin/sh -################################################################################ -## ## -## Copyright (c) International Business Machines Corp., 2001 ## -## ## -## This program is free software; you can redistribute it and#or modify ## -## it under the terms of the GNU General Public License as published by ## -## the Free Software Foundation; either version 2 of the License, or ## -## (at your option) any later version. ## -## ## -## This program is distributed in the hope that it will be useful, but ## -## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ## -## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ## -## for more details. ## -## ## -## You should have received a copy of the GNU General Public License ## -## along with this program; if not, write to the Free Software ## -## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ## -## ## -################################################################################ -# -# File : runpwtests.sh -# -# Description: -# -# Author: Nageswara R Sastry <nasas...@in.ibm.com> -# -# History: 26 Aug 2008 - Created this file -# 03 Nov 2008 - Added CPUIDLE sysfs testcase -# - -# Exporting Required variables -export TST_TOTAL=1 -#LTPTMP=${TMP} -export PATH=${PATH}:. -export TCID="Power_Management" -export TST_COUNT=0 -export contacts="mpna...@linux.vnet.ibm.com" -export analysis="/proctstat" - -YES=0 -NO=1 -#List of reusable functions defined in pm_include.sh -. pm_include.sh - -# Function: main -# -# Description: - Execute all tests, exit with test status. -# -# Exit: - zero on success -# - non-zero on failure. -# -RC=0 #Return status - -# Checking required kernel version and architecture -tst_kvercmp 2 6 21; rc=$? -if [ $rc -ne 1 -a $rc -ne 2 ] ; then - tst_resm TCONF "Kernel version not supported; not running testcases" - exit 0 -else - case "$(uname -m)" in - i[4-6]86|x86_64) - ;; - *) - tst_resm TCONF "Arch not supported; not running testcases" - exit 0 - ;; - esac -fi - -tst_kvercmp 2 6 29; rc=$? -if [ $rc -eq 2 ] ; then - max_sched_mc=2 - max_sched_smt=2 -else - max_sched_mc=1 - max_sched_smt=1 -fi - -tst_kvercmp 2 6 31; rc=$? -if [ $rc -eq 1 -o $rc -eq 2 ] ; then - timer_migr_support_compatible=1 -else - timer_migr_support_compatible=0 -fi - -is_hyper_threaded; hyper_threaded=$? -is_multi_socket; multi_socket=$? -is_multi_core; multi_core=$? -is_dual_core; dual_core=$? - -#Checking sched_mc sysfs interface -#check_config.sh config_sched_mc || RC=$? -TST_COUNT=1 -if [ $multi_socket -eq $YES -a $multi_core -eq $YES ] ; then - if [ -f /sys/devices/system/cpu/sched_mc_power_savings ] ; then - if test_sched_mc.sh ; then - tst_resm TPASS "SCHED_MC sysfs tests" - else - RC=$? - tst_resm TFAIL "SCHED_MC sysfs tests" - fi - else - tst_resm TCONF "Required kernel configuration for SCHED_MC NOT set" - fi -else - if [ -f /sys/devices/system/cpu/sched_mc_power_savings ] ; then - tst_resm TFAIL "sched_mc_power_savings interface in system which is not a multi socket &(/) multi core" - else - tst_resm TCONF "Not a suitable architecture for SCHED_MC test" - fi -fi - -# Test sched_smt_power_savings interface on HT machines -: $(( TST_COUNT += 1 )) -if [ $hyper_threaded -eq $YES ]; then - if [ -f /sys/devices/system/cpu/sched_smt_power_savings ] ; then - if test_sched_smt.sh; then - tst_resm TPASS "SCHED_SMT sysfs test" - else - RC=$? - tst_resm TFAIL "SCHED_SMT sysfs test" - fi - else - RC=$? - tst_resm TFAIL "Required kernel configuration for SCHED_SMT NOT set" - fi -else - if [ -f /sys/devices/system/cpu/sched_smt_power_savings ] ; then - RC=$? - tst_resm TFAIL "sched_smt_power_saving interface in system not hyper-threaded" - else - tst_resm TCONF "Required Hyper Threading support for SCHED_SMT test" - fi -fi - -# Checking cpufreq sysfs interface files -#check_config.sh config_cpu_freq || RC=$? -: $(( TST_COUNT += 1 )) -if [ -d /sys/devices/system/cpu/cpu0/cpufreq ] ; then - if check_cpufreq_sysfs_files.sh; then - tst_resm TPASS "CPUFREQ sysfs tests" - else - RC=$? - tst_resm TFAIL "CPUFREQ sysfs tests " - fi - - # Changing governors - : $(( TST_COUNT += 1 )) - if change_govr.sh; then - tst_resm TPASS "Changing governors " - else - RC=$? - tst_resm TFAIL "Changing governors " - fi - - # Changing frequencies - : $(( TST_COUNT += 1 )) - if change_freq.sh ; then - tst_resm TPASS "Changing frequncies " - else - RC=$? - tst_resm TFAIL "Changing frequncies " - fi - - # Loading and Unloading governor related kernel modules - : $(( TST_COUNT += 1 )) - if pwkm_load_unload.sh ; then - tst_resm TPASS "Loading and Unloading of governor kernel \ -modules" - else - RC=$? - tst_resm TFAIL "Loading and Unloading of governor kernel \ - modules got failed" - fi -else - tst_resm TCONF "Required kernel configuration for CPU_FREQ NOT set" -fi - -# Checking cpuidle sysfs interface files -: $(( TST_COUNT+=1)) -if check_cpuidle_sysfs_files.sh ; then - tst_resm TPASS "CPUIDLE sysfs tests passed" -else - RC=$? - tst_resm TFAIL "CPUIDLE sysfs tests failed" -fi - -# sched_domain test -if ! type python > /dev/null ; then - tst_resm TCONF "Python is not installed, CPU Consolidation\ -test cannot run" -elif ! grep sched_debug -qw /proc/cmdline ; then - tst_resm TCONF "Kernel cmdline parameter 'sched_debug' needed,\ -CPU Consolidation test cannot run" -else - if [ -f /sys/devices/system/cpu/sched_mc_power_savings ] ; then - echo "max sched mc $max_sched_mc" - for sched_mc in `seq 0 $max_sched_mc`; do - : $(( TST_COUNT+=1)) - sched_domain.py -c $sched_mc; RC=$? - analyze_sched_domain_result $sched_mc $RC - if [ $hyper_threaded -eq $YES -a -f /sys/devices/system/cpu/sched_smt_power_savings ]; then - get_sched_values sched_smt; max_sched_smt=$? - for sched_smt in `seq 0 $max_sched_smt`; do - # Testcase to validate sched_domain tree - : $(( TST_COUNT+=1)) - sched_domain.py -c $sched_mc -t $sched_smt; RC=$? - analyze_sched_domain_result $sched_mc $RC $sched_smt ; - done - fi - done - fi -fi - -: $(( TST_COUNT+=1)) -if [ -f /proc/sys/kernel/timer_migration ]; then - if [ $timer_migr_support_compatible -eq $YES ]; then - if test_timer_migration.sh; then - tst_resm TPASS "Timer Migration interface test" - else - RC=$? - tst_resm TFAIL "Timer migration interface test" - fi - fi -else - if [ $timer_migr_support_compatible -eq $YES ]; then - RC=$? - tst_resm TFAIL "Timer migration interface missing" - else - tst_resm TCONF "Kernel version does not support Timer migration" - fi -fi - -if [ $# -gt 0 -a "$1" = "-exclusive" ]; then - # Test CPU consolidation - if [ $multi_socket -eq $YES -a $multi_core -eq $YES ]; then - for sched_mc in `seq 0 $max_sched_mc`; do - : $(( TST_COUNT += 1 )) - sched_mc_pass_cnt=0 - if [ $sched_mc -eq 2 ]; then - work_load="kernbench" - else - work_load="ebizzy" - fi - for repeat_test in `seq 1 10`; do - #Testcase to validate CPU consolidation for sched_mc - if cpu_consolidation.py -c $sched_mc -w $work_load ; then - : $(( sched_mc_pass_cnt += 1 )) - fi - done - analyze_package_consolidation_result $sched_mc $sched_mc_pass_cnt - - if [ $hyper_threaded -eq $YES ]; then - for sched_smt in `seq 0 $max_sched_smt`; do - : $(( TST_COUNT += 1 )) - sched_mc_smt_pass_cnt=0 - for repeat_test in `seq 1 10`; do - # Testcase to validate CPU consolidation for - # for sched_mc & sched_smt with stress=50% - if cpu_consolidation.py -c $sched_mc -t $sched_smt -w $work_load; then - : $(( sched_mc_smt_pass_cnt += 1 )) - fi - done - analyze_package_consolidation_result $sched_mc $sched_mc_smt_pass_cnt $sched_smt - done - fi - done - - fi - - if [ $hyper_threaded -eq $YES -a $multi_socket -eq $YES -a $multi_core -eq $NO ]; then - #Testcase to validate consolidation at core level - for sched_smt in `seq 0 $max_sched_smt`; do - if [ $sched_smt -eq 2 ]; then - work_load="kernbench" - else - work_load="ebizzy" - fi - sched_smt_pass_cnt=0 - : $(( TST_COUNT += 1 )) - stress="thread" - for repeat_test in `seq 1 10`; do - if cpu_consolidation.py -t $sched_smt -w $work_load -s $stress; then - : $(( sched_smt_pass_cnt += 1 )) - fi - done - analyze_core_consolidation_result $sched_smt $sched_smt_pass_cnt - done - fi - - # Verify threads consolidation stops when sched_mc &(/) sched_smt is disabled - if [ $multi_socket -eq $YES -a $multi_core -eq $YES ]; then - for sched_mc in `seq 1 $max_sched_mc`; do - : $(( TST_COUNT += 1 )) - - # Vary sched_mc from 1/2 to 0 when workload is running and ensure that - # tasks do not consolidate to single package when sched_mc is set to 0 - if cpu_consolidation.py -v -c $sched_mc; then - tst_resm TPASS "CPU consolidation test by varying sched_mc $sched_mc to 0" - else - tst_resm TFAIL "CPU consolidation test by varying sched_mc $sched_mc to 0" - fi - - if [ $hyper_threaded -eq $YES ]; then - for sched_smt in `seq 1 $max_sched_smt`; do - if [ $sched_smt -eq $sched_mc ]; then - # Vary sched_mc & sched_smt from 1 to 0 & 2 to 0 when workload is running and ensure that - # tasks do not consolidate to single package when sched_mc is set to 0 - : $(( TST_COUNT += 1 )) - if cpu_consolidation.py -v -c $sched_mc -t $sched_smt; then - tst_resm TPASS "CPU consolidation test by varying sched_mc \ -& sched_smt from $sched_mc to 0" - else - tst_resm TFAIL "CPU consolidation test by varying sched_mc \ -& sched_smt from $sched_mc to 0" - fi - fi - done - fi - done - fi - - # Verify threads consolidation stops when sched_smt is disabled in HT systems - if [ $hyper_threaded -eq $YES -a $multi_socket -eq $YES ]; then - # Vary only sched_smt from 1 to 0 when workload is running and ensure that - # tasks do not consolidate to single core when sched_smt is set to 0 - : $(( TST_COUNT += 1 )) - if cpu_consolidation.py -v -t 1; then - tst_resm TPASS "CPU consolidation test by varying sched_smt from 1 to 0" - else - tst_resm TFAIL "CPU consolidation test by varying sched_smt from 1 to 0" - fi - - # Vary only sched_smt from 2 to 0 when workload is running and ensure that - # tasks do not consolidate to single core when sched_smt is set to 0 - : $(( TST_COUNT += 1 )) - if cpu_consolidation.py -v -t 2; then - tst_resm TPASS "CPU consolidation test by varying sched_smt 2 to 0" - else - tst_resm TFAIL "CPU consolidation test by varying sched_smt 2 to 0" - fi - - fi - - # Verify ILB runs in same package as workload - if [ $multi_socket -eq $YES -a $multi_core -eq $YES ]; then - for sched_mc in `seq 1 $max_sched_mc`; do - : $(( TST_COUNT += 1 )) - if [ $sched_mc -eq 2 ]; then - work_load="kernbench" - else - work_load="ebizzy" - fi - - ilb_test.py -c $sched_mc -w $work_load; RC=$? - if [ $RC -eq 0 ]; then - tst_resm TPASS "ILB & workload in same package for sched_mc=$sched_mc" - else - tst_resm TFAIL "ILB & workload did not run in same package for sched_mc=$sched_mc\ -. Ensure CONFIG_NO_HZ is set" - fi - if [ $hyper_threaded -eq $YES ]; then - for sched_smt in `seq 1 $max_sched_smt`; do - : $(( TST_COUNT += 1 )) - ilb_test.py -c $sched_mc -t sched_smt -w $work_load; RC=$? - if [ $RC -eq 0 ]; then - tst_resm TPASS "ILB & workload in same package for sched_mc=$sched_mc \ -& sched_smt=$sched_smt" - else - tst_resm TFAIL "ILB & workload did not execute in same package for \ -sched_mc=$sched_mc & sched_smt=$sched_smt. Ensure CONFIG_NO_HZ is set" - fi - done - fi - done - fi -fi - -exit $RC diff --git a/testcases/kernel/power_management/runpwtests01.sh b/testcases/kernel/power_management/runpwtests01.sh new file mode 100755 index 0000000..0e5dd1c --- /dev/null +++ b/testcases/kernel/power_management/runpwtests01.sh @@ -0,0 +1,60 @@ +#! /bin/sh +# +# Copyright (c) International Business Machines Corp., 2001 +# Author: Nageswara R Sastry <nasas...@in.ibm.com> +# +# This program is free software; you can redistribute it and#or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +export TCID="Power_Management01" +export TST_TOTAL=1 + +. test.sh +. pm_include.sh + +# Checking required kernel version and architecture +tst_kvercmp 2 6 21; rc=$? +if [ $rc -ne 1 -a $rc -ne 2 ] ; 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 + +# Checking sched_mc sysfs interface +is_multi_socket; multi_socket=$? +is_multi_core; multi_core=$? +if [ ! -f /sys/devices/system/cpu/sched_mc_power_savings ] ; then + tst_brkm TCONF "Required kernel configuration for SCHED_MC" \ + "NOT set" +else + if [ $multi_socket -ne 0 -a $multi_core -ne 0 ] ; then + tst_brkm TCONF "sched_mc_power_savings interface in system" \ + "which is not a multi socket &(/) multi core" + fi +fi + +if test_sched_mc.sh ; then + tst_resm TPASS "SCHED_MC sysfs tests" +else + tst_resm TFAIL "SCHED_MC sysfs tests" +fi + +tst_exit diff --git a/testcases/kernel/power_management/runpwtests02.sh b/testcases/kernel/power_management/runpwtests02.sh new file mode 100755 index 0000000..84f6f98 --- /dev/null +++ b/testcases/kernel/power_management/runpwtests02.sh @@ -0,0 +1,58 @@ +#! /bin/sh +# +# Copyright (c) International Business Machines Corp., 2001 +# Author: Nageswara R Sastry <nasas...@in.ibm.com> +# +# This program is free software; you can redistribute it and#or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +export TCID="Power_Management02" +export TST_TOTAL=1 + +. test.sh +. pm_include.sh + +# Checking required kernel version and architecture +tst_kvercmp 2 6 21; rc=$? +if [ $rc -ne 1 -a $rc -ne 2 ] ; 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 sched_smt_power_savings interface on HT machines +is_hyper_threaded; hyper_threaded=$? +if [ ! -f /sys/devices/system/cpu/sched_smt_power_savings ] ; then + tst_brkm TCONF "Required kernel configuration for SCHED_SMT NOT set" +else + if [ $hyper_threaded -ne 0 ]; then + tst_brkm TCONF "sched_smt_power_saving interface in system" \ + "not hyper-threaded" + fi +fi + +if test_sched_smt.sh ; then + tst_resm TPASS "SCHED_SMT sysfs test" +else + tst_resm TFAIL "SCHED_SMT sysfs test" +fi + +tst_exit diff --git a/testcases/kernel/power_management/runpwtests03.sh b/testcases/kernel/power_management/runpwtests03.sh new file mode 100755 index 0000000..844006d --- /dev/null +++ b/testcases/kernel/power_management/runpwtests03.sh @@ -0,0 +1,75 @@ +#! /bin/sh +# +# Copyright (c) International Business Machines Corp., 2001 +# Author: Nageswara R Sastry <nasas...@in.ibm.com> +# +# This program is free software; you can redistribute it and#or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +export TCID="Power_Management03" +export TST_TOTAL=4 + +. test.sh +. pm_include.sh + +# Checking required kernel version and architecture +tst_kvercmp 2 6 21; rc=$? +if [ $rc -ne 1 -a $rc -ne 2 ] ; 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 + +# Checking cpufreq sysfs interface files +if [ ! -d /sys/devices/system/cpu/cpu0/cpufreq ] ; then + tst_brkm TCONF "Required kernel configuration for CPU_FREQ NOT set" +fi + +if check_cpufreq_sysfs_files.sh ; then + tst_resm TPASS "CPUFREQ sysfs tests" +else + tst_resm TFAIL "CPUFREQ sysfs tests" +fi + +# Changing governors +if change_govr.sh ; then + tst_resm TPASS "Changing governors" +else + tst_resm TFAIL "Changing governors" +fi + +# Changing frequencies +if change_freq.sh ; then + tst_resm TPASS "Changing frequncies" +else + tst_resm TFAIL "Changing frequncies" +fi + +# Loading and Unloading governor related kernel modules +if pwkm_load_unload.sh ; then + tst_resm TPASS "Loading and Unloading of governor kernel" \ + "modules" +else + tst_resm TFAIL "Loading and Unloading of governor kernel" \ + "modules got failed" +fi + +tst_exit diff --git a/testcases/kernel/power_management/runpwtests04.sh b/testcases/kernel/power_management/runpwtests04.sh new file mode 100755 index 0000000..5b70f39 --- /dev/null +++ b/testcases/kernel/power_management/runpwtests04.sh @@ -0,0 +1,48 @@ +#! /bin/sh +# +# Copyright (c) International Business Machines Corp., 2001 +# Author: Nageswara R Sastry <nasas...@in.ibm.com> +# +# This program is free software; you can redistribute it and#or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +export TCID="Power_Management04" +export TST_TOTAL=1 + +. test.sh +. pm_include.sh + +# Checking required kernel version and architecture +tst_kvercmp 2 6 21; rc=$? +if [ $rc -ne 1 -a $rc -ne 2 ] ; 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 + +# Checking cpuidle sysfs interface files +if check_cpuidle_sysfs_files.sh ; then + tst_resm TPASS "CPUIDLE sysfs tests passed" +else + tst_resm TFAIL "CPUIDLE sysfs tests failed" +fi + +tst_exit diff --git a/testcases/kernel/power_management/runpwtests05.sh b/testcases/kernel/power_management/runpwtests05.sh new file mode 100755 index 0000000..0867a3c --- /dev/null +++ b/testcases/kernel/power_management/runpwtests05.sh @@ -0,0 +1,93 @@ +#! /bin/sh +# +# Copyright (c) International Business Machines Corp., 2001 +# Author: Nageswara R Sastry <nasas...@in.ibm.com> +# +# This program is free software; you can redistribute it and#or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +export TCID="Power_Management05" +export TST_TOTAL=2 + +. test.sh +. pm_include.sh + +# Checking required kernel version and architecture +tst_kvercmp 2 6 21; rc=$? +if [ $rc -ne 1 -a $rc -ne 2 ] ; 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 + +tst_kvercmp 2 6 29; rc=$? +if [ $rc -eq 2 ] ; then + max_sched_mc=2 + max_sched_smt=2 +else + max_sched_mc=1 + max_sched_smt=1 +fi + +tst_check_cmds python + +if ! grep sched_debug -qw /proc/cmdline ; then + tst_brkm TCONF "Kernel cmdline parameter 'sched_debug' needed," \ + "CPU Consolidation test cannot run" +fi + +is_hyper_threaded; hyper_threaded=$? +if [ ! -f /sys/devices/system/cpu/sched_mc_power_savings \ + -o $hyper_threaded -ne 0 ] ; then + tst_brkm TCONF "Required kernel configuration for SCHED_MC" \ + "NOT set, or sched_mc_power_savings interface in system" \ + "which is not hyper-threaded" +fi + +# sched_domain test +echo "max sched mc $max_sched_mc" +RC=0 +for sched_mc in `seq 0 $max_sched_mc`; do + sched_domain.py -c $sched_mc; ret=$? + analyze_sched_domain_result $sched_mc $ret; RC=$? +done +if [ $RC -eq 0 ]; then + tst_resm TPASS "Sched_domain test for sched_mc" +else + tst_resm TFAIL "Sched_domain test for sched_mc" +fi + +# Testcase to validate sched_domain tree +RC=0 +for sched_mc in `seq 0 $max_sched_mc`; do + get_sched_values sched_smt; max_sched_smt=$? + for sched_smt in `seq 0 $max_sched_smt`; do + sched_domain.py -c $sched_mc -t $sched_smt; ret=$? + analyze_sched_domain_result $sched_mc $ret $sched_smt; RC=$? + done +done +if [ $RC -eq 0 ]; then + tst_resm TPASS "Sched_domain test for sched_mc & sched_smt" +else + tst_resm TFAIL "Sched_domain test for sched_mc & sched_smt" +fi + +tst_exit diff --git a/testcases/kernel/power_management/runpwtests06.sh b/testcases/kernel/power_management/runpwtests06.sh new file mode 100755 index 0000000..384362f --- /dev/null +++ b/testcases/kernel/power_management/runpwtests06.sh @@ -0,0 +1,62 @@ +#! /bin/sh +# +# Copyright (c) International Business Machines Corp., 2001 +# Author: Nageswara R Sastry <nasas...@in.ibm.com> +# +# This program is free software; you can redistribute it and#or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +export TCID="Power_Management06" +export TST_TOTAL=1 + +. test.sh +. pm_include.sh + +# Checking required kernel version and architecture +tst_kvercmp 2 6 21; rc=$? +if [ $rc -ne 1 -a $rc -ne 2 ] ; 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 + +tst_kvercmp 2 6 31; rc=$? +if [ $rc -eq 1 -o $rc -eq 2 ] ; then + timer_migr_support_compatible=0 +else + timer_migr_support_compatible=1 +fi + +if [ $timer_migr_support_compatible -eq 1 ]; then + tst_brkm TCONF "Kernel version does not support Timer migration" +else + if [ ! -f /proc/sys/kernel/timer_migration ]; then + tst_brkm TBROK "Timer migration interface missing" + fi +fi + +if test_timer_migration.sh; then + tst_resm TPASS "Timer Migration interface test" +else + tst_resm TFAIL "Timer migration interface test" +fi + +tst_exit diff --git a/testcases/kernel/power_management/runpwtests_exclusive01.sh b/testcases/kernel/power_management/runpwtests_exclusive01.sh new file mode 100755 index 0000000..02b974f --- /dev/null +++ b/testcases/kernel/power_management/runpwtests_exclusive01.sh @@ -0,0 +1,112 @@ +#! /bin/sh +# +# Copyright (c) International Business Machines Corp., 2001 +# Author: Nageswara R Sastry <nasas...@in.ibm.com> +# +# This program is free software; you can redistribute it and#or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +export TCID="Power_Management_exclusive01" +export TST_TOTAL=2 + +. test.sh +. pm_include.sh + +# Checking required kernel version and architecture +tst_kvercmp 2 6 21; rc=$? +if [ $rc -ne 1 -a $rc -ne 2 ] ; 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 + +tst_kvercmp 2 6 29; rc=$? +if [ $rc -eq 2 ] ; then + max_sched_mc=2 + max_sched_smt=2 +else + max_sched_mc=1 + max_sched_smt=1 +fi + +is_hyper_threaded; hyper_threaded=$? +is_multi_socket; multi_socket=$? +is_multi_core; multi_core=$? +if [ $multi_socket -ne 0 -o $multi_core -ne 0 -o \ + $hyper_threaded -ne 0 ]; then + tst_brkm TCONF "System is not a multi socket & multi core" \ + "& hyper-threaded" +fi + +# Test CPU consolidation +RC=0 +for sched_mc in `seq 0 $max_sched_mc`; do + sched_mc_pass_cnt=0 + if [ $sched_mc -eq 2 ]; then + work_load="kernbench" + else + work_load="ebizzy" + fi + for repeat_test in `seq 1 10`; do + #Testcase to validate CPU consolidation for sched_mc + if cpu_consolidation.py -c $sched_mc -w $work_load ; then + : $(( sched_mc_pass_cnt += 1 )) + fi + done + analyze_package_consolidation_result $sched_mc \ + $sched_mc_pass_cnt; RC=$? +done +if [ $RC -eq 0 ]; then + tst_resm TPASS "CPU consolidation test for sched_mc" +else + tst_resm TFAIL "CPU consolidation test for sched_mc" +fi + +RC=0 +for sched_mc in `seq 0 $max_sched_mc`; do + if [ $sched_mc -eq 2 ]; then + work_load="kernbench" + else + work_load="ebizzy" + fi + for sched_smt in `seq 0 $max_sched_smt`; do + sched_mc_smt_pass_cnt=0 + for repeat_test in `seq 1 10`; do + # Testcase to validate CPU consolidation for + # for sched_mc & sched_smt with stress=50% + if cpu_consolidation.py -c $sched_mc -t $sched_smt \ + -w $work_load ; then + : $(( sched_mc_smt_pass_cnt += 1 )) + fi + done + analyze_package_consolidation_result $sched_mc \ + $sched_mc_smt_pass_cnt $sched_smt; RC=$? + done +done +if [ $RC -eq 0 ]; then + tst_resm TPASS "CPU consolidation test for sched_mc &" \ + "sched_smt with stress=50%" +else + tst_resm TFAIL "CPU consolidation test for sched_mc &" \ + "sched_smt with stress=50%" +fi + +tst_exit diff --git a/testcases/kernel/power_management/runpwtests_exclusive02.sh b/testcases/kernel/power_management/runpwtests_exclusive02.sh new file mode 100755 index 0000000..61f10e1 --- /dev/null +++ b/testcases/kernel/power_management/runpwtests_exclusive02.sh @@ -0,0 +1,82 @@ +#! /bin/sh +# +# Copyright (c) International Business Machines Corp., 2001 +# Author: Nageswara R Sastry <nasas...@in.ibm.com> +# +# This program is free software; you can redistribute it and#or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +export TCID="Power_Management_exclusive02" +export TST_TOTAL=1 + +. test.sh +. pm_include.sh + +# Checking required kernel version and architecture +tst_kvercmp 2 6 21; rc=$? +if [ $rc -ne 1 -a $rc -ne 2 ] ; 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 + +tst_kvercmp 2 6 29; rc=$? +if [ $rc -eq 2 ] ; then + max_sched_smt=2 +else + max_sched_smt=1 +fi + +is_hyper_threaded; hyper_threaded=$? +is_multi_socket; multi_socket=$? +is_multi_core; multi_core=$? +if [ $hyper_threaded -ne 0 -o $multi_socket -ne 0 \ + -o $multi_core -eq 0 ]; then + tst_brkm TCONF "System is a multi core but not multi" \ + "socket & hyper-threaded" +fi + +#Testcase to validate consolidation at core level +RC=0 +for sched_smt in `seq 0 $max_sched_smt`; do + if [ $sched_smt -eq 2 ]; then + work_load="kernbench" + else + work_load="ebizzy" + fi + sched_smt_pass_cnt=0 + stress="thread" + for repeat_test in `seq 1 10`; do + if cpu_consolidation.py -t $sched_smt -w $work_load \ + -s $stress; then + : $(( sched_smt_pass_cnt += 1 )) + fi + done + analyze_core_consolidation_result $sched_smt \ + $sched_smt_pass_cnt; RC=$? +done +if [ $RC -eq 0 ]; then + tst_resm TPASS "Consolidation test at core level for sched_smt" +else + tst_resm TFAIL "Consolidation test at core level for sched_smt" +fi + +tst_exit diff --git a/testcases/kernel/power_management/runpwtests_exclusive03.sh b/testcases/kernel/power_management/runpwtests_exclusive03.sh new file mode 100755 index 0000000..c85312b --- /dev/null +++ b/testcases/kernel/power_management/runpwtests_exclusive03.sh @@ -0,0 +1,110 @@ +#! /bin/sh +# +# Copyright (c) International Business Machines Corp., 2001 +# Author: Nageswara R Sastry <nasas...@in.ibm.com> +# +# This program is free software; you can redistribute it and#or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +export TCID="Power_Management_exclusive03" +export TST_TOTAL=2 + +. test.sh +. pm_include.sh + +# Checking required kernel version and architecture +tst_kvercmp 2 6 21; rc=$? +if [ $rc -ne 1 -a $rc -ne 2 ] ; 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 + +tst_kvercmp 2 6 29; rc=$? +if [ $rc -eq 2 ] ; then + max_sched_mc=2 + max_sched_smt=2 +else + max_sched_mc=1 + max_sched_smt=1 +fi + +is_hyper_threaded; hyper_threaded=$? +is_multi_socket; multi_socket=$? +is_multi_core; multi_core=$? +if [ $multi_socket -ne 0 -o $multi_core -ne 0 -o \ + $hyper_threaded -ne 0 ]; then + tst_brkm TCONF "System is not a multi socket & multi core" \ + "& hyper-threaded" +fi + +# Verify threads consolidation stops when sched_mc &(/) sched_smt +# is disabled. +# Vary sched_mc from 1/2 to 0 when workload is running and +# ensure that tasks do not consolidate to single package when +# sched_mc is set to 0. +RC=0 +for sched_mc in `seq 1 $max_sched_mc`; do + if cpu_consolidation.py -v -c $sched_mc; then + echo "Test PASS: CPU consolidation test by varying" \ + "sched_mc $sched_mc to 0" + else + RC=1 + echo "Test FAIL: CPU consolidation test by varying" \ + "sched_mc $sched_mc to 0" + fi +done +if [ $RC -eq 0 ]; then + tst_resm TPASS "CPU consolidation test by varying sched_mc" +else + tst_resm TFAIL "CPU consolidation test by varying sched_mc" +fi + +# Vary sched_mc & sched_smt from 1 to 0 & 2 to 0 when workload +# is running and ensure that tasks do not consolidate to single +# package when sched_mc is set to 0. +RC=0 +for sched_mc in `seq 1 $max_sched_mc`; do + for sched_smt in `seq 1 $max_sched_smt`; do + if [ $sched_smt -eq $sched_mc ]; then + if cpu_consolidation.py -v -c $sched_mc \ + -t $sched_smt; then + echo "Test PASS: CPU consolidation test by" \ + "varying sched_mc & sched_smt from" \ + "$sched_mc to 0" + else + RC=1 + echo "Test FAIL: CPU consolidation test by" \ + "varying sched_mc & sched_smt from" \ + "$sched_mc to 0" + fi + fi + done +done +if [ $RC -eq 0 ]; then + tst_resm TPASS "CPU consolidation test by varying" \ + "sched_mc & sched_smt" +else + tst_resm TFAIL "CPU consolidation test by varying" \ + "sched_mc & sched_smt" +fi + +tst_exit diff --git a/testcases/kernel/power_management/runpwtests_exclusive04.sh b/testcases/kernel/power_management/runpwtests_exclusive04.sh new file mode 100755 index 0000000..6bb27f8 --- /dev/null +++ b/testcases/kernel/power_management/runpwtests_exclusive04.sh @@ -0,0 +1,67 @@ +#! /bin/sh +# +# Copyright (c) International Business Machines Corp., 2001 +# Author: Nageswara R Sastry <nasas...@in.ibm.com> +# +# This program is free software; you can redistribute it and#or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +export TCID="Power_Management_exclusive04" +export TST_TOTAL=2 + +. test.sh +. pm_include.sh + +# Checking required kernel version and architecture +tst_kvercmp 2 6 21; rc=$? +if [ $rc -ne 1 -a $rc -ne 2 ] ; 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 + +is_hyper_threaded; hyper_threaded=$? +is_multi_socket; multi_socket=$? +if [ $hyper_threaded -ne 0 -o $multi_socket -ne 0 ]; then + tst_brkm TCONF "System is not a multi socket & hyper-threaded" +fi + +# Verify threads consolidation stops when sched_smt is +# disabled in HT systems. +# Vary only sched_smt from 1 to 0 when workload is running +# and ensure that tasks do not consolidate to single core +# when sched_smt is set to 0. +if cpu_consolidation.py -v -t 1; then + tst_resm TPASS "CPU consolidation test by varying sched_smt from 1 to 0" +else + tst_resm TFAIL "CPU consolidation test by varying sched_smt from 1 to 0" +fi + +# Vary only sched_smt from 2 to 0 when workload is running +# and ensure that tasks do not consolidate to single core +# when sched_smt is set to 0. +if cpu_consolidation.py -v -t 2; then + tst_resm TPASS "CPU consolidation test by varying sched_smt from 2 to 0" +else + tst_resm TFAIL "CPU consolidation test by varying sched_smt from 2 to 0" +fi + +tst_exit diff --git a/testcases/kernel/power_management/runpwtests_exclusive05.sh b/testcases/kernel/power_management/runpwtests_exclusive05.sh new file mode 100755 index 0000000..f916c92 --- /dev/null +++ b/testcases/kernel/power_management/runpwtests_exclusive05.sh @@ -0,0 +1,112 @@ +#! /bin/sh +# +# Copyright (c) International Business Machines Corp., 2001 +# Author: Nageswara R Sastry <nasas...@in.ibm.com> +# +# This program is free software; you can redistribute it and#or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +export TCID="Power_Management_exclusive05" +export TST_TOTAL=2 + +. test.sh +. pm_include.sh + +# Checking required kernel version and architecture +tst_kvercmp 2 6 21; rc=$? +if [ $rc -ne 1 -a $rc -ne 2 ] ; 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 + +tst_kvercmp 2 6 29; rc=$? +if [ $rc -eq 2 ] ; then + max_sched_mc=2 + max_sched_smt=2 +else + max_sched_mc=1 + max_sched_smt=1 +fi + +is_hyper_threaded; hyper_threaded=$? +is_multi_socket; multi_socket=$? +is_multi_core; multi_core=$? +if [ $multi_socket -ne 0 -o $multi_core -ne 0 -o \ + $hyper_threaded -ne 0 ]; then + tst_brkm TCONF "System is not a multi socket & multi core" \ + "& hyper-threaded" +fi + +# Verify ILB runs in same package as workload. +RC=0 +for sched_mc in `seq 1 $max_sched_mc`; do + if [ $sched_mc -eq 2 ]; then + work_load="kernbench" + else + work_load="ebizzy" + fi + + ilb_test.py -c $sched_mc -w $work_load + if [ $? -eq 0 ]; then + echo "Test PASS: ILB & workload in same package for" \ + "sched_mc=$sched_mc" + else + RC=1 + echo "Test FAIL: ILB & workload did not run in same package" \ + "for sched_mc=$sched_mc. Ensure CONFIG_NO_HZ is set" + fi +done +if [ $RC -eq 0 ]; then + tst_resm TPASS "ILB & workload test in same package for sched_mc" +else + tst_resm TFAIL "ILB & workload test in same package for sched_mc" +fi + +RC=0 +for sched_mc in `seq 1 $max_sched_mc`; do + if [ $sched_mc -eq 2 ]; then + work_load="kernbench" + else + work_load="ebizzy" + fi + for sched_smt in `seq 1 $max_sched_smt`; do + ilb_test.py -c $sched_mc -t sched_smt -w $work_load + if [ $? -eq 0 ]; then + echo "Test PASS: ILB & workload in same package for" \ + "sched_mc=$sched_mc & sched_smt=$sched_smt" + else + RC=1 + echo "Test FAIL: ILB & workload did not execute in" \ + "same package for sched_mc=$sched_mc &" \ + "sched_smt=$sched_smt. Ensure CONFIG_NO_HZ is set" + fi + done +done +if [ $RC -eq 0 ]; then + tst_resm TPASS "ILB & workload test in same package for" \ + "sched_mc & sched_smt" +else + tst_resm TFAIL "ILB & workload test in same package for" \ + "sched_mc & sched_smt" +fi + +tst_exit diff --git a/testcases/kernel/power_management/sched_domain.py b/testcases/kernel/power_management/sched_domain.py index 3d19ac0..1ff38b1 100755 --- a/testcases/kernel/power_management/sched_domain.py +++ b/testcases/kernel/power_management/sched_domain.py @@ -5,8 +5,6 @@ import os import sys -LIB_DIR = "%s/lib" % os.path.dirname(__file__) -sys.path.append(LIB_DIR) from sched_mc import * from optparse import OptionParser -- 1.9.3 ------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list