aboutsummaryrefslogtreecommitdiff
path: root/governor.sh
blob: 2d03c8057c11085d170a586cfc22a13568bdbb19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/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 ""
}