Limitar o uso da CPU em termos de temperatura

8

Eu corro projetos de computação distribuída, que normalmente querem usar 100% da CPU. Como limito o uso da CPU em termos de temperatura, em vez de porcentagem de uso? Além disso, qual é a temperatura máxima segura para manter um Intel i5 funcionando 24/7? (Sem limite de CPU, FahCore_a4 faz com que esta máquina funcione a 82 graus Celsius.)

jeffythedragonslayer
fonte

Respostas:

8

Nesta página, há um script bash que tentará manter sua CPU abaixo de uma temperatura especificada. http://seperohacker.blogspot.com/2012/10/linux-keep-your-cpu-cool-with-frequency.html

Você só precisa fornecer a temperatura máxima desejada, e isso acelerará sua (s) CPU (s), em um esforço para permanecer abaixo dessa temperatura.

Plug Shameless- eu escrevi e mantenho o script acima.

Sepero
fonte
2
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
fossfreedom
1
bom script .. boa ideia :) #
3100 Superbiji
1
aqui são partes essenciais: github.com/Sepero/temp-throttle
DmitrySandalov
3

Aqui está como eu o resolvi usando o bash. Se alguém criar um daemon melhor (melhor em permanecer próximo da temperatura desejada), poste-o.

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

A própria CPU possui um mecanismo no qual se desliga se ficar muito quente. (talvez não, se você desativar as interrupções SMI, não tenho certeza disso.)

O principal aplicativo de espaço do usuário é o lm-sensorspacote. Depois de instalá-lo, execute sensors-detectpara configurá-lo, se suas máquinas forem iguais, você poderá executá-lo uma vez e usar as descobertas resultantes em todos os lugares.

A frequência da CPU é facilmente controlada pelo subsistema de driver cpufreq. consulte https://wiki.archlinux.org/index.php/CPU_Frequency_Scaling

Você pode escrever um daemon que use lm-sensores para pesquisar a temperatura e, se estiver muito quente, diminua a frequência da CPU.

user72421
fonte
em que idioma seria mais fácil escrever um daemon desse tipo? bash, python, awk?
precisa saber é o seguinte
Eu diria que o bash é o mais simples. Aqui está um exemplo (veja as linhas 55-66).
Adobe
0

Foi assim que resolvi meus problemas de superaquecimento que não foram causados ​​por um processo específico, mas pela falha do meu laptop em dissipar o calor causado pela execução de uma carga de CPU alta por longos períodos de tempo. A principal diferença para a solução oferecida pelo próprio da code monkey é que eu uso a escala de frequência da CPU, em vez de usar a cpulimit em um processo específico. Desde que eu tenho o Psensor instalado e funcionando de qualquer maneira, uso o Psensor. Um daemon como o macaco de código da sugerido também deve funcionar, no entanto, dois limites (mínimo e máximo) são necessários. No Psensor (Preferências do sensor -> Alarme), defino um alarme para o sensor relevante se ficar mais alto que o limite alto (uso 85) ou mais baixo que o limite baixo (uso 80). Em Preferências-> Sensores-> Script executado quando um alarme é acionado, chamo meu script heatcontrol.sh assim:

/ALLUSER/heatcontrol.sh powersave ondemand 82

O primeiro parâmetro é um scaling_governor válido que reduz a frequência da CPU, por exemplo, economia de energia. O segundo parâmetro é o scaling_governor padrão - ondemand para a maioria dos sistemas. O terceiro parâmetro é uma temperatura entre o limite baixo e o alto (o valor exato não é importante). O psensor adiciona mais dois parâmetros: uma identificação do sensor e a temperatura relatada.

E este é o meu 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

Funciona bem para mim (UBUNTU 14.04 LTS).

Sendo um iniciante no Linux e no bash, usei vários recursos, incluindo:

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

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

user369752
fonte