Índice das dicas

Dicas de gerenciamento de energia no Linux

Por Carlos E. Morimoto em 9 de maio de 2009 às 17h19

16

Se fôssemos comparar a indústria dos processadores à industria automotiva, os primeiros anos do século 21 seriam equivalentes à década de 70: uma época de carros gastadores, onde o que importava era a potência e não a eficiência. Passada a época do Pentium 4, a ênfase passou a ser a eficiência, ou seja a "performance por watt", o que levou ao lançamento dos processadores da safra atual.

Além de toda a questão ecológica, a redução no consumo elétrico tem muitas vantagens práticas, já que se traduz em um aumento da autonomia da bateria (no caso dos notebooks) e reduções na conta de luz. Com exceção de versões antigas do Celeron, todos os processadores atuais oferecem suporte a sistemas de gerenciamento de energia, que são suportados no Linux através do próprio kernel. Quase todas as distribuições configuram as funções básicas de economia de energia de forma automática, mas é sempre bom entender melhor como o sistema funciona.

A base de tudo é um pequeno conjunto de módulos de kernel (chamados de "governors", ou gerenciadores) que oferecem diferentes opções de gerenciamento. O módulo "cpufreq_powersave" é o mais conservador, mantendo o processador o tempo todo na frequência mínima, enquanto o "cpufreq_performance" faz o oposto, mantendo o processador o tempo todo na frequência máxima (essencialmente desativando o gerenciamento).

Entre os dois temos os módulos "cpufreq_ondemand", que é o mais equilibrado, ajustando a frequência de acordo com a demanda e o "cpufreq_conservative", que também ajusta a frequência de acordo com a carga, mas é mais conservador que o ondemand, priorizando o uso das frequências mais baixas:

energia_html_42be1489

A maneira mais prática de alternar entre eles é simplesmente usar o applet do gnome-power-manager ou o Kpowersave, mas você pode também ajustar a configuração via linha de comando usando o comando "cpufreq-set" (ele faz parte do pacote "cpufrequtils", que deve ser instalado previamente), como em:

# cpufreq-set -g ondemand

ou:

# cpufreq-set -g powersave

Tradicionalmente, o powersave é o que oferece a melhor autonomia, já que ele simplesmente trava o clock do processador no nível mais baixo. Entretanto, o ondemand vem se tornando bastante eficiente nas versões recentes do kernel e a diferença entre os dois em situações normais de uso já é bem pequena, já que o chaveamento entre as frequências é feito de forma muito rápida, de acordo com a carga de processamento exigida. O processador passa então a maior parte do tempo operando na frequência mínima, chaveando para as outras frequências rapidamente quando tem trabalho a realizar e logo voltando ao estado de baixo consumo.

Outra observação importante é que o gerenciamento do clock é baseado em funções do ACPI, por isso deixam de funcionar caso o serviço "acpid" seja desativado, ou caso você use o "acpi=off" na tela de boot.

