Gerenciamento de energia

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), redução na temperatura e redução na conta de luz. Com exceção de versões antigas do Celeron, todos os processadores atuais oferecem suporte a sistemas avançados 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:

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, usaria:

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

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. 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.

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 fosse rápido.

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 fazer 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 o processador 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 processador 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

 

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X