From: Subrata <sub...@us...> - 2008-10-23 13:31:47
|
Update of /cvsroot/ltp/ltp/testcases/kernel/power_management In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv29010/ltp/testcases/kernel/power_management Added Files: Makefile README change_freq.sh change_govr.sh check_config.sh check_cpufreq_sysfs_files.sh check_kv_arch.c config_cpu_freq config_cpu_idle config_sched_mc pm_include.sh pwkm_load_unload.sh runpwtests.sh test_sched_mc.sh Log Message: Addition of Initial Set of POWER MANAGEMENT Testcases to LTP. Signed-Off-By: Nageswara R Sastry <rns...@li...>. --- NEW FILE: config_sched_mc --- CONFIG_SCHED_MC --- NEW FILE: change_govr.sh --- #!/bin/bash . pm_include.sh available_govr=$(get_supporting_govr) total_cpus=$(no_of_cpus) (( total_cpus-=1 )) RC=0 for cpu in $(seq 0 "${total_cpus}" ) do for govr in ${available_govr} do echo ${govr} > /sys/devices/system/cpu/cpu${cpu}/cpufreq/scaling_governor if [ "$?" -ne "0" ] ; then echo "${0}: FAIL: Unable to set governor -- ${govr} for cpu${cpu}" RC=1 fi done done if [ ${RC} -eq 0 ] ; then echo "${0}: PASS: Changing cpu governors" fi #return $RC --- NEW FILE: test_sched_mc.sh --- #!/bin/bash . pm_include.sh valid_input="0 1" invalid_input="a 2 abcefg x1999 xffff -1 -00000 200000000000000000000000000000000000000000000000000000000000000000000000000000 ox324 -0xfffffffffffffffffffff" test_file="/sys/devices/system/cpu/sched_mc_power_savings" if [ ! -f ${test_file} ] ; then echo "MISSING_FILE: missing file ${test_file}" exit $MISSING_FILE fi function check_input() { validity_check=${2:-valid} 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 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 } RC=0 echo "${0}: ---Valid test cases---" check_input "${valid_input}" echo "${0}: ---Invalid test cases---" check_input "${invalid_input}" invalid #return $RC --- NEW FILE: check_cpufreq_sysfs_files.sh --- #!/bin/bash . pm_include.sh total_cpus=$(no_of_cpus) (( total_cpus-=1 )) RC=0 for cpu in $(seq 0 "${total_cpus}" ) do cpufiles=$(find /sys/devices/system/cpu/cpu"${cpu}"/cpufreq/ -name "*" -type f) for files in ${cpufiles} do cat ${files} 2>&1 >/dev/null if [ $? -ne 0 ] ; then echo "${0}: FAIL: cat ${files}" RC=1 fi done done if [ ${RC} -eq 0 ] ; then echo "${0}: PASS: Checking cpu freq sysfs files" fi #return $RC --- NEW FILE: pwkm_load_unload.sh --- #!/bin/bash #Loading modules for module in cpufreq_conservative cpufreq_powersave cpufreq_userspace do #echo -n "Loading $module ... " modprobe $module >/dev/null if [ $? -ne 0 ] ; then echo "${0}: FAIL: Loading of module $module or check whether you compiled as module or not" fi done for module in cpufreq_conservative cpufreq_powersave cpufreq_userspace do #echo -n "Unloading $module ... " modprobe -r $module >/dev/null if [ $? -ne 0 ] ; then echo "${0}: FAIL: Loading of module $module or check whether you compiled as module or not" fi done --- NEW FILE: runpwtests.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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## ## ## ################################################################################ # # File : test_powermanagement.sh # # Description: # # Author: Nageswara R Sastry <nas...@in...> # # History: 26 Aug 2008 - Created this file # #! /bin/sh # Exporting Required variables export TST_TOTAL=1 LTPTMP=${TMP} LTPROOT=../../bin export PATH=${PATH}:. export TCID="Power Management" export TST_COUNT=0 # 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 check_kv_arch || RC=$? if [ $RC -eq 1 ] ; then tst_resm TCONF "Kernel version or Architecture not supported: Not running testcases" exit 0 fi # Checking sched_mc sysfs interface #check_config.sh config_sched_mc || RC=$? if [ -f /sys/devices/system/cpu/sched_mc_power_savings ] ; then test_sched_mc.sh || RC=$? if [ $RC -eq 1 ] ; then tst_resm TFAIL "SCHED_MC sysfs tests failed" fi else tst_resm TCONF "Required kernel configuration for SCHED_MC NOT set" exit 0 fi # Checking cpufreq sysfs interface files #check_config.sh config_cpu_freq || RC=$? if [ -d /sys/devices/system/cpu/cpu0/cpufreq ] ; then check_cpufreq_sysfs_files.sh || RC=$? if [ $RC -eq 1 ] ; then tst_resm TFAIL "CPUFREQ sysfs tests failed" fi # Changing governors change_govr.sh || RC=$? if [ $RC -eq 1 ] ; then tst_resm TFAIL "Changing governors failed" fi # Changing frequencies change_freq.sh || RC=$? if [ $RC -eq 1 ] ; then tst_resm TFAIL "Changing frequncies failed" fi # Loading and Unloading governor related kernel modules pwkm_load_unload.sh || RC=$? if [ $RC -eq 1 ] ; then 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" exit 0 fi --- NEW FILE: Makefile --- ################################################################################ ## ## ## Copyright (c) International Business Machines Corp., 2008 ## ## ## ## 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## ## ## ################################################################################ all: @set -e; $(MAKE) check_kv_arch ; check_kv_arch: check_kv_arch.c $(CC) -o $@ $< ../../../lib/tst_kvercmp.c -I../../../include install: @set -e; ln -f check_kv_arch ../../bin/check_kv_arch; \ ln -f change_freq.sh ../../bin/change_freq.sh; \ ln -f change_govr.sh ../../bin/change_govr.sh; \ ln -f check_cpufreq_sysfs_files.sh ../../bin/check_cpufreq_sysfs_files.sh; \ ln -f check_config.sh ../../bin/check_config.sh; \ ln -f pwkm_load_unload.sh ../../bin/pwkm_load_unload.sh; \ ln -f pm_include.sh ../../bin/pm_include.sh; \ ln -f runpwtests.sh ../../bin/runpwtests.sh; \ ln -f test_sched_mc.sh ../../bin/test_sched_mc.sh; \ ln -f config_cpu_freq ../../bin/config_cpu_freq; \ ln -f config_cpu_idle ../../bin/config_cpu_idle; \ ln -f config_sched_mc ../../bin/config_sched_mc; clean: rm -f check_kv_arch --- NEW FILE: check_kv_arch.c --- /************************************************************************ * Copyright (c) International Business Machines Corp., 2008 * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***************************************************************************/ #include <stdio.h> #include <test.h> int kernel_is_too_old(void) { if (tst_kvercmp(2,6,21) < 0) return 1; return 0; } /* * yeah, to make the makefile coding easier, do_check returns * 1 if unshare is not supported, 0 if it is */ #ifdef __i386__ int do_check(void) { return kernel_is_too_old(); } #elif __x86_64__ int do_check(void) { return kernel_is_too_old(); } #else int do_check(void) { return 1; } #endif int main() { return do_check(); } --- NEW FILE: config_cpu_freq --- CONFIG_CPU_FREQ CONFIG_CPU_FREQ_TABLE CONFIG_CPU_FREQ_DEBUG CONFIG_CPU_FREQ_STAT CONFIG_CPU_FREQ_STAT_DETAILS CONFIG_CPU_FREQ_DEFAULT_GOV_* CONFIG_CPU_FREQ_GOV_* --- NEW FILE: README --- ################################################################################ ## ## ## Copyright (c) International Business Machines Corp., 2007 ## ## ## ## 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## ## ## ################################################################################ POWER MANAGEMENT TESTS AUTOMATION SUITE ---------------------------------------- The tests requires the Kernel to be compiled with the following config's for CPU FREQUENCY tests: CONFIG_CPU_FREQ CONFIG_CPU_FREQ_TABLE CONFIG_CPU_FREQ_DEBUG CONFIG_CPU_FREQ_STAT CONFIG_CPU_FREQ_STAT_DETAILS CONFIG_CPU_FREQ_DEFAULT_GOV_* CONFIG_CPU_FREQ_GOV_* for CPU IDLE tests: CONFIG_CPU_IDLE CONFIG_CPU_IDLE_GOV_LADDER CONFIG_CPU_IDLE_GOV_MENU for SCHED_MC tests: CONFIG_SCHED_MC The power management test automation suite helps run the power management functionality (e.g: cpu frequency, cpu idle etc..) tests and report results. Test Scripts for CPU FREQUENCY: change_freq.sh change_govr.sh check_cpufreq_sysfs_files.sh Test Scripts for CPU IDLE: will be added soon Test Scripts for SCHED_MC: test_sched_mc.sh Common functionality: pm_include.sh check_kv_arch.c pwkm_load_unload.sh To run your tests you can execute the runpwtests.sh To run the tests individually : P.S. As of now the supporting architecture(s) are x86,x86_64 Support of system: ----------------- If you see some thing like following, Power Management 1 FAIL : Required kernel configuration for SCHED_MC NOT set or Power Management 1 FAIL : Required kernel configuration for CPU_FREQ NOT set Then either configuration is not set or the system won't support. --- NEW FILE: config_cpu_idle --- CONFIG_CPU_IDLE CONFIG_CPU_IDLE_GOV_LADDER CONFIG_CPU_IDLE_GOV_MENU --- NEW FILE: pm_include.sh --- #!/bin/bash TMPDIR=/tmp PASS=0 FAIL=1 NOSUPPORT=2 MISSING_FILE=3 UNTESTED=4 function cleanup() { if [ -f ${1} ] ; then rm -f ${1} fi } function check_config_options() { if ( ! ${3} "${1}" ${2} | grep -v "#" > /dev/null ) ; then echo "NOSUPPORT: current system dosen't support ${1}" fi } function no_of_cpus() { echo $(cat /proc/cpuinfo | grep processor | wc -l) } function 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 } function 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 } function get_supporting_freq() { cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies | uniq } function get_supporting_govr() { cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_governors | uniq } --- NEW FILE: change_freq.sh --- #!/bin/bash . pm_include.sh available_freq=$(get_supporting_freq) available_govr=$(get_supporting_govr) RC=0 total_cpus=$(no_of_cpus) (( total_cpus-=1 )) if ( echo ${available_govr} | grep -i "userspace" 2>&1 >/dev/null ) ; then for cpu in $(seq 0 "${total_cpus}" ) do echo userspace > /sys/devices/system/cpu/cpu${cpu}/cpufreq/scaling_governor if [ $? -ne 0 ] ; then RC=1 fi done if [ ${RC} -ne 1 ] ; then for cpu in $(seq 0 "${total_cpus}" ) do for freq in ${available_freq} do echo ${freq} > /sys/devices/system/cpu/cpu${cpu}/cpufreq/scaling_setspeed if [ "$?" -ne "0" ] ; then echo "${0}: FAIL: Unable to set frequency -- ${freq} for cpu${cpu}" RC=1 fi done done fi fi if [ ${RC} -eq 0 ] ; then echo "${0}: PASS: Changing cpu frequencies" fi #return $RC --- NEW FILE: check_config.sh --- #!/bin/bash . pm_include.sh if [ $# -lt 1 ] ; then echo "Usage: ${0} <filename>" RC=1 return ${RC} fi filename=${1} RC=0 grep_command=grep config_file=/boot/config-$(uname -r) if [ ! -f ${config_file} ]; then echo "MISSING_FILE: can't find the required config file at /boot/config-$(uname -r)" echo "Trying for alternate file at /proc/config.gz" config_file=/proc/config.gz fi if [ ! -f ${config_file} ]; then echo "MISSING_FILE: can't find the required config file at /proc/config.gz" RC=1 fi if [ "${config_file}" = "/proc/config.gz" ] ; then grep_command=zgrep fi while read config_option do check_config_options "${config_option}=*" ${config_file} ${grep_command} done < ${filename} #return ${RC} |