Desacelere apenas um processo para regular a temperatura da CPU

6
  1. Eu tenho um programa. Quando está a funcionar, a temperatura da CPU aumenta 50 a 80 Celcius, que é minha maior preocupação.

    Eu posso controlar a frequência da CPU para retardá-la, mas outros processos será desacelerado também, o que eu não quero.

    É possível retardar um processo específico sem afetar outros processos para manter a CPU fresca?

    Meu sistema operacional é o Ubuntu 10.10.

  2. Eu tentei definir a prioridade do processo em nice -n 15 myprogram e não tenho certeza se isso funcionará. A CPU é de 77 Celcius Alto.

    O nice apenas define a prioridade relativa de um processo para outro processos? Ou seja, se outros processos não estiverem sendo executados, isso será afetado processo corre rápido? Eu gostaria de definir o processo para ser executado devagar tudo.

por Tim 17.08.2011 / 00:39

3 respostas

13

CPULimit é exatamente o que você precisa. Você inicia o programa e executa cpulimit contra o nome do programa ou PID, especificando qual porcentagem você deseja limitar.

O comando a seguir limita o processo no PID 7777 para 5% do uso da CPU.

cpulimit -p 7777 -l 5

Como alternativa, você pode usar o nome do executável:

cpulimit -e myprogram -l 5

Ou o caminho absoluto do executável:

cpulimit -P /path/to/myprogram -l 5

Observe que a porcentagem é de todos os núcleos; então se você tem 4 núcleos, você pode usar 400%.

    
por 17.08.2011 / 01:47
8

Você pode renegar um processo em execução para dar mais ou menos prioridade (o chamado "bom valor"). Nota que a escala de prioridades do UNIX é um pouco contra-intuitiva: negativa valores significam que um processo é favorecido em processos concorrentes, isto é, tem "mais" prioridade.

Assim, você pode tentar "desacelerar" seu processo, dado seu PID por meio de:

# lower priority of a process
renice +1 "PID"

Toda vez que você executa isto, o processo "nice value" é gerado por 1; você pode usar valores inteiros diferentes de +1 , claro.

O comando bom permite que você iniciar um processo com um ajuste de valor agradável de +10 (altere isto com opção -n ). Por exemplo:

# start a CPU-intensive task with low priority
nice ./cpu-hog

No entanto, o "valor legal" afeta apenas o quanto o planejador favorece executando um processo em particular sobre os outros no sistema: se o seu computador é basicamente ocioso, elevando o "bom valor" de um único processo irá não impedir que o processo tome 100% da CPU. Eu cito do getpriority (2) manpage : (Ênfase adicionada por mim.)

The degree to which their relative nice value affects the scheduling of processes varies across Unix systems, and, on Linux, across kernel versions. Starting with kernel 2.6.23, Linux adopted an algorithm that causes relative differences in nice values to have a much stronger effect. This causes very low nice values (+19) to truly provide little CPU to a process whenever there is any other _higher priority load on the system._

A razão para isso reside na forma como os processos são executados em um Kernel do tipo UNIX: toda vez que o kernel decide executar um processo, processo tem controle total de um núcleo de CPU para um certo (fixo e curto) período de tempo. O "bom valor" pode influenciar a frequência com que o kernel agendador está disposto a dar um horário para um processo, mas você não pode alterar o fato de que, uma vez agendado, um processo é executado sem interrupções quantidade fixa de tempo.

Portanto, além de desacelerar sua CPU, não há como fazer uma o processo é executado mais lentamente se não houver outros processos no sistema que pode disputar o acesso da CPU.

    
por 17.08.2011 / 01:05
3

cgroups foram criados exatamente por esse motivo.

link link

Demora um pouco para se familiarizar com eles, e acredito que você precise de acesso root para configurá-los, mas tudo pode ser roteirizado. O Ubuntus mais novo tem um arquivo .conf para que você não tenha que escrever seu próprio script. Não tenho certeza sobre 10.10.

Um bom lugar para começar é nesta resposta: link

Note que o cgroups ainda está em desenvolvimento ativo, então alguns recursos podem estar indisponíveis no seu kernel atual.

Usar cpu.shares não faz nada que um valor legal não faça. Parece que você quer limitar os processos, o que definitivamente pode ser feito.

Você precisará usar um script ou dois, e / ou editar /etc/cgconfig.conf para definir os parâmetros desejados.

Especificamente, você quer editar os valores cpu.cfs_period_us e cpu.cfs_quota_us . O processo será executado em microssegundos cpu.cfs_quota_us por microssegundos cpu.cfs_period_us .

Por exemplo:

Se cpu.cfs_period_us = 50000 e cpu.cfs_quota_us = 10000 , o processo receberá 20% do tempo máximo da CPU, independentemente do que estiver acontecendo.

Nesta tela eu dei ao processo 2% do tempo de CPU:

Noquedizrespeitoaoprocesso,eleestáfuncionandoa100%.

Configuraçõescpu.sharesporoutroladopodemeaindausarão100%dotempodeCPUinativo.

Nesteexemplosemelhante,deioprocessocpu.shares=100(de1024):

Como você pode ver, o processo ainda está consumindo todo o tempo de CPU inativo.

Referências:

link link

    
por 10.04.2015 / 03:13

Tags