Eu tenho um programa Quando está em execução, a temperatura da CPU aumenta de 50 para 80 graus Celsius, o que é minha maior preocupação.
Posso controlar a frequência da CPU para diminuir a velocidade, mas outros processos também serão mais lentos, o que não quero.
É possível desacelerar um processo específico sem afetar outros processos para manter a CPU fria?
Meu sistema operacional é o Ubuntu 10.10.
Tentei definir a prioridade do processo
nice -n 15 myprogram
e não tenho certeza se isso funcionará. A CPU tem 77 Celcius de altura.Não
nice
só definir a prioridade relativa de um processo WRT outros processos? Ou seja, se outros processos não estiverem em execução, esse processo ordenado será executado rapidamente? Eu gostaria de definir o processo como lento durante todo o processo.
9
Respostas:
CPULimit é exatamente o que você precisa. Você inicia o programa e executa cpulimit no nome do programa ou no PID, especificando a porcentagem que você deseja que seja limitada.
O comando a seguir limita o processo no PID 7777 a 5% de uso da CPU.
Como alternativa, você pode usar o nome do executável:
Ou o caminho absoluto do executável:
Observe que a porcentagem é de todos os núcleos; então, se você tiver 4 núcleos, poderá usar 400%.
fonte
Você pode renomear um processo em execução para dar mais ou menos prioridade (o chamado "bom valor"). Observe que a escala de prioridade do UNIX é um tanto contra-intuitiva: valores negativos significam que um processo é favorecido em relação a processos simultâneos, ou seja, tem "mais" prioridade.
Assim, você pode tentar "desacelerar" seu processo, devido ao seu PID por meio de:
Toda vez que você executa isso, o processo "bom valor" é aumentado em 1; você pode usar valores inteiros que não sejam, é
+1
claro.O comando nice permite iniciar um processo com um ajuste de 10 valores legais (altere isso com a opção
-n
). Por exemplo:No entanto, o "bom valor" afeta apenas o quanto o agendador favorece a execução de um processo específico em detrimento de outros no sistema: se o computador estiver basicamente ocioso, aumentar o "bom valor" de um único processo não impedirá que esse processo tome 100% CPU. Cito a página de manual getpriority (2) : (Ênfase adicionada por mim.)
O motivo disso reside na maneira como os processos são executados em um kernel do tipo UNIX: toda vez que o kernel decide executar um processo, esse processo tem controle total do núcleo da CPU por um certo período de tempo (fixo e curto). O "bom valor" pode influenciar a frequência com que o agendador do kernel está disposto a atribuir um intervalo de tempo a um processo, mas você não pode alterar o fato de que, uma vez agendado, um processo é executado sem perturbações por um período fixo de tempo.
Portanto, além de diminuir a velocidade da CPU, não há como tornar o processo mais lento se não houver outros processos no sistema que possam competir pelo acesso à CPU.
fonte
nice
não fará nada para manter o processador frio. Não foi projetado para funcionar assim.Os cgroups foram criados exatamente por esse motivo.
http://www.kernel.org/doc/Documentation/cgroups/ http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm
Demora um pouco para se familiarizar com eles, e acredito que você precisa de acesso root para configurá-los, mas tudo pode ser script. O Ubuntus mais recente possui um arquivo .conf para que você não precise escrever seu próprio script. Eu não tenho certeza sobre 10.10.
Um bom lugar para começar é nesta resposta: https://askubuntu.com/a/94743/170177
Note que o cgroups ainda está em desenvolvimento ativo, então alguns recursos podem não estar disponíveis no seu kernel atual.
Usar o cpu.shares do cgroups não faz nada que um bom valor não faria. Parece que você deseja realmente acelerar os processos, o que definitivamente pode ser feito.
Você precisará usar um script ou dois e / ou editar o /etc/cgconfig.conf para definir os parâmetros desejados.
Especificamente, você deseja editar os valores cpu.cfs_period_us e cpu.cfs_quota_us . O processo irá então ser permitido correr para cpu.cfs_quota_us microssegundos por cpu.cfs_period_us microssegundos.
Por exemplo:
Se cpu.cfs_period_us = 50000 e cpu.cfs_quota_us = 10000 , o processo receberá 20% do tempo máximo da CPU, não importa o que esteja acontecendo.
Nesta captura de tela, eu dei ao processo 2% do tempo da CPU:
No que diz respeito ao processo, ele está funcionando a 100%.
As configurações cpu.shares, por outro lado, podem e ainda usarão 100% do tempo ocioso da CPU.
Neste exemplo semelhante, eu dei o processo cpu.shares = 100 (de 1024):
Como você pode ver, o processo ainda está consumindo todo o tempo ocioso da CPU.
Referências:
http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.html http://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups .html
fonte
systemd
faz as coisas um pouco diferentes. O Ubuntu Trusty, por exemplo, parece vir com dois serviços para gerenciar cgroups. Vou atualizar quando souber mais.renice
?renice
não altera a quantidade de CPU usada, apenas altera a prioridade do processo no planejador. O cgroups pode alterar o limite da CPU a qualquer momento. Desde que esta resposta foi publicada, o cgroups teve todos os tipos de ajustes adicionados e é muito poderoso.renice does not change the amount of CPU uses
Eu sei;) Acabei de publicar como exemplo de um programa que muda as coisas em tempo de execução. Obrigado pela sua resposta, vou tentar cgroups.