Regulando velocidade e energia gasta pelos processadores. Método moderno. cpupower

Publicado por Alberto Federman Neto. em 16/06/2015

[ Hits: 5.678 ]

Blog: https://ciencialivre.blog/

 


Regulando velocidade e energia gasta pelos processadores. Método moderno. cpupower



Há vários anos, eu publiquei um artigo sobre regulagem da CPU para performance máxima:
Embora essencialmente o artigo seja ainda muito válido, ele foi escrito na época do antigo OpenRC e hoje muitas distros usam systemd. Algumas coisas mudaram nos ajustes, nas regulagens.

Entre as coisas que se pode fazer para aumentar (ou diminuir) a performance da CPU, gastando mais ou menos energia elétrica, é setar o "Governor".

Isso é uma forma de passar instruções ao kernel, para que ele controle a "velocidade" e a energia elétrica gasta.

Os "Governor" existentes, são basicamente cinco:
  1. "Powersave" - modo de menor frequência de CPU, mais econômico.
  2. "Conservative" - modo dinâmico, ajuste automático, mas que mantém a energia elétrica a um gasto pequeno ou moderado.
  3. "Ondemand" - modo dinâmico, que ajuste automaticamente a frequência e a energia gasta pelos processadores, em função das tarefas realizadas. É o modo padrão em várias distros.
  4. "Usespace" - é um modo onde o usuário regula a frequência dos processadores, a um valor fixo: alta, baixa ou moderada frequência.
  5. "Performance" - modo de alta performance, o máximo da frequência admitida pelos núcleos do processador.

Eu sempre uso em desktops: "ondemand" ou "performance" (quando quero alta performance. É o único modo útil em CPUs overclocadas), mas para notebooks, recomendo que usem "powersave" ou "conservative", para não gastarem muita bateria.

É possível regular, setar manualmente, mas há pacotes que facilitam essa regulagem. O que ocorre é que: com o systemd e os novos kerneis, os pacotes antigos para isso, se tornaram obsoletos.

Para AMD se usavam os pacote "powernowd" (ainda existe, mas geralmente não se usa mais). Para Intel e AMD, o pacote mais usado era o "cpufreqd" e seus utilitários ("cpufreutils").

Esse é o pacote que eu citei e usei no meu antigo artigo. Não sei em outras distros, mas pelo menos em Sabayon e Gentoo, ele não existe mais, está deprecado, obsoleto:
Agora se usa o pacote "cpupower" que interage direto com o módulo de kernel e tem muitos recursos.

Inclusive, funciona tanto no Systemd como no antigo OpenRC (SysVinit), além de ter opções que permitem regular o "governor" especificamente para um ou mais núcleos.

Vamos ver como se usa o "cpupower".

Se você usava "cpufreqd" , precisa desinstalar os pacotes antigos. Desinstale os pacotes "cpufreqd" e "cpufrequtils". Em Sabayon Linux, é executando este comando:

# equo rm -v cpufreqd cpufrequtils

Agora instale na sua distro o pacote "cpupower". Em Sabayon:

# equo i -av cpupower

Remova os serviços de boot que se referiam ao antigo pacote. Conforme seu sistema seja OpenRC ou systemd. Em Sabayon com OpenRC;

# rc-update del cpufreqd cpufrequtils

Em distros Debian, creio que o comando é:

sudo update-rc.d cpufreq remove

Com systemd:

# systemctl disable cpufreqd.service
# systemctl disable cpufrequtils.service


Agora adicione os serviços correspondentes ao pacote cpupower (que acabou de instalar):

Em Sabayons com OpenRC:

# rc-update add cpupower
# /etc/init.d/cpupower start


Em distros com systemd:

# systemctl enable cpupower.service
# systemctl start cpupower.service


Agora pode selecionar o "Governor" que quiser usar:

# cpupower frequency-set -g "nome do governor"

Nos meus sistemas, regulei para "ondemand".

Vejam o "governor ondemand" funcionando no meu Sabayon, instalado em um Phenon de 8 núcleos, de frequência padrão, não overclocado:

cpupower frequency-info
Analisando o CPU 0:
  driver: acpi-cpufreq
  CPUs que rodam na mesma frequência de hardware: 0
  CPUs que precisam ter suas frequências coordenadas por software: 0
  maior latência de transição: 4.0 us.
  limites do hardware: 1.40 GHz - 3.10 GHz
  níveis de frequência disponíveis: 3.10 GHz, 2.80 GHz, 2.30 GHz, 1.90 GHz, 1.40 GHz
  reguladores do cpufreq disponíveis: conservative, ondemand, powersave, userspace, performance
  política de frequência atual deve estar entre 1.40 GHz e 3.10 GHz.
                  O regulador "ondemand" deve decidir qual velocidade usar
                  dentro desse limite.
  frequência atual do CPU é 1.40 GHz.
