Advertisement
cyla

freqd

Oct 24th, 2012
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.47 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Change these values according to your system #
  4.  
  5. # Usable scaling speeds
  6. FREQUENCY[0]=1000000
  7. FREQUENCY[1]=1333000
  8. FREQUENCY[2]=1667000
  9. FREQUENCY[3]=2000000
  10.  
  11. # current temperature
  12. TEMP_INPUT_SRC="/sys/class/hwmon/hwmon0/temp2_input"
  13. # critical temperature
  14. TEMP_CRITICAL_SRC="/sys/class/hwmon/hwmon0/temp2_crit"
  15.  
  16. # DO NOT MODIFY BELOW THIS LINE #
  17.  
  18. trap ctrl_c INT
  19.  
  20. function ctrl_c() {
  21.     echo -e "\rSwitching to powersave governor"
  22.     xenpm set-scaling-governor powersave
  23.     xenpm set-scaling-minfreq "${FREQUENCY[0]}"
  24.     xenpm set-scaling-maxfreq "${FREQUENCY[3]}"
  25.     echo "Exiting"
  26.     exit
  27. }
  28.  
  29. function setfreq {
  30.     LAST_FREQUENCY=$CURRENT_FREQUENCY
  31.  
  32.     echo -n " => Setting frequency to ${FREQUENCY[$NEXT_FREQUENCY]}"
  33.     xenpm set-scaling-speed "${FREQUENCY[$NEXT_FREQUENCY]}"
  34.  
  35.     CURRENT_FREQUENCY=$NEXT_FREQUENCY
  36.     LAST_CHANGE=$(date +%s)
  37. }
  38.  
  39. LAST_FREQUENCY=0
  40. CURRENT_FREQUENCY=0
  41. LAST_CHANGE=0
  42.  
  43. xenpm set-scaling-governor userspace
  44. xenpm set-scaling-minfreq "${FREQUENCY[0]}"
  45. xenpm set-scaling-maxfreq "${FREQUENCY[3]}"
  46.  
  47. while true
  48. do
  49.     TEMP_INPUT=$(cat $TEMP_INPUT_SRC)
  50.     TEMP_CRITICAL=$(cat $TEMP_CRITICAL_SRC)
  51.     CURRENT_TIME=$(date +'%Y-%m-%d %H:%M:%S')
  52.     CURRENT_TIMESTAMP=$(date +%s)
  53.     TIME_DIFF=$(( $CURRENT_TIMESTAMP - $LAST_CHANGE ))
  54.  
  55.     CURRENT_SPEED=$(xenpm get-cpufreq-para | grep scaling_setspeed | cut -d ' ' -f 7 | uniq)
  56.     CURRENT_SPEED=$(printf "%d.%02d" $(( $CURRENT_SPEED / 1000000 )) $(( ( $CURRENT_SPEED / 1000 - $CURRENT_SPEED / 1000000 * 1000 ) / 10 )) )
  57.     PERCENT=$(( $TEMP_INPUT * 100 / $TEMP_CRITICAL ))
  58.  
  59.     echo -n "${CURRENT_TIME} Clock speed: ${CURRENT_SPEED}GHz, Temperature: ${PERCENT}%"
  60.  
  61.     if [ $PERCENT -ge 95 ]
  62.     then
  63.         if [ $CURRENT_FREQUENCY -ne 0 ]
  64.         then
  65.             echo -n " >= 95%"
  66.             NEXT_FREQUENCY=$(( $CURRENT_FREQUENCY - 1 ))
  67.             setfreq $NEXT_FREQUENCY
  68.         else
  69.             echo " Panic!!!"
  70.             echo 1 > /proc/acpi/ibm/beep
  71.         fi
  72.     elif [ $PERCENT -ge 90 ]
  73.     then
  74.         if [ $CURRENT_FREQUENCY -lt 1 ] && [ $TIME_DIFF -ge 30 ]
  75.         then
  76.             echo -n " >= 90%"
  77.             NEXT_FREQUENCY=$(( $CURRENT_FREQUENCY + 1 ))
  78.             setfreq $NEXT_FREQUENCY
  79.         fi
  80.     elif [ $PERCENT -ge 85 ]
  81.     then
  82.         if [ $CURRENT_FREQUENCY -lt 2 ] && [ $TIME_DIFF -ge 20 ]
  83.         then
  84.             echo -n " >= 85%"
  85.             NEXT_FREQUENCY=$(( $CURRENT_FREQUENCY + 1 ))
  86.             setfreq $NEXT_FREQUENCY
  87.         fi
  88.     else
  89.         if [ $CURRENT_FREQUENCY -lt 3 ] && [ $TIME_DIFF -ge 10 ]
  90.         then
  91.             echo -n " < 85%"
  92.             NEXT_FREQUENCY=$(( $CURRENT_FREQUENCY + 1 ))
  93.             setfreq $NEXT_FREQUENCY
  94.         fi
  95.     fi
  96.  
  97.     echo ""
  98.     sleep 1
  99. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement