Estou tentando compilar um programa em um computador com refrigeração inadequada.
O programa, especificamente, é o linux-ck
kernel com -mtune=native march=native
otimizações específicas do processador, portanto, simplesmente executá-lo em um computador diferente anula o propósito.
No momento, estamos tentando resolver os problemas de resfriamento.OBSERVAÇÃO:Não tenho acesso físico ao computador, portanto, não tente me ajudar a solucionar o problema.
Em vez disso, preciso de uma maneira de pausar o programa (shell job control ' ^Z
-style') quando a CPU ficar acima de uma determinada temperatura, medida por sensors
, e retomá-lo assim que a temperatura for medida para voltar a níveis seguros.
OBSERVAÇÃO:Este computador já atingiu 91°C antes.
O computador está rodando Arch Linux e está totalmente atualizado.
Responder1
A solução é atribuir um PID do trabalho principal à variável e escrever um script que:
as verificações indicam a temperatura a cada aproximadamente 10 segundos. Algo como
temp=($(sensors | awk -F'[+.]' '{print $2}'))
cria uma tabela
temp
com duas temperaturas (acpitz e coretemp) na minha caixa, pode ser necessário ajustá-la para a saída desensors
.if temp > $TEMPMAX envia
kill -TSTP PID
para o trabalho (CTRL-Z, também conhecido como suspender)(( $temp[1] > 80 || $temp[2] > 80 )) && kill -TSTP $JOBPID
if temp < $TEMPRUN envia
kill -CONT PID
para o trabalho (o mesmo que o comando bg)(( $temp[1] < 40 && $temp[2] < 40 )) && kill -CONT $JOBPID
Como o script será executado com muita frequência, você pode querer obter uma temperatura da fonte em vez do sensors
comando para ganhar um pouco de velocidade. Em minha máquina isso funciona:
temp=($(cut -c 1-2 /sys/class/hwmon/hwmon0/temp1_input) $(cut -c 1-2 /sys/class/hwmon/hwmon1/device/temp2_input))
mas, novamente, pode ser necessário ajustá-lo às suas necessidades.