forked from Qortal/Brooklyn
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.
154 lines
2.7 KiB
154 lines
2.7 KiB
#!/bin/bash |
|
# SPDX-License-Identifier: GPL-2.0 |
|
# |
|
# 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 |
|
} |
|
|
|
# param: |
|
# $1: cpu, $2: governor |
|
__switch_governor_for_cpu() |
|
{ |
|
echo $2 > $CPUROOT/$1/cpufreq/scaling_governor |
|
} |
|
|
|
# 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" "------------------------------------------------" |
|
}
|
|
|