Existe uma maneira de fazer seu processo usar menos CPU?

3

Eu quero que meu dispositivo use menos CPU para economizar bateria. Eu tenho um programa que usa uma grande quantidade dele. nice não ajudará, já que tudo o que faz é mudar o agendamento quando a CPU está em 100%, enquanto eu não quero que fique tão alto

    
por John 13.05.2014 / 22:15

3 respostas

1

Para fazer com que sua CPU use menos bateria, você precisa dela para rodar mais devagar. A quantidade total de instruções de CPU necessárias para executar seu programa não depende da velocidade com que ele é executado, portanto, limitar a proporção de tempo de CPU usada por seu programa faria com que ele usasse mais CPU, não menos. Quando sua CPU não está fazendo nada em vez de executar seu programa, ela ainda está usando energia. Na melhor das hipóteses, as pausas durante as quais a CPU não está fazendo nada serão longas o suficiente para entrar em um estado de economia de energia; mas mesmo assim você pagará uma penalidade pelas transições de estado de energia extras.

Limitar a proporção do tempo de CPU usado pelo seu processo pode ter o efeito indireto de fazer com que o kernel mude para uma velocidade de clock da CPU menos rápida. Se isso acontece depende da escolha do governador de freqüência da CPU e dos números exatos envolvidos. Isso acontecerá com o governador padrão (ondemand), mas a taxa é difícil de controlar.

Se você quiser economizar energia, a melhor estratégia é permitir que seu programa use 100% da energia disponível da CPU (para que termine o mais rápido possível), mas mude sua CPU para funcionar o mais lentamente possível (porque o quantidade de energia gasta por instrução aumenta com a velocidade da CPU).

Você pode configurar a freqüência da CPU através de parâmetros em /sys/devices/system/cpu/cpu0/cpufreq e seus primos, ou com várias interfaces de usuário. Os utilitários cpufreq fornecem duas ferramentas de linha de comando: cpufreq-info , cpufreq-set . Existe um conjunto de ferramentas mais avançado chamado cpupower que agora está incluído nos fontes do kernel. Se você usa o Gnome, você pode usar seu applet Cpufreq. Existem outras GUIs.

Para economizar o máximo de bateria possível, execute sua CPU na frequência mínima. Execute cpufreq-info para exibir as freqüências disponíveis. Execute cpufreq-set -c 0 -g powersave para sempre executar a CPU 0 em sua frequência mínima (repita com valores crescentes para -c para as outras CPUs).

    
por 14.05.2014 / 02:30
0

você pode usar o cpulimit para um PID específico por exemplo

 sudo cpulimit -b -l 80 -p 1183

renice:

renice +19 1183

isto irá definir a prioridade para o mais baixo possível para 1183

    
por 13.05.2014 / 22:23
-2

Não sei se existe uma solução elegante para isso, mas você pode parar e reiniciar o processo com sinais:

PID=1234
mode=running
run_time=0.1
stop_time=0.1
while true; do
  if [ running = "$mode" ]; then
    kill -STOP "$PID"
    mode=stopped
    sleep "$run_time"
  else
    kill -CONT "$PID"
    mode=running
    sleep "$stop_time"
  fi
done
    
por 13.05.2014 / 22:22