Estoy intentando compilar un programa en una computadora con refrigeración inadecuada.
El programa, específicamente, es el linux-ck
núcleo con -mtune=native march=native
optimizaciones específicas del procesador, por lo que simplemente ejecutarlo en una computadora diferente anula el propósito.
Actualmente estamos intentando resolver los problemas de refrigeración.NOTA:No tengo acceso físico a la computadora, así que no intentes ayudarme a solucionar el problema.
Yo, en cambio, necesito una forma de pausar el programa (control de trabajo de shell ' ^Z
-estilo') cuando la CPU supera una cierta temperatura, medida por sensors
, y reanudarlo una vez que se mide la temperatura para volver a niveles seguros.
NOTA:Esta computadora ha alcanzado los 91°C antes.
La computadora ejecuta Arch Linux y está completamente actualizada.
Respuesta1
La solución es asignar un PID del trabajo principal a la variable y escribir un script que:
Los controles dicen cada ~10 segundos la temperatura. Algo como
temp=($(sensors | awk -F'[+.]' '{print $2}'))
crea una tabla
temp
con dos temperaturas (acpitz y coretemp) en mi caja, es posible que deba ajustarla para su salida desensors
.si temp > $TEMPMAX envía
kill -TSTP PID
al trabajo (CTRL-Z, también conocido como suspender)(( $temp[1] > 80 || $temp[2] > 80 )) && kill -TSTP $JOBPID
si temp < $TEMPRUN envía
kill -CONT PID
al trabajo (lo mismo que el comando bg)(( $temp[1] < 40 && $temp[2] < 40 )) && kill -CONT $JOBPID
Dado que el script se ejecutará con mucha frecuencia, es posible que desee obtener una temperatura de la fuente en lugar del sensors
comando para ganar un poco de velocidad. En mayo la máquina esto funciona:
temp=($(cut -c 1-2 /sys/class/hwmon/hwmon0/temp1_input) $(cut -c 1-2 /sys/class/hwmon/hwmon1/device/temp2_input))
pero nuevamente, es posible que necesites ajustarlo según tus necesidades.