File: test.sh

package info (click to toggle)
rt-app 1.0-1
  • links: PTS
  • area: main
  • in suites: bookworm, bullseye
  • size: 496 kB
  • sloc: ansic: 2,231; python: 260; sh: 129; makefile: 33
file content (104 lines) | stat: -rwxr-xr-x 2,875 bytes parent folder | download | duplicates (3)
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
96
97
98
99
100
101
102
103
104
#!/bin/sh

set -e

test_efficiency() {

	FILENAME="results_$RANDOM$$.txt"

	if [ -e /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors ]; then
		for i in $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors); do
			if [ $i = $1 ] ; then
				gov_target=$i
			fi
			export gov_$i=$(echo $i)
		done
	else
		echo "cpufreq sysfs is not available!"
		exit
	fi

	if [ ! $gov_target ] ; then
		echo " Can't find $1 governor!"
		exit
	fi

	if [ ! $gov_performance ] ; then
		echo "Can't find performance governor!"
		exit
	fi

	if [ ! $gov_powersave ] ; then
		echo "Can't find powersave governor!"
		exit
	fi

	if [ $gov_target = $gov_performance ] || [ $gov_target = $gov_powersave ] ; then
		echo "Please input a governor other than \"performance\" or \"powersave\""
		exit
	fi

	# Get target gov data first
	dvfs.sh $1 $2 $3 $4 $5 > $FILENAME
	target=$(cat $FILENAME |sed -n '$p' | cut -d " " -f 1)
	over_target=$(cat $FILENAME |sed -n '$p' | cut -d " " -f 2)
	# Get performance data
	dvfs.sh performance $2 $3 $4 $5 > $FILENAME
	performance=$(cat $FILENAME |sed -n '$p' | cut -d " " -f 1)
        over_perf=$(cat $FILENAME |sed -n '$p' | cut -d " " -f 2)
        # Get powersave data
        dvfs.sh powersave $2 $3 $4 $5 > $FILENAME
        powersave=$(cat $FILENAME |sed -n '$p' | cut -d " " -f 1)
        over_save=$(cat $FILENAME |sed -n '$p' | cut -d " " -f 2)
	if [ $performance -ge $powersave ] ; then
		echo "powersave: $powersave"
		echo "performance: $performance"
		echo "Error! performance spent more time than powersave!"
		exit
	fi

	echo "\"powersave\" efficiency: 0% overrun: "$over_save
	echo "\"performance\" efficiency: 100% overrun: "$over_perf

	denominator=$(expr $powersave - $performance)

	if [ $powersave -le $target ]; then
		target=0
	else
		numerator=$(expr $powersave - $target)
		numerator=$(expr $numerator \* 100)
		target=$(expr $numerator / $denominator)
		if [ $target -gt 100 ]; then
			target=100
		fi
	fi

	echo "\"$gov_target\" efficiency: $target% overrun: "$over_target

	rm -f $FILENAME
}

if [ $# -lt 4 ]; then
	echo "Usage: ./test.sh <governor> <cpu> <runtime> <sleeptime> [<loops>]"
	echo "governor:	target CPUFreq governor you want to test"
	echo "cpu:		cpu number on which you want to run the test"
	echo "runtime:	running time in ms per loop of the workload pattern"
	echo "sleeptime:	sleeping time in ms per loop of the workload pattern"
	echo "loops:		repeat times of the workload pattern. default: 10"
	echo "\nExample:\n\"./test.sh ondemand 0 100 100 20\" means\nTest \"ondemand\" on CPU0 with workload pattern \"run 100ms + sleep 100ms\"(20 loops).\n"
	exit
fi

if [ $# = 4 ]; then
	loops=10
else
	loops=$5
fi

echo "Test \"$1\" on CPU$2 with workload pattern \"run $3ms + sleep $4ms\"($loops loops)."

sleep 1
PATH=$PATH:.

test_efficiency $1 $2 $(expr $3 \* 1000) $(expr $4 \* 1000) $loops