From 33ad5b50130286926d00c1c9c25381fcd2316c6e Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 17 Jun 2021 16:13:02 +0100 Subject: [PATCH] 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. --- README.md | 1 + temp-to-hz/Temp2Hz.service | 10 +++++ temp-to-hz/Temp2Hz.sh | 86 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 temp-to-hz/Temp2Hz.service create mode 100755 temp-to-hz/Temp2Hz.sh 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 + -- 2.44.2