Limitez l'utilisation du processeur en termes de température

8

J'exécute des projets informatiques distribués, qui souhaitent généralement utiliser 100% du processeur. Comment limiter l'utilisation du processeur en termes de température au lieu de pourcentage d'utilisation? De plus, quelle est la température de sécurité maximale pour maintenir un Intel i5 en marche 24h / 24 et 7j / 7? (Sans limite CPU, FahCore_a4 fait fonctionner cette machine à 82 degrés Celsius.)

jeffythedragonslayer
la source

Réponses:

8

Sur cette page Web, il y a un script bash qui tentera de maintenir votre CPU en dessous d'une température spécifiée. http://seperohacker.blogspot.com/2012/10/linux-keep-your-cpu-cool-with-frequency.html

Il vous suffit de lui fournir la température maximale souhaitée, et il étranglera votre ou vos CPU dans un effort pour rester en dessous de cette température.

Plug sans vergogne - j'ai écrit et maintenu le script ci-dessus.

Sepero
la source
2
Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien de référence.
fossfreedom
1
joli script .. bonne idée :)
Superbiji
1
voici les pièces essentielles: github.com/Sepero/temp-throttle
DmitrySandalov
3

Voici comment je l'ai résolu en utilisant bash. Si quelqu'un propose un meilleur démon (mieux pour rester près de la température cible), veuillez le poster.

#!/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
jeffythedragonslayer
la source
0

Le CPU lui-même a un mécanisme où il se met hors tension s'il fait trop chaud. (peut-être pas si vous désactivez les interruptions SMI, je n'en suis pas sûr.)

La principale application de l'espace utilisateur est le lm-sensorspackage. Après l'avoir installé, exécutez-le sensors-detectpour le configurer, si vos machines sont les mêmes, vous pouvez l'exécuter une fois et utiliser les résultats obtenus partout.

La fréquence du processeur est facilement contrôlée via le sous-système du pilote cpufreq. voir https://wiki.archlinux.org/index.php/CPU_Frequency_Scaling

Vous pouvez écrire un démon qui utilise des capteurs lm pour interroger la température et s'il est trop chaud, baisser la fréquence du processeur.

user72421
la source
dans quelle langue écrire un tel démon serait-il le plus facile? bash, python, awk?
jeffythedragonslayer
Je dirais que bash est le plus simple. Voici un exemple (regardez les lignes 55-66).
Adobe
0

C'est ainsi que j'ai résolu mes problèmes de surchauffe qui n'étaient pas causés par un processus spécifique, mais par l'échec de mon ordinateur portable à dissiper la chaleur causée par un fonctionnement sur une charge CPU élevée pendant des périodes plus longues. La principale différence avec la solution proposée par da code monkey lui-même est que j'utilise la mise à l'échelle de la fréquence du processeur, au lieu d'utiliser cpulimit sur un processus spécifique. Depuis que j'ai installé et exécuté Psensor de toute façon, je me connecte à Psensor. Un démon comme da code monkey suggéré devrait également fonctionner, mais deux seuils (min et max) sont requis. Dans Psensor (Préférences de capteur-> Alarme), je règle une alarme pour le capteur concerné si elle devient supérieure au seuil haut (j'utilise 85) ou inférieure au seuil bas (j'utilise 80). Dans Préférences-> Capteurs-> Script exécuté lorsqu'une alarme est déclenchée, j'appelle mon script heatcontrol.sh comme ceci:

/ALLUSER/heatcontrol.sh powersave ondemand 82

Le premier paramètre est un scaling_governor valide qui réduit la fréquence du processeur, par exemple, powersave. Le deuxième paramètre est le scaling_governor - ondemand par défaut pour la plupart des systèmes. Le troisième paramètre est une température entre le seuil bas et le seuil haut (la valeur exacte n'est pas importante). Psensor ajoute deux autres paramètres: un identifiant de capteur et la température signalée.

Et voici mon script 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

Fonctionne très bien pour moi (UBUNTU 14.04 LTS).

En tant que novice de Linux et bash, j'ai utilisé un certain nombre de ressources, notamment:

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

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

user369752
la source