Limitare l'utilizzo della CPU in termini di temperatura


8

Gestisco progetti di calcolo distribuito, che in genere vogliono utilizzare il 100% della CPU. Come posso limitare l'utilizzo della CPU in termini di temperatura anziché percentuale? Inoltre, qual è la temperatura massima di sicurezza per far funzionare un Intel i5 24/7? (Senza limiti di CPU FahCore_a4 fa funzionare questa macchina a 82 gradi Celsius.)

Risposte:


8

In questa pagina web c'è uno script bash che tenterà di mantenere la CPU al di sotto di una temperatura specificata. http://seperohacker.blogspot.com/2012/10/linux-keep-your-cpu-cool-with-frequency.html

Hai solo bisogno di fornirti la tua temperatura massima desiderata e limiterà le tue CPU nel tentativo di rimanere al di sotto di quella temperatura.

Spudorato plug-ho scritto e mantieni lo script sopra.


2
Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
Fossfreedom

1
bella sceneggiatura .. buona idea :)
Superbiji

1
qui ci sono parti essenziali: github.com/Sepero/temp-throttle
DmitrySandalov

3

Ecco come l'ho risolto usando bash. Se qualcuno trova un demone migliore (migliore per stare vicino alla temperatura target), pubblicalo.

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

La CPU stessa ha un meccanismo in cui si spegne se diventa troppo calda. (forse no se disabiliti gli interrupt SMI, non ne sono sicuro.)

L'applicazione principale per lo spazio utente è il lm-sensorspacchetto. Dopo averlo installato, eseguilo sensors-detectper configurarlo, se i tuoi computer sono uguali, puoi eseguirlo una volta e utilizzare i risultati risultanti ovunque.

La frequenza della CPU è facilmente controllabile tramite il sottosistema di driver cpufreq. vedi https://wiki.archlinux.org/index.php/CPU_Frequency_Scaling

Potresti scrivere un demone che usa i sensori lm per eseguire il polling della temperatura e se è troppo caldo abbassa la frequenza della CPU.


in quale lingua sarebbe più semplice scrivere un demone del genere? bash, python, awk?
jeffythedragonslayer

Direi che bash è il più semplice. Ecco un esempio (guarda le righe 55-66).
Adobe,

0

È così che ho risolto i miei problemi di surriscaldamento che non erano causati da un processo specifico, ma dall'incapacità del mio laptop di dissipare il calore causato dall'esecuzione su un elevato carico della CPU per periodi di tempo più lunghi. La principale differenza rispetto alla soluzione offerta da da code monkey stesso è che utilizzo il ridimensionamento della frequenza della CPU, anziché utilizzare cpulimit su un processo specifico. Dal momento che ho installato Psensor e funzionante comunque, ho sulle spalle Psensor. Anche un demone come da code monkey suggerito dovrebbe funzionare, tuttavia sono necessarie due soglie (min e max). In Psensor (Preferenze sensore-> Allarme) imposto un allarme per il sensore rilevante se diventa superiore alla soglia alta (uso 85) o inferiore alla soglia bassa (uso 80). In Preferenze-> Sensori-> Script eseguito quando viene generato un allarme, chiamo il mio script heatcontrol.sh in questo modo:

/ALLUSER/heatcontrol.sh powersave ondemand 82

Il primo parametro è un valido scaling_governor che riduce la frequenza della CPU, ad es. Powersave. Il secondo parametro è scaling_governor predefinito - ondemand per la maggior parte dei sistemi. Il terzo parametro è una temperatura tra soglia bassa e soglia alta (il valore esatto non è importante). Psensor aggiunge altri due parametri: un ID sensore e la temperatura riportata.

E questo è il mio 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

Funziona bene per me (UBUNTU 14.04 LTS).

Essendo un principiante di Linux e bash, ho usato una serie di risorse, tra cui:

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

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.