Eu costumo andar com meu laptop pra lá e pra cá o dia inteiro e nem sempre tenho a chance ligar ele em uma fonte de energia. A bateria dura mais ou menos 2 horas durante atividades normais, mas eu sempre estou tentando achar maneiras de diminuir o consumo e ganhar mais alguns minutinhos de bônus. Algumas coisas que se pode tentar é reduzir o brilho do monitor, desligar as conexões wireless e não “estressar” o disco.

Recentemente eu descobri que os processadores atuais já tem um suporte bem consolidado a mudar a frequência em que rodam enquanto rodam e o Linux consegue fazer ótimo uso desta capacidade. Eu tentei portanto dar uma futricada nisso para ver se arrancava um tempinho extra da bateria e vou relator os meus esforços aqui.

Pra quem não sabe, a frequência em que o processador roda é diretamente proporcional à velocidade dele, ao gasto de energia e à dissipação de calor. Logo o que estaremos fazendo aqui é trocando eficiência por bateria. Esta perda de eficiência não é de todo ruim, o meu Intel i3 roda com uns 40% da frequência máxima e não é possível notar a diferença. Isto porque na maioria do tempo o computador esta lidando com arquivos, com a rede ou desenhando coisas na tela e deixando o processador “de braços cruzados”. Obviamente vamos ver a diferença em atividades que exigem mais esforço do processador, como por exemplo jogos.

O jeito difícil: cpufreq + linha de comando

No ubuntu, instalando o pacote cpufreq-utils você tem acesso a uma série de comandos que podem ser usados para manualmente configurar a frequência do processador. Ao todo os programas que vem no pacote são cpufreq-set, cpufreq-aperf, cpufreq-selector, cpufreq-info. Os mais importantes para a gente aqui são o cpufreq-set e o cpufreq-info e servem, respectivamente, para mudar a frequência dos núcleos da CPU e conseguir informações sobre eles.

Rode o cpufreq-info e dê uma olhada. Para cada um dos núcleos da CPU serão impressos alguns dados importantes: a frequência em que ele está rodando, o tipo de “governor” sendo usado (mais sobre isso daqui a pouco), a frequência mínima e o máxima que pode ser designada, a lista de frequências que podem ser designadas. Para nossos fins vamos usar aquelas duas últimas informações. Este é um script que eu fiz para usar estas informações e configurar a velocidade de todos núcleos do meu processador.

#!/bin/bash

SUDO=gksudo
NPROC=3 #number of cores - 1
TYPE=$1

for x in $( seq 0 $NPROC )
do
 $SUDO "cpufreq-set -c $x -d 933MHz -u 2.27GHz" 
done

for x in $( seq 0 $NPROC )
do
 $SUDO "cpufreq-set -c $x -g $TYPE"
done

Em suma para cada um dos núcleos (um número de 0 até N-1 dado na opção -c) eu digo qual é a frequência mínima (opção -d), a máxima (opção -u). Depois para cada um dos núcleos eu designo um tipo de “governor” da CPU (opção -g) este tipo vem diretamente do parâmetro que o usuário digita quando chama o script. Obviamente os valores de frequência variam para cada processador e você deve usar os que descobriu no passo anterior. Note que eu uso sudo porque é preciso ser o administrador de uma máquina para modificar a frequência.

Exemplos de uso

Assumindo que o script se chama cpuconf:

$ cpuconf powersave #roda todos núcleos na frequência mínima 
$ cpuconf performance #roda todos núcleos na frequência máxima
$ cpuconf ondemand #muda a frequência baseado no uso da CPU

Mas o que são os “governors”?

São programas que monitoram o uso da CPU e definem políticas de modificação das frequências de acordo com os dados que coletam. Por padrão os núcleos rodam em ondemand e economizam energia quando não percebem um uso muito intenso. O governor que queremos é o powersave pois ele força sempre a frequência mínima configurada. Note que o performance pode ser útil também em casos que não queremos frescura apenas pura performance, como durante jogos ou quando estamos processando áudio.

É seguro brincar com estes parâmetros?

Aparentemente não existe muito perigo de configurar alguma coisa errado e destruir o computador porque o programa simplesmente ignora comandos que “não fazem sentido”  como colocar a frequência da CPU maior do que ela é capaz.

O jeito fácil: CPU Frequency Monitor

Depois de brincar com tudo isto eu descobri este aplicativo simples que podemos deixar no painel do Gnome, o CPU Frequency Monitor. Ele dá uma indicação gráfica da frequência sendo usada e suporta a modificação da frequência e governor para cada um dos núcleos usando uma interface gráfica.

Provavelmente existem programas semelhantes a este para KDE e afins.

Conclusão

Ok, mas e os resultados do uso de energia usando frequências menores? Para falar a verdade não é nada muito impressionante, eu diria que talvez eu tenha ganho de 5 a 10 minutos de uso, o que só mostra que o governor padrão já é bastante bom ou que a CPU não é responsável por um grande uso da bateria, pelo menos em laptops.

Neste artigo existe uma comparação dos diferentes governors e seus respectivos usos de energia. De qualquer forma eu aprendi um bocado e espero que quem leu esta parede de texto até o final também tenha aprendido.

Mais informações