Embora pouco usado, está disponível também um utilitário para definir a frequência manualmente, o "cpufreq-set". Para usá-lo, o primeiro passo é verificar as frequências suportadas pelo processador, usando o "cpufreq-info" (que também faz parte do pacote "cpufrequtils)":

$ cpufreq-info

cpufrequtils 002: cpufreq-info (C) Dominik Brodowski 2004-2006
Report errors and bugs to linux@brodo.de, please.
analyzing CPU 0:

driver: powernow-k8
CPUs which need to switch frequency at the same time: 0
hardware limits: 1000 MHz - 2.00 GHz
available frequency steps: 2.00 GHz, 1.80 GHz, 1000 MHz
available cpufreq governors: powersave, performance, userspace
current policy: frequency should be within 1000 MHz and 2.00 GHz.
The governor "userspace" may decide which speed to use
within this range.
current CPU frequency is 1000 MHz (asserted by call to hardware).

Neste exemplo, estou usando um Athlon 64 3000+, que opera nativamente a 2.0 GHz e suporta também as frequências de 1.8 e 1.0 GHz. Para que o processador ficasse o tempo todo funcionando a 1.8 GHz, por exemplo, você usaria:

# cpufreq-set -g userspace
# cpufreq-set -f 1800MHz

O cpufreq-set permite apenas chavear entre as frequências suportadas, por isso não adianta tentar usá-lo para tentar forçar outros valores, pois os comandos serão simplesmente ignorados. O "cpufreq-set -g userspace" do primeiro comando ativa o governador "userspace", que desativa o chaveamento automático e permite que você especifique a frequência manualmente.

Em situações normais, não existe motivo para usá-lo, já que se for para usar a frequência mínima você pode simplesmente usar o "powersave" e, se for para utilizar qualquer estágio intermediário, seria mais eficiente usar o "ondemand". Entretanto, ele pode ser útil para fazer testes, simulando o desempenho de processadores com clocks diferentes, por exemplo, ou servindo como uma ferramenta para solucionar problemas, em casos em que o sistema detecte incorretamente a frequência máxima de operação do processador.

Uma observação importante é que tanto os processadores Intel Core quanto os Athlon X2 e Phenom suportam apenas três ou quatro frequências diferentes, com a frequência mínima sendo sempre de 600 MHz a 1.0 GHz. Esta foi a solução encontrada pelos fabricantes para manter um desempenho equilibrado, evitando que o PC ficasse excessivamente lento quando o processador estivesse em estágio de baixo consumo e fazendo com que o chaveamento entre os modos fossem rápidos.

Existe também um módulo antigo, o "p4-clockmod", que era usado em conjunto com os processadores Pentium 4 e continua sendo compatível com muitos dos processadores atuais. Ele permite definir frequências muito mais baixas, a partir de 133 MHz. O grande problema é que ele é baseado no uso de ciclos de espera e não na redução do clock, o que faz com que o desempenho caia drasticamente, mas o consumo continue quase o mesmo.

Se você tiver um Eee 900 ou qualquer outro portátil baseado no Celeron M (que não suporta os outros módulos de gerenciamento), você poderia fazer o teste usando o:

# modprobe p4-clockmod
# cpufreq-set -f 113MHz

Você verá que o desempenho será realmente reduzido, mas a temperatura do processador e o uso da bateria continuarão quase os mesmos, sintoma de que o processador continua ativo. Ou seja, é besteira tentar usá-lo. Ele é apenas uma herança nefasta da plataforma NetBurst.

Embora o ajuste de frequência seja geralmente relacionado aos notebooks, ele é também muito importante nos desktops, que muitas vezes ficam ligados continuamente sem fazerem nada. O simples fato de ativar o gerenciamento usando o gerenciador "ondemand" pode gerar uma redução de 30 a 40 watts no consumo, o que representa uma economia mensal considerável. Para isso, basta instalar o cpufreutils:

# apt-get install cpufreutils

Em distribuições antigas, era necessário carregar uma lista de módulos manualmente antes de poder usar o cpufreq, como em "modprobe acpi freq_table speedstep-centrino cpufreq_powersave cpufreq_conservative cpufreq_ondemand cpufreq_userspace". Entretanto, nas distribuições atuais isso não é mais necessário, já que os módulos são carregados automaticamente pelo HAL.

Outra diferença é que nas versões atuais do kernel é usado o novo módulo "acpi-cpufreq", em vez dos módulos speedstep-centrino (Pentium-M e processadores da plataforma Core), powernow-k8 (processadores AMD de 64 bits) e powernow-k7 (Athlon XP Mobile), que eram usados nas versões anteriores. Você pode verificar qual driver está sendo usado na linha "driver:", na saída do cpufreq-info.

Ao ser instalado, o cpufrequtils ativa automaticamente o gerenciador ondemand e fica ativo continuamente como serviço, passando a ser inicializado automaticamente durante o boot. Caso precise desativá-lo temporariamente, use o "/etc/init.d/cpufrequtils stop".

Execute novamente o "cpufreq-info" e ele deverá mostrar que ele está trabalhando na frequência mínima, indicando que o gerenciamento está ativo, como em:

available frequency steps: 2.00 GHz, 1.60 GHz, 1.20 GHz
available cpufreq governors: userspace, powersave, ondemand, conservative, performance
current policy: frequency should be within 1.20 GHz and 2.00 GHz.

The governor "ondemand" may decide which speed to use within this range.
current CPU frequency is 1.20 GHz.

Embora as respostas para algumas tarefas leves (como abrir menus) possam ficar sutilmente mais lentas, o desempenho do sistema em tarefas intensivas continuará rigorosamente o mesmo, já que o sistema demora poucos milessegundos para chavear para a frequência máxima quando exigido. Além da economia na conta de luz, o gerenciamento tem um efeito positivo sobre a vida útil, já que reduz a dissipação térmica e consequentemente a temperatura.

Caso necessário, você pode também alterar as opções do cpufreutils, usando o gerenciador powersave ou restringindo a frequência máxima, por exemplo. Nesse casos, crie (ou edite) o arquivo "/etc/default/cpufrequtils" (ou "/etc/sysconfig/cpufrequtils", nas distribuições derivadas do Red Hat), especificando o gerenciador que será usado e (opcionalmente) a frequência mínima e máxima que você quer que sejam usadas, entre as suportadas pelo processador, como em:

governor="ondemand"
min_freq="1GHz"
max_freq="2GHz"

Sempre que modificar o arquivo, não esqueça de reiniciar o serviço, como em:

# /etc/init.d/cpufrequtils restart

16 comentáriosPor Carlos E. Morimoto. Revisado 24 de março de 2011 às 14h37

Comentários

 
por PierreR1 (anônimo) em 11 de abril de 2010 às 16h03
qual dos comandos devo usar para economizar energia e o processador funcionar conforme a necessidade.
Pergunto, pois novato é curioso mesmo, desculpem-me.
Abraços ...
 
por PierreR1 (anônimo) em 11 de abril de 2010 às 16h01
Para um phenon quad core isso faz diferença ...?
 
por jp (anônimo) em 13 de janeiro de 2010 às 12h12
Morimoto, no applet do ubuntu ele marcava a frequencia minima e tava com o ondemand selecionado. Durante a leitura desse post, instalei o cpufreutils e depois li "Ao ser instalado, o cpufrequtils ativa automaticamente o gerenciador ondemand e fica ativo continuamente como serviço..." isso altera/entra em conflito com o que ja tinha antes da instalaçao??? Ainda vai usar a frequencia maxima sempre q necessario e a minima no restante do tempo??? Obrigado
 
por cb (anônimo) em 3 de janeiro de 2010 às 10h17
Não sei porque, mais com a criação de /etc/default/cpufrequtils, como você sugeriu, meus pobremas acabaram. Prêmio Organizações Tabajara para você!
 
por Denis (anônimo) em 12 de maio de 2009 às 20h33
Não são somente os processadores de notebooks que tem powersave.Processadores novos para desktop também o tem como os Athlon AM2 e o Core 2 Duo e Quad (processadores recentes )
 
por ricardo (anônimo) em 12 de maio de 2009 às 19h54
Valeu Emerson, pesquisei la na wikipédia e vi que o meu processador é um Celeron de um núcleo, 65nm, baseado na arquitetura do processador Meron Core 2 (família Meron-1024), e que incluem os seguintes modelos: o Celeron M 520 (1.6 GHz), o 530 (1.73 GHz), o 540 (1.86 GHz), o 550 (2.0 GHz), o 560 (2.13 GHz) [que é o meu!! =)] e o 575 (2.00 GHz). Todos estes possuem 533MHz de FSB, 1MB de cache L2, suporte a XD-bit e à tecnologia intel 64 bits; porém sem o suporte a SpeedStep e sem tecnologia para virtualização.

