From: Andrew Date: Thu, 17 Jun 2021 15:13:02 +0000 (+0100) Subject: Added Temp to Hz script and service file X-Git-Url: https://git.liquid.me.uk/?a=commitdiff_plain;h=33ad5b50130286926d00c1c9c25381fcd2316c6e;p=stuff.git Added Temp to Hz script and service file Limits CPU max speed depending on cpu temp For old laptops with lazy owners who won't take them apart and clean the heatsinks, get still insist on compiling locally. --- diff --git a/README.md b/README.md index 514a27d..0d05a70 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ Just some stuff, might be useful, probably not though... +This is mostly a backup of "things I use", if you use them and something breaks, you get to keep all the pieces. diff --git a/temp-to-hz/Temp2Hz.service b/temp-to-hz/Temp2Hz.service new file mode 100644 index 0000000..a4cc5b2 --- /dev/null +++ b/temp-to-hz/Temp2Hz.service @@ -0,0 +1,10 @@ +[Unit] +Description=Cap CPU HZ according to temperature + +[Service] +Type=simple +ExecStart=/root/bin/Temp2Hz.sh start +ExecStop=/root/bin/Temp2Hz.sh stop + +[Install] +WantedBy=multi-user.target diff --git a/temp-to-hz/Temp2Hz.sh b/temp-to-hz/Temp2Hz.sh new file mode 100755 index 0000000..da3a765 --- /dev/null +++ b/temp-to-hz/Temp2Hz.sh @@ -0,0 +1,86 @@ +#!/bin/bash +debug=0 + +Exit(){ + if ((${debug}));then echo "Restoring default speed and exiting.";fi + SetCPUSpeed ${DefaultMaxCPUSpeed} + rm /var/run/Temp2Hz.pid + exit +} + +GetTemp(){ + Temp=$(/usr/bin/sensors|sed -n 's/Package id 0: +\(.*\)°C .*/\1/p') + if ((${debug}));then echo -n "Current Condition: ${Temp}°C ";fi +} + +CheckTemp(){ +for index in $(echo -e $(echo "${!CPUSpeeds[@]}"|sed 's/ /\\n/g')|sort -r);do + if (( $(echo ${Temp}$(echo $index|sed 's/over_/>/;s/under_/ ${file}/scaling_max_freq + if ((${debug}));then echo "$1 Requested: ${file}/scaling_max_freq set to $(cat ${file}/scaling_max_freq)";fi + done +} + + +Main(){ +trap Exit SIGINT SIGUSR1 +echo -n $$ >/var/run/Temp2Hz.pid +GetCurMaxSpeed +DefaultMaxCPUSpeed=${CurMaxCPUSpeed} +if ((${debug}));then echo "Default scaling_max_freq recorded as ${DefaultMaxCPUSpeed}";fi + +declare -A CPUSpeeds + +################ Config Section ################ +CPUSpeeds[over_90]=800000 +CPUSpeeds[over_85]=1300000 +CPUSpeeds[over_70]=1800000 +CPUSpeeds[over_55]=2300000 +CPUSpeeds[over_45]=2800000 +CPUSpeeds[under_45]=${CurMaxCPUSpeed} +TempPollPeriod=15 +################################################ + + +##Main loop +while GetTemp;do + GetCurMaxSpeed + CheckTemp + a=1;until [ $a -gt ${TempPollPeriod} ] ;do sleep 1;((a++));done +done +} + +KillMain(){ + MainPID=$(/bin/cat /var/run/Temp2Hz.pid) + if ps -A|awk '{print $1}'|grep -q ${MainPID};then /bin/kill -USR1 ${MainPID};fi + for a in {0..5};do if ps -A|awk '{print $1}'|grep -q ${MainPID};then sleep 1;fi;done + if ps -A|awk '{print $1}'|grep -q ${MainPID};then echo "Stopping forcefully...";/usr/bin/killall -SIGKILL Temp2Hz.sh;fi +} + +case $1 in + start ) + Main + ;; + stop ) + KillMain + ;; + * ) + echo "Usage: $0 [start|stop]" + ;; +esac +