2017-01-13 12:06:45 +05:30
#!/bin/bash
#
# Test governors
# protect against multiple inclusion
if [ $FILE_GOVERNOR ] ; then
return 0
else
FILE_GOVERNOR = DONE
fi
source cpu.sh
source cpufreq.sh
CUR_GOV =
CUR_FREQ =
# Find governor's directory path
# $1: policy, $2: governor
find_gov_directory( )
{
if [ -d $CPUFREQROOT /$2 ] ; then
printf " $CPUFREQROOT / $2 \n "
elif [ -d $CPUFREQROOT /$1 /$2 ] ; then
printf " $CPUFREQROOT / $1 / $2 \n "
else
printf "INVALID\n"
fi
}
# $1: policy
find_current_governor( )
{
cat $CPUFREQROOT /$1 /scaling_governor
}
# $1: policy
backup_governor( )
{
CUR_GOV = $( find_current_governor $1 )
printf " Governor backup done for $1 : $CUR_GOV \n "
if [ $CUR_GOV = = "userspace" ] ; then
CUR_FREQ = $( find_current_freq $1 )
printf " Governor frequency backup done for $1 : $CUR_FREQ \n "
fi
printf "\n"
}
# $1: policy
restore_governor( )
{
__switch_governor $1 $CUR_GOV
printf " Governor restored for $1 to $CUR_GOV \n "
if [ $CUR_GOV = = "userspace" ] ; then
set_cpu_frequency $1 $CUR_FREQ
printf " Governor frequency restored for $1 : $CUR_FREQ \n "
fi
printf "\n"
}
# param:
# $1: policy, $2: governor
__switch_governor( )
{
echo $2 > $CPUFREQROOT /$1 /scaling_governor
}
2017-01-13 12:06:48 +05:30
# param:
# $1: cpu, $2: governor
__switch_governor_for_cpu( )
{
echo $2 > $CPUROOT /$1 /cpufreq/scaling_governor
}
2017-01-13 12:06:45 +05:30
# SWITCH GOVERNORS
# $1: cpu, $2: governor
switch_governor( )
{
local filepath = $CPUFREQROOT /$1 /scaling_available_governors
# check if governor is available
local found = $( cat $filepath | grep $2 | wc -l)
if [ $found = 0 ] ; then
echo 1;
return
fi
__switch_governor $1 $2
echo 0;
}
# $1: policy, $2: governor
switch_show_governor( )
{
cur_gov = find_current_governor
if [ $cur_gov = = "userspace" ] ; then
cur_freq = find_current_freq
fi
# switch governor
__switch_governor $1 $2
printf " \nSwitched governor for $1 to $2 \n\n "
if [ $2 = = "userspace" -o $2 = = "powersave" -o $2 = = "performance" ] ; then
printf " No files to read for $2 governor\n\n "
return
fi
# show governor files
local govpath = $( find_gov_directory $1 $2 )
read_cpufreq_files_in_dir $govpath
}
# $1: function to be called, $2: policy
call_for_each_governor( )
{
local filepath = $CPUFREQROOT /$2 /scaling_available_governors
# Exit if cpu isn't managed by cpufreq core
if [ ! -f $filepath ] ; then
return ;
fi
backup_governor $2
local governors = $( cat $filepath )
printf " Available governors for $2 : $governors \n "
for governor in $governors ; do
$1 $2 $governor
done
restore_governor $2
}
# $1: loop count
shuffle_governors_for_all_cpus( )
{
printf " ** Test: Running ${ FUNCNAME [0] } for $1 loops **\n\n "
for i in ` seq 1 $1 ` ; do
for_each_policy call_for_each_governor switch_show_governor
done
printf "%s\n\n" "------------------------------------------------"
}