web-dev-qa-db-fra.com

Limiter l'utilisation de la CPU en termes de température

Je dirige des projets informatiques distribués, qui veulent généralement utiliser 100% du processeur. Comment puis-je limiter l'utilisation du processeur en termes de température plutôt que de pourcentage d'utilisation? En outre, quelle est la température de sécurité maximale pour maintenir un Intel i5 en fonctionnement 24h/24 et 7j/7? (Sans limite de CPU, FahCore_a4 fait fonctionner cette machine à 82 degrés Celsius.)

8

Sur cette page Web, vous trouverez un script bash qui tentera de maintenir votre processeur 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 (vos) CPU (s) afin de rester en dessous de cette température.

Prise sans scrupule - j'ai écrit et mis à jour le script ci-dessus.

8
Sepero

Voici comment je l'ai résolu en utilisant bash. Si quelqu'un propose un meilleur démon (il est préférable de rester près de la température cible), postez-le.

#!/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
3

Le processeur lui-même dispose d'un mécanisme lui permettant de s'éteindre s'il fait trop chaud. (Peut-être pas si vous désactivez SMI interruptions, je n'en suis pas sûr.)

L'application utilisateur principale est le package lm-sensors. Après l'avoir installé, lancez sensors-detect pour le configurer. Si vos machines sont identiques, 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 de pilotes cpufreq. voir https://wiki.archlinux.org/index.php/CPU_Frequency_Scaling

Vous pouvez écrire un démon qui utilise lm-sensors pour interroger la température et, si sa température est trop élevée, baissez la fréquence du processeur.

0
user72421

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'incapacité de mon ordinateur portable à dissiper la chaleur causée par une charge de processeur élevée pendant de longues périodes. La principale différence par rapport à la solution proposée par da code monkey, c’est que j’utilise la mise à l’échelle de fréquence cpu, au lieu d’utiliser cpulimit pour un processus spécifique. Depuis que Psensor est installé et fonctionne de toute façon, je me connecte à Psensor. Un démon semblable à un singe suggéré devrait également fonctionner, mais deux seuils (minimum et maximum) sont requis. Dans Psensor (Préférences de capteur-> Alarme), je règle une alarme pour le capteur concerné si le seuil supérieur est dépassé (le niveau 85 est supérieur) ou le seuil bas (le nombre 80). Dans Préférences-> Capteurs-> Script exécuté lorsqu'une alarme est déclenchée, j'appelle mon script heatcontrol.sh comme suit:

/ALLUSER/heatcontrol.sh powersave ondemand 82

Le premier paramètre est un scaling_governor valide qui réduit la fréquence de la CPU, par exemple. économie d'énergie. Le deuxième paramètre est le paramètre par défaut scaling_governor - ondemand 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 paramètres supplémentaires: un identifiant de capteur et la température indiqué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 bien pour moi (UBUNTU 14.04 LTS).

En tant que novice pour Linux et bash, j'ai utilisé plusieurs ressources, notamment:

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

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

0
user369752