Begrenzen Sie die CPU-Auslastung in Bezug auf die Temperatur


8

Ich führe verteilte Computerprojekte aus, die normalerweise 100% der CPU nutzen möchten. Wie beschränke ich die CPU-Auslastung in Bezug auf die Temperatur anstelle der prozentualen Auslastung? Was ist die maximale sichere Temperatur, um einen Intel i5 rund um die Uhr am Laufen zu halten? (Ohne CPU-Begrenzung führt FahCore_a4 dazu, dass dieser Computer bei 82 Grad Celsius läuft.)

Antworten:


8

Auf dieser Webseite gibt es ein Bash-Skript, das versucht, Ihre CPU unter einer bestimmten Temperatur zu halten. http://seperohacker.blogspot.com/2012/10/linux-keep-your-cpu-cool-with-frequency.html

Sie müssen nur die gewünschte Maximaltemperatur angeben, und Ihre CPU (s) werden gedrosselt, um unter dieser Temperatur zu bleiben.

Schamloser Plug - Ich habe das obige Skript geschrieben und pflege es.


2
Während dies theoretisch die Frage beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Fossfreiheit

1
schönes Drehbuch .. gute Idee :)
Superbiji

1
Hier sind wesentliche Teile: github.com/Sepero/temp-throttle
DmitrySandalov

3

Hier ist, wie ich es mit Bash gelöst habe. Wenn jemand einen besseren Daemon findet (besser in der Nähe der Zieltemperatur), poste ihn bitte.

#!/bin/bash

while true; do
        val=$(sensors | awk '/Core 0/ {print $3}')
        max="+60.0"
        if [[ "$val" < "$max" ]]
        then
                killall cpulimit
                sleep .1
        else
                cpulimit -e FahCore_a4 -l 99 &
                sleep 1
        fi
        clear
        sensors
done

0

Die CPU selbst verfügt über einen Mechanismus, mit dem sie sich selbst ausschaltet, wenn es zu heiß wird. (Vielleicht nicht, wenn Sie SMI-Interrupts deaktivieren, da bin ich mir nicht sicher.)

Die Hauptanwendung für den Benutzerbereich ist das lm-sensorsPaket. sensors-detectWenn Ihre Maschinen nach der Installation identisch sind, können Sie sie einmal ausführen und die daraus resultierenden Ergebnisse überall verwenden.

Die CPU-Frequenz kann einfach über das cpufreq-Treibersubsystem gesteuert werden. Siehe https://wiki.archlinux.org/index.php/CPU_Frequency_Scaling

Sie könnten einen Daemon schreiben, der lm-Sensoren verwendet, um die Temperatur abzufragen, und wenn es zu heiß ist, verringern Sie die CPU-Frequenz.


In welcher Sprache wäre es am einfachsten, einen solchen Daemon zu schreiben? Bash, Python, Awk?
Jeffythedragonslayer

Ich würde sagen, Bash ist das einfachste. Hier ist ein Beispiel (siehe Zeilen 55-66).
Adobe

0

Auf diese Weise löste ich meine Überhitzungsprobleme, die nicht durch einen bestimmten Prozess verursacht wurden, sondern durch das Versagen meines Laptops, die Wärme abzuleiten, die durch längeres Ausführen auf einer hohen CPU-Last verursacht wurde. Der Hauptunterschied zu der von da code monkey selbst angebotenen Lösung besteht darin, dass ich die CPU-Frequenzskalierung verwende, anstatt cpulimit für einen bestimmten Prozess zu verwenden. Da ich Psensor trotzdem installiert habe und laufen lasse, huckepack ich auf Psensor. Ein Daemon wie der von da code monkey vorgeschlagene Affe sollte ebenfalls funktionieren, es sind jedoch zwei Schwellenwerte (min und max) erforderlich. In Psensor (Sensoreinstellungen-> Alarm) stelle ich einen Alarm für den entsprechenden Sensor ein, wenn dieser über dem oberen Schwellenwert (ich verwende 85) oder unter dem unteren Schwellenwert (ich verwende 80) liegt. In Einstellungen-> Sensoren-> Skript, das ausgeführt wird, wenn ein Alarm ausgelöst wird, rufe ich mein Skript heatcontrol.sh folgendermaßen auf:

/ALLUSER/heatcontrol.sh Powersave on Demand 82

Der erste Parameter ist ein gültiger Scaling_Governor, der die CPU-Frequenz reduziert, z. B. Powersave. Der zweite Parameter ist der Standardwert für scaling_governor - ondemand für die meisten Systeme. Der dritte Parameter ist eine Temperatur zwischen niedrigem und hohem Schwellenwert (der genaue Wert ist nicht wichtig). Psensor fügt zwei weitere Parameter hinzu: eine Sensor-ID und die gemeldete Temperatur.

Und das ist mein Skript heatcontrol.sh:

#!/bin/bash
 # TempNZ is temperature reported by Psensor; strip of trailing °C
TempNZ=$5 
bnum=`expr index "$TempNZ" "°"`
if (( bnum < 2 )); then
    echo "ERROR"
fi
TempNZ=${TempNZ:0:$(($bnum-1))}
STR=$1
# Is this a low threshold alarm?
if [ "$TempNZ" -le "$3" ]; then
    STR=$2
fi
sudo sh -c "echo '$STR' > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"
# echo new scaling_governor
sudo cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# play sound - audio feedback - optional
paplay /usr/share/sounds/ubuntu/stereo/message-new-instant.ogg

Funktioniert gut für mich (UBUNTU 14.04 LTS).

Als Neuling in Linux und Bash habe ich eine Reihe von Ressourcen verwendet, darunter:

https://wiki.archlinux.org/index.php/CPU_frequency_scaling

http://elinux.org/Jetson/Performance#Viewing_the_current_CPU_status

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.