Evita que um processo use muita CPU, mesmo se houver mais CPU disponível

0

Eu gostaria de evitar que um processo usasse muito CPU (na verdade, eu quero evitar que meu processador se aqueça, já que eu tenho algumas tarefas muito longas exigindo CPU (conversão de vídeo) para rodar a partir de um Raspberry Pi com Debian. nele: a temperatura sobe acima de 80 ° C).

Eu vi que há um comando cpulimit , mas não sei como executar meu comando com ele, pois ele parece ter o pid (ID do processo) como argumento ou um arquivo executável com o código a ser executado , não o próprio comando bash. Eu gostaria de ver diretamente o que minha tarefa retorna e ser capaz de Ctrl-C, se necessário. Nota: se eu tentar colocar meu comando de tarefa em um arquivo e executar cpulimit -l 20 --path=/path/to/my/file.sh , ele retornará Warning: no target process found. Waiting for it... Portanto, parece que não consigo entender 1) o que o argumento --path realmente faz, e 2) como use corretamente o cpulimit em qualquer comando do terminal ...

Eu prefiro não usar soluções alternativas como nohup my-command --my-args & , mesmo que secundariamente retorne o pid e deixe-me escrever o comando cpulimit para ele.

Obrigado antecipadamente!

    
por Johannes Lemonde 27.02.2018 / 21:18

1 resposta

1

Eu vou te dar duas respostas: uma que usa cpulimit e uma alternativa que faz mais sentido.

Primeira resposta: se você está tentando limitar um script com cpulimit , por que não executa as tarefas individuais dentro do script em cpulimit ? Por exemplo:

#!/bin/dash
cpulimit --limit 20 -- ~/bin/mprime/mprime -t  # starts a slow mprime

Resposta alternativa: você está apresentando um problema x-y. Você quer dar tempo à CPU para esfriar, mas você está fazendo isso com um programa que funciona suspendendo e retomando processos rapidamente.

NOTES
    cpulimit always sends the SIGSTOP and SIGCONT signals to a process,
    both to verify that it can control it  and  to  limit  the  average
    amount  of  CPU it consumes ...

Não só isso é um kludge impreciso que pode ser replicado com um bash one-liner, mas também note que cpulimit mexe com os descritores de arquivo de uma forma que pode estragar os programas. Por exemplo, eu tinha executado mprime no modo interativo com cpulimit --limit 20 -- ~/bin/mprime/mprime no primeiro exemplo, eu teria visto um loop infinito de mprime prompts inundar meu terminal até que eu SIGKILLed cpulimit e mprime manualmente. / p>

Seu objetivo é dar ao processador algum tempo ocioso. A maneira correta de fazer isso é fazer o downclock do processador para que ele gaste mais tempo sem fazer nada. Como o dispositivo em questão é um Raspberry Pi, isso não deve ser muito difícil de realizar.

P.S .: Rui F Ribeiro está correto, pois limitar a tarefa de processamento intensivo a um único núcleo ajudará a manter as temperaturas baixas. Não faz sentido mover continuamente o processo entre os núcleos, pois isso não ajudará o processador a se refrescar de alguma forma, já que a mesma quantidade de energia ainda está sendo despejada no mesmo chip.

    
por 27.02.2018 / 22:14