Limite el uso de CPU en términos de temperatura

8

Ejecuto proyectos de computación distribuida, que generalmente quieren usar el 100% de la CPU. ¿Cómo limito el uso de la CPU en términos de temperatura en lugar del porcentaje de uso? Además, ¿cuál es la temperatura máxima segura para mantener un Intel i5 funcionando 24/7? (Sin límite de CPU, FahCore_a4 hace que esta máquina funcione a 82 grados Celsius).

jeffythedragonslayer
fuente

Respuestas:

8

En esta página web hay un script bash que intentará mantener su CPU por debajo de una temperatura especificada. http://seperohacker.blogspot.com/2012/10/linux-keep-your-cpu-cool-with-frequency.html

Solo necesita proporcionarle la temperatura máxima deseada, y acelerará su CPU (s) en un esfuerzo por mantenerse por debajo de esa temperatura.

Plug descarado: escribí y mantengo el script anterior.

Sepero
fuente
2
Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
fossfreedom
1
buen guión .. buena idea :)
Superbiji
1
Aquí hay partes esenciales: github.com/Sepero/temp-throttle
DmitrySandalov
3

Así es como lo resolví usando bash. Si a alguien se le ocurre un mejor demonio (mejor para mantenerse cerca de la temperatura objetivo), publíquelo.

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

La CPU en sí misma tiene un mecanismo donde se apaga si se calienta demasiado. (tal vez no si deshabilita las interrupciones SMI, no estoy seguro de eso).

La principal aplicación de espacio de usuario es el lm-sensorspaquete. Después de instalarlo, ejecute sensors-detectpara configurarlo, si sus máquinas son iguales, puede ejecutar esto una vez y usar los resultados resultantes en todas partes.

La frecuencia de la CPU se controla fácilmente a través del subsistema del controlador cpufreq. ver https://wiki.archlinux.org/index.php/CPU_Frequency_Scaling

Podrías escribir un demonio que use sensores lm para sondear la temperatura y, si hace demasiado calor, baja la frecuencia de la CPU.

usuario72421
fuente
¿En qué idioma sería más fácil escribir un demonio así? bash, python, awk?
jeffythedragonslayer
Yo diría que bash es el más simple. Aquí hay un ejemplo (mire las líneas 55-66).
Adobe
0

Así es como resolví mis problemas de sobrecalentamiento que no fueron causados ​​por un proceso específico, sino por la incapacidad de mi computadora portátil de disipar el calor causado al funcionar con una alta carga de CPU durante períodos de tiempo más largos. La principal diferencia con la solución ofrecida por el propio da code monkey es que uso el escalado de frecuencia de la CPU, en lugar de usar cpulimit en un proceso específico. Como tengo Psensor instalado y ejecutándose de todos modos, aprovecho Psensor. Un daemon como da code monkey sugerido también debería funcionar, sin embargo, se requieren dos umbrales (min y max). En Psensor (Preferencias del sensor-> Alarma) configuro una alarma para el sensor relevante si llega a ser más alto que el umbral alto (uso 85) o más bajo que el umbral bajo (uso 80). En Preferencias-> Sensores-> Script ejecutado cuando se activa una alarma, llamo a mi script heatcontrol.sh de esta manera:

/ALLUSER/heatcontrol.sh powersave ondemand 82

El primer parámetro es un scaling_governor válido que reduce la frecuencia de la CPU, por ejemplo, ahorro de energía. El segundo parámetro es el scaling_governor predeterminado - ondemand para la mayoría de los sistemas. El tercer parámetro es una temperatura entre el umbral bajo y el alto (el valor exacto no es importante). Psensor agrega dos parámetros más: una identificación del sensor y la temperatura informada.

Y este es mi 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 bien para mí (UBUNTU 14.04 LTS).

Al ser un novato en Linux y bash, utilicé varios recursos, que incluyen:

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

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

usuario369752
fuente