#!/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