Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Change these values according to your system #
- # Usable scaling speeds
- FREQUENCY[0]=1000000
- FREQUENCY[1]=1333000
- FREQUENCY[2]=1667000
- FREQUENCY[3]=2000000
- # current temperature
- TEMP_INPUT_SRC="/sys/class/hwmon/hwmon0/temp2_input"
- # critical temperature
- TEMP_CRITICAL_SRC="/sys/class/hwmon/hwmon0/temp2_crit"
- # DO NOT MODIFY BELOW THIS LINE #
- trap ctrl_c INT
- function ctrl_c() {
- echo -e "\rSwitching to powersave governor"
- xenpm set-scaling-governor powersave
- xenpm set-scaling-minfreq "${FREQUENCY[0]}"
- xenpm set-scaling-maxfreq "${FREQUENCY[3]}"
- echo "Exiting"
- exit
- }
- function setfreq {
- LAST_FREQUENCY=$CURRENT_FREQUENCY
- echo -n " => Setting frequency to ${FREQUENCY[$NEXT_FREQUENCY]}"
- xenpm set-scaling-speed "${FREQUENCY[$NEXT_FREQUENCY]}"
- CURRENT_FREQUENCY=$NEXT_FREQUENCY
- LAST_CHANGE=$(date +%s)
- }
- LAST_FREQUENCY=0
- CURRENT_FREQUENCY=0
- LAST_CHANGE=0
- xenpm set-scaling-governor userspace
- xenpm set-scaling-minfreq "${FREQUENCY[0]}"
- xenpm set-scaling-maxfreq "${FREQUENCY[3]}"
- while true
- do
- TEMP_INPUT=$(cat $TEMP_INPUT_SRC)
- TEMP_CRITICAL=$(cat $TEMP_CRITICAL_SRC)
- CURRENT_TIME=$(date +'%Y-%m-%d %H:%M:%S')
- CURRENT_TIMESTAMP=$(date +%s)
- TIME_DIFF=$(( $CURRENT_TIMESTAMP - $LAST_CHANGE ))
- CURRENT_SPEED=$(xenpm get-cpufreq-para | grep scaling_setspeed | cut -d ' ' -f 7 | uniq)
- CURRENT_SPEED=$(printf "%d.%02d" $(( $CURRENT_SPEED / 1000000 )) $(( ( $CURRENT_SPEED / 1000 - $CURRENT_SPEED / 1000000 * 1000 ) / 10 )) )
- PERCENT=$(( $TEMP_INPUT * 100 / $TEMP_CRITICAL ))
- echo -n "${CURRENT_TIME} Clock speed: ${CURRENT_SPEED}GHz, Temperature: ${PERCENT}%"
- if [ $PERCENT -ge 95 ]
- then
- if [ $CURRENT_FREQUENCY -ne 0 ]
- then
- echo -n " >= 95%"
- NEXT_FREQUENCY=$(( $CURRENT_FREQUENCY - 1 ))
- setfreq $NEXT_FREQUENCY
- else
- echo " Panic!!!"
- echo 1 > /proc/acpi/ibm/beep
- fi
- elif [ $PERCENT -ge 90 ]
- then
- if [ $CURRENT_FREQUENCY -lt 1 ] && [ $TIME_DIFF -ge 30 ]
- then
- echo -n " >= 90%"
- NEXT_FREQUENCY=$(( $CURRENT_FREQUENCY + 1 ))
- setfreq $NEXT_FREQUENCY
- fi
- elif [ $PERCENT -ge 85 ]
- then
- if [ $CURRENT_FREQUENCY -lt 2 ] && [ $TIME_DIFF -ge 20 ]
- then
- echo -n " >= 85%"
- NEXT_FREQUENCY=$(( $CURRENT_FREQUENCY + 1 ))
- setfreq $NEXT_FREQUENCY
- fi
- else
- if [ $CURRENT_FREQUENCY -lt 3 ] && [ $TIME_DIFF -ge 10 ]
- then
- echo -n " < 85%"
- NEXT_FREQUENCY=$(( $CURRENT_FREQUENCY + 1 ))
- setfreq $NEXT_FREQUENCY
- fi
- fi
- echo ""
- sleep 1
- done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement