#!/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 # Find governor's directory path # $1: cpu, $2: governor find_gov_directory() { if [ -d $GLOBAL_CPUFREQ -a -d $GLOBAL_CPUFREQ/$2 ]; then echo "$GLOBAL_CPUFREQ/$2" elif [ -d $CPU_PATH/$1/cpufreq -a -d $CPU_PATH/$1/cpufreq/$2 ]; then echo "$CPU_PATH/$1/cpufreq/$2" else echo "INVALID" fi } # SWITCH GOVERNORS # param: # $1: cpu, $2: governor __switch_governor() { echo $2 > $CPU_PATH/$1/cpufreq/scaling_governor } # $1: cpu, $2: governor switch_governor() { local filepath=$CPU_PATH/$1/cpufreq/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: cpu, $2: governor switch_show_governor() { # switch governor __switch_governor $1 $2 # show governor files local govpath=$(find_gov_directory $1 $2) if [ $govpath != "INVALID" ]; then __read_cpufreq_files $govpath fi } # $1: function to be called, $2: cpu call_for_each_governor() { local filepath=$CPU_PATH/$2/cpufreq/scaling_available_governors # Exit if cpu isn't mananged by cpufreq core if [ ! -f $filepath ]; then return; fi local governors=$(cat $filepath) echo "Available governors for $2: $governors" for governor in $governors; do $1 $2 $governor done } # $1: loop count shuffle_governors_for_all_cpus() { echo "** Test: Running ${FUNCNAME[0]} for $1 loops **" echo "" for i in `seq 1 $1`; do for_each_cpu call_for_each_governor switch_show_governor done echo "------------------------------------------------" echo "" }