PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Temperatur-Überwachung



Flummi
02-01-2006, 01:00
Hallo,

ich will mir gerne ein Skript schreiben, welches die Temperatur meiner
CPU überwacht und bei einer zu hohen Temperatur den Prozessor runter-
taktet. Auf Linuxforen.de hab ich dazu auch schon eine Frage gestellt und
habe das von ThorstenHirsch netterweise geschriebene Skript dazu be-
nutzt, ein eigenes anzufangen. Mit mäßigem Erfolg, wie man wohl sieht ;)

Die Idee ist recht simpel. Mein scaling_governor ist "powersave", was bewirkt,
dass die CPU immer auf der minimalen Stufe taktet. Mittels einer Abfrage wird
getestet, ob die Temperatur stimmt, wenn ja wird die CPU höher getaktet,
wenn nein, niedriger, und zwar indem die scaling_min_freq, also die minimal
zu taktende Frequenz eingestellt wird.

Hier also der Code dazu. Was passiert beim Ausführen? Nichts. Deshalb
meine Frage, was mache ich falsch?


#!/bin/bash

MAXTEMP=60

AVAIL_FREQ_1=600000
AVAIL_FREQ_2=800000
AVAIL_FREQ_3=1000000
AVAIL_FREQ_4=1200000
AVAIL_FREQ_5=1400000
AVAIL_FREQ_6=1700000

ECHO_FREQ=3

CURFREQ=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq`

while [ 1 ]; do

TEMP=`cat /proc/acpi/thermal_zone/THRC/temperature | awk '{ print $2 }'`

if [ "$TEMP" -gt "$MAXTEMP" ]; then
if [ "$ECHO_FREQ" -ge 2 ]; then
ECHO_FREQ=$(( $ECHO_FREQ - 1 ))
fi

case "ECHO_FREQ" in

1) echo $AVAIL_FREQ_1 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq; break ;;
2) echo $AVAIL_FREQ_2 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq; break ;;
3) echo $AVAIL_FREQ_3 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq; break ;;
4) echo $AVAIL_FREQ_4 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq; break ;;
5) echo $AVAIL_FREQ_5 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq; break ;;
6) echo $AVAIL_FREQ_6 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq; break ;;
esac

fi

if [ "$TEMP" -le "$MAXTEMP" ]; then
if [ "$ECHO_FREQ" -le 5 ]; then
ECHO_FREQ=$(( $ECHO_FREQ + 1 ))
fi

case "ECHO_FREQ" in

1) echo $AVAIL_FREQ_1 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq; break ;;
2) echo $AVAIL_FREQ_2 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq; break ;;
3) echo $AVAIL_FREQ_3 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq; break ;;
4) echo $AVAIL_FREQ_4 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq; break ;;
5) echo $AVAIL_FREQ_5 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq; break ;;
6) echo $AVAIL_FREQ_6 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq; break ;;
esac
fi

sleep 1
done


danke für eure Hilfe,
Flummi.

PS:
OS:GNU/Linux 2.6.14.5
Bash: 3.00

Romanday
03-01-2006, 01:54
Hallo,
Hier also der Code dazu. Was passiert beim Ausführen? Nichts. Deshalb
meine Frage, was mache ich falsch?


Laß doch mal die Umleitung weg, und schau nach ob etwas auf der
Konsole ausgegeben wird.
Eventuell liegt es nicht am Script sondern ist ein Rechte Problem.:D

Oder Du mußt eine Befehl absenden (welchen weiß ich nicht) damit
der Rechner auch begreift, das sich die Angaben in deiner scaling_min_freq
geändert haben.

THEReapMan
03-01-2006, 15:09
Den powersave governor interessiert es herzlich wenig welche Frequenz du haben willst. er macht immer nur die niedrigste. stell deinen governor mal auf userspace um. dann kannste auch per "echo <speed> > scaling_cur_freq" den speed setzen.