1 #!/bin/bash 2 # 3 # Test governors 4 5 # protect against multiple inclusion 6 if [ $FILE_GOVERNOR ]; then 7 return 0 8 else 9 FILE_GOVERNOR=DONE 10 fi 11 12 source cpu.sh 13 source cpufreq.sh 14 15 CUR_GOV= 16 CUR_FREQ= 17 18 # Find governor's directory path 19 # $1: policy, $2: governor 20 find_gov_directory() 21 { 22 if [ -d $CPUFREQROOT/$2 ]; then 23 printf "$CPUFREQROOT/$2\n" 24 elif [ -d $CPUFREQROOT/$1/$2 ]; then 25 printf "$CPUFREQROOT/$1/$2\n" 26 else 27 printf "INVALID\n" 28 fi 29 } 30 31 # $1: policy 32 find_current_governor() 33 { 34 cat $CPUFREQROOT/$1/scaling_governor 35 } 36 37 # $1: policy 38 backup_governor() 39 { 40 CUR_GOV=$(find_current_governor $1) 41 42 printf "Governor backup done for $1: $CUR_GOV\n" 43 44 if [ $CUR_GOV == "userspace" ]; then 45 CUR_FREQ=$(find_current_freq $1) 46 printf "Governor frequency backup done for $1: $CUR_FREQ\n" 47 fi 48 49 printf "\n" 50 } 51 52 # $1: policy 53 restore_governor() 54 { 55 __switch_governor $1 $CUR_GOV 56 57 printf "Governor restored for $1 to $CUR_GOV\n" 58 59 if [ $CUR_GOV == "userspace" ]; then 60 set_cpu_frequency $1 $CUR_FREQ 61 printf "Governor frequency restored for $1: $CUR_FREQ\n" 62 fi 63 64 printf "\n" 65 } 66 67 # param: 68 # $1: policy, $2: governor 69 __switch_governor() 70 { 71 echo $2 > $CPUFREQROOT/$1/scaling_governor 72 } 73 74 # param: 75 # $1: cpu, $2: governor 76 __switch_governor_for_cpu() 77 { 78 echo $2 > $CPUROOT/$1/cpufreq/scaling_governor 79 } 80 81 # SWITCH GOVERNORS 82 83 # $1: cpu, $2: governor 84 switch_governor() 85 { 86 local filepath=$CPUFREQROOT/$1/scaling_available_governors 87 88 # check if governor is available 89 local found=$(cat $filepath | grep $2 | wc -l) 90 if [ $found = 0 ]; then 91 echo 1; 92 return 93 fi 94 95 __switch_governor $1 $2 96 echo 0; 97 } 98 99 # $1: policy, $2: governor 100 switch_show_governor() 101 { 102 cur_gov=find_current_governor 103 if [ $cur_gov == "userspace" ]; then 104 cur_freq=find_current_freq 105 fi 106 107 # switch governor 108 __switch_governor $1 $2 109 110 printf "\nSwitched governor for $1 to $2\n\n" 111 112 if [ $2 == "userspace" -o $2 == "powersave" -o $2 == "performance" ]; then 113 printf "No files to read for $2 governor\n\n" 114 return 115 fi 116 117 # show governor files 118 local govpath=$(find_gov_directory $1 $2) 119 read_cpufreq_files_in_dir $govpath 120 } 121 122 # $1: function to be called, $2: policy 123 call_for_each_governor() 124 { 125 local filepath=$CPUFREQROOT/$2/scaling_available_governors 126 127 # Exit if cpu isn't managed by cpufreq core 128 if [ ! -f $filepath ]; then 129 return; 130 fi 131 132 backup_governor $2 133 134 local governors=$(cat $filepath) 135 printf "Available governors for $2: $governors\n" 136 137 for governor in $governors; do 138 $1 $2 $governor 139 done 140 141 restore_governor $2 142 } 143 144 # $1: loop count 145 shuffle_governors_for_all_cpus() 146 { 147 printf "** Test: Running ${FUNCNAME[0]} for $1 loops **\n\n" 148 149 for i in `seq 1 $1`; do 150 for_each_policy call_for_each_governor switch_show_governor 151 done 152 printf "%s\n\n" "------------------------------------------------" 153 } 154