Signed-off-by: Daniel Lezcano daniel.lezcano@linaro.org --- cpufreq/test_06.sh | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 117 insertions(+), 0 deletions(-) create mode 100644 cpufreq/test_06.sh
diff --git a/cpufreq/test_06.sh b/cpufreq/test_06.sh new file mode 100644 index 0000000..5e8256d --- /dev/null +++ b/cpufreq/test_06.sh @@ -0,0 +1,117 @@ +#!/bin/bash +# +# PM-QA validation test suite for the power management on ARM +# +# Copyright (C) 2011, Linaro Limited. +# +# 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. +# +# Contributors: +# Daniel Lezcano daniel.lezcano@linaro.org (IBM Corporation) +# - initial API and implementation +# + +# URL : https://wiki.linaro.org/WorkingGroups/PowerManagement/Doc/QA/Scripts#test_06 + +source ../include/functions.sh + +CPUCYCLE=../utils/cpucycle + +compute_freq_ratio() { + + local cpu=$1 + local freq=$2 + + set_frequency $cpu $freq + + result=$($CPUCYCLE $cpu) + if [ $? != 0 ]; then + return 1 + fi + + results[$index]=$(echo "scale=3;($result / $freq)" | bc -l) + index=$((index + 1)) +} + +compute_freq_ratio_sum() { + + res=${results[$index]} + sum=$(echo "($sum + $res)" | bc -l) + index=$((index + 1)) + +} + +__check_freq_deviation() { + + res=${results[$index]} + + # compute deviation + dev=$(echo "scale=3;((( $res - $avg ) / $avg) * 100 )" | bc -l) + + # change to absolute + dev=$(echo $dev | awk '{ print ($1 >= 0) ? $1 : 0 - $1}') + + index=$((index + 1)) + + res=$(echo "($dev > 5.0)" | bc -l) + if [ "$res" = "1" ]; then + return 1 + fi + + return 0 +} + +check_freq_deviation() { + + local cpu=$1 + local freq=$2 + + check "deviation for frequency $(frequnit $freq)" __check_freq_deviation + +} + +check_deviation() { + + local cpu=$1 + + set_governor $cpu userspace + + for_each_frequency $cpu compute_freq_ratio + + index=0 + sum=0 + + for_each_frequency $cpu compute_freq_ratio_sum + + avg=$(echo "scale=3;($sum / $index)" | bc -l) + + index=0 + for_each_frequency $cpu check_freq_deviation +} + +if [ $(id -u) != 0 ]; then + log_skip "run as non-root" + exit 0 +fi + +save_governors +save_frequencies + +trap "restore_frequencies; restore_governors; sigtrap" SIGHUP SIGINT SIGTERM + +for_each_cpu check_deviation + +restore_frequencies +restore_governors