aboutsummaryrefslogtreecommitdiffstats
path: root/poc/cputemp2maxfreq.sh
blob: f2da8517e38395e5bd109b3c50bb58d9a8c9ff5a (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
#!/bin/sh

TEMP_INPUT=/sys/devices/virtual/thermal/thermal_zone0/temp
TEMP_MAX=70000
FREQ_STEP=100000

read CPU_MIN < /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_min_freq
read CPU_MAX < /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_max_freq
read GOV_MAX < /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq

CPUS=`find /sys/devices/system/cpu -name "cpufreq" -type l`

set_max_freq()
{
 local NEWFREQ=$1

 for CPU in $CPUS
 do
  echo "$NEWFREQ" > "$CPU/scaling_max_freq"
 done

 sleep 0.1
 read GOV_MAX < /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq
}

while true
do
 read TEMP < /sys/devices/virtual/thermal/thermal_zone0/temp
 read CPU_CUR < /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq
 printf "$TEMP $TEMP_MAX $CPU_MAX $GOV_MAX $CPU_CUR"
 if [ "$TEMP" -lt "$TEMP_MAX" -a "$GOV_MAX" -lt "$CPU_MAX" ]
 then
  DIFF=$(((TEMP_MAX-TEMP)/1000))
  NEWFREQ=$((GOV_MAX+(FREQ_STEP*DIFF)))
  if [ "$NEWFREQ" -gt "$CPU_MAX" ]
  then
   NEWFREQ=$CPU_MAX
  fi
  printf " Increase GOV_MAX to $NEWFREQ"
  set_max_freq $NEWFREQ
 fi
 if [ "$TEMP" -gt "$TEMP_MAX" -a "$GOV_MAX" -gt "$CPU_MIN" ]
 then
  DIFF=$(((TEMP-TEMP_MAX)/1000))
  NEWFREQ=$((GOV_MAX-(FREQ_STEP*DIFF)))
  if [ "$NEWFREQ" -lt "$CPU_MIN" ]
  then
   NEWFREQ=$CPU_MIN
  fi
  printf " Decrease GOV_MAX to $NEWFREQ"
  set_max_freq $NEWFREQ
 fi
 echo ""
 sleep 10
done