Então, só pra resumir, só é possível economizar energia e prolongar a vida da bateria em notebooks que possuam suporte a speedstep ou powersaving??

Obrigado,

Valeu!
 
por Matheus (anônimo) em 12 de maio de 2009 às 18h47
aah é mesmo, pesquisei no wikipedia :S
Abraço, obrigado!
 
por Emerson (anônimo) em 12 de maio de 2009 às 15h26
Pessoal,

O Athlon XP de desktop não tem o powernow (só o Mobile), que é o meu caso e o do Matheus, veja aqui:
http://en.wikipedia.org/wiki/PowerNow!

A mesma coisa vale para o Celeron, nenhum deles tem essa funcionalidade.

Abraço,

Emerson
 
por ricardo (anônimo) em 12 de maio de 2009 às 12h15
olá, eu acho que estou com o mesmo problema do Matheus =/... gostaria de saber como que eu faço pra ver se o meu processador tem suporte para economia de energia. O meu é um celeron D 5.... 2.14Ghz, ms nao sei ver se ele tem suporte. Conto com a ajuda de vocês!! Muito obrigado!
 
por hamilton (anônimo) em 10 de maio de 2009 às 20h12
Uma coisa que não foi mencionada, pelo menos no meu note é asssim, é que em processadores multicores você tem que configurar o governor para cada core com a opção -c