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