status do cpufreq: 3.10 GHz:73,35%, 2.80 GHz:0,51%, 2.30 GHz:1,06%, 1.90 GHz:3,56%, 1.40 GHz:21,53% (88002)


Note que somente um dos núcleos (dos oito) está funcionando bastante e está em frequência, alta, portanto, bem controlado o sistema pelo governor "ondemand":

sudo cpupower monitor -l
Monitor "Mperf" (3 states) - Might overflow after 922000000 s
C0      [T] -> Processor Core not idle
Cx      [T] -> Processor Core in an idle state
Freq    [T] -> Average Frequency (including boost) in MHz
Monitor "Idle_Stats" (3 states) - Might overflow after 4294967295 s
POLL    [T] -> CPUIDLE CORE POLL IDLE
C1      [T] -> <null>
C2      [T] -> ACPI IOPORT 0x815


sudo cpupower monitor
    |Mperf               || Idle_Stats
CPU | C0   | Cx   | Freq || POLL | C1   | C2
   0|  7,24| 92,76|  1547||  0,00|  0,70| 92,41
   1|  2,56| 97,44|  1668||  0,00|  0,58| 97,09
   2|  8,67| 91,33|  1571||  0,00|  4,94| 86,74
   3|  1,45| 98,55|  1643||  0,00|  0,09| 98,64
   4|  9,00| 91,00|  1584||  0,00|  4,99| 86,36
   5|  4,08| 95,92|  1682||  0,00|  0,10| 96,06
   6|  2,50| 97,50|  3709||  0,00|  6,11| 91,56
   7| 99,63|  0,37|  3717||  0,00|  0,06|  0,00

Há várias outras opções no pacote e nos comandos do "cpupower". Detalhes, veja:
Outras dicas deste autor

Seu compilador GCC não funciona mais, como solucionar?

GTK-Splitter - Dividindo arquivos grandes em partes menores com facilidade

Tecla "PrintScreen" não captura mais a tela em KDE5 [Resolvido]

Firefox - Melhorando o áudio e o vídeo

Medindo velocidade e eficiência da internet através de sistemas online

Leitura recomendada

Pesquisa de Compatibilidade de Hardware

Placa PcChips e Modem PcTel

Verificando identificador físico da HBA Fiber Channel (WWN ou WWID)

Ativando placa wireless Broadcom DCM4312 no Debian Lenny

Instalando Driver Nvidia no Slackware 13.37

  

Comentários
[1] Comentário enviado por niquelnausea em 18/06/2015 - 16:27h

ha alguns anos estava atrás de informações sobre como economizar eletricidade, já que o pc ficava 24h ligados compartilhando torrents, me lembro de ter compilado o kernel com a opção [i]ondemand[/i] e (praticamente) ter resolvido o problema. hoje uso um notebook para esta tarefa, dando uma olhada nas configurações do kernel, vi que o mesmo já é compilado com a opção [i]ondemand[/i] habilitada, mas ao verificar as possíveis opções para meu processador, me espantei ao ver que só existem duas:

$ cpupower frequency-info
analisando o CPU 0:
driver: intel_pstate
CPUs que rodam na mesma frequência de hardware: 0
CPUs que precisam ter suas frequências coordenadas por software: 0
maior latência de transição: 0.97 ms.
limites do hardware: 800 MHz - 2.20 GHz
reguladores do cpufreq disponíveis: performance, powersave
política de frequência atual deve estar entre 800 MHz e 2.20 GHz.
O regulador "powersave" deve decidir qual velocidade usar
dentro desse limite.
frequência atual do CPU é 987 MHz.
boost state support:
Supported: no
Active: no
25500 MHz max turbo 4 active cores
25500 MHz max turbo 3 active cores
25500 MHz max turbo 2 active cores
25500 MHz max turbo 1 active cores


obrigado pela dica, e vamos aos testes!!!

[2] Comentário enviado por albfneto em 14/06/2017 - 18:49h

ATUALIZAÇÃO DESTA DICA

4 de Julho de 2018.

Nos Sabayon Linux novos, 17 e 18, o pacote "cpupower" já é o default do sistema, não há mais necessidade de instalá-lo.

Mas você observará que, se você trocar o "governor" na Tela Gráfica no no comando do "cpupower", após reboot , ele vai voltar ao default, "powersave", por causa nas configurações salvas que o systemd acessa.

Eu gosto de usar "ondemand" ou "performance".

Para corrigir isso, edite o arquivo /etc/sysconfig/cpupower e nas linhas default:

# See 'cpupower help' and cpupower(1) for more info
CPUPOWER_START_OPTS="frequency-set --governor powersave"
CPUPOWER_STOP_OPTS=""

troque "powersave" por "ondemand"

Também, se você quiser observar se os governors estão funcionando legal, em cada núcleo do processador, use um comando completo:

$ cpupower -c all frequency-info

Por exemplo, eu tenho 8 núcleos e eles aparecem, um a um.


¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].



Contribuir com comentário