Melhore o rendimento da bateria no laptop Linux, com o TLP

O TLP é uma ferramenta avançada de gestão de energia e seu objetivo é melhorar o rendimento da bateria do seu notebook.
É fácil de instalar e começar a usar — até por que vem com uma configuração padrão, já otimizada para aumentar o rendimento.
Ao mesmo tempo, é altamente personalizável e permite ao usuário criar seus próprios ajustes.
O TLP oferece perfis de configuração separados para quando o laptop estiver conectado à tomada ou usando apenas a bateria. Pode ativar/desativar os dispositivos bluetooth, WiFi e o rádio WWAN, já na inicialização do sistema, de acordo com as suas necessidades.


A possibilidade de desligar recursos de conectividade é ótimo para usuários que usam o equipamento para estudar ou ler material que já se encontram no laptop, em locais que não tem acesso à Internet.

Você tem um Thinkpad? O TLP tem um modo unificado de configuração da carga e de calibragem da bateria para estes notebooks.

Para concluir a apresentação, trata-se de uma ferramenta CLI (de linha de comando) que executa suas tarefas em segundo plano e, até o momento não tem uma interface GUI (gráfica).

O TLP permite escalar os ajustes das CPUs, tanto nas mais antigas como nas mais atuais — com o uso do intel p_state.

Como instalar o TLP

A ferramenta está presente nos repositórios das principais distribuições — eu testei no Debian 9, Fedora 25 e OpenSUSE Tumbleweed.
No Debian e nas distribuições derivadas, use o apt:

sudo apt install tlp

No Fedora e nas distribuições derivadas, use o dnf:
dnf search install tlp

dnf install tlp

No openSUSE, use o zypper:
opensuse zypper search install tlp

zypper install tlp

Isto é o suficiente. Após a instalação, o TLP já começa a fazer seu trabalho.
É importante dizer que vai conflitar com outras ferramentas de gestão de energia que já estejam instaladas no seu sistema — como o cpufrequtils, por exemplo. Portanto, remova-as antes de instalar o TLP.

Configuração e uso do TLP

As configurações padrão irão satisfazer a maioria dos usuários de laptops com Linux.
Captura de tela tlp tools
Você pode invocar as ferramentas (com privilégios administrativos) que fazem parte do pacote TLP:

  • tlp-pcilist — exibe informações relativas aos dispositivos PCI do sistema
  • tlp-stat — exibe o estado (status) do TLP — a configuração, ajustes de gestão de energia do sistema e informações adicionais
  • tlp-usblist — exibe dados dos dispositivos USB

Todas as configurações estão em um único arquivo, situado em /etc/default.
O arquivo é bem organizado e autoexplicativo (em inglês).
Se for alterá-lo, faça backup antes, para pode voltar à configuração padrão sem precisar desinstalar (com o –purge).

Possíveis problemas com o TLP

Lentidão pode ser um dos efeitos colaterais esperados de qualquer sistema de gestão inteligente de energia.
Para melhorar a performance da bateria, o sistema irá sacrificar a do processador. Você não pode ter as duas coisas.
Neste caso, não experimentei nenhuma degradação “acima do aceitável” no desempenho do meu sistema e estou satisfeito com o ganho (por volta de 25% ou quase uma hora) da bateria do meu notebook.
Li relatos de problemas com drives flash SSD e eles podem ser contornados ao comentar as seguintes linhas (veja a figura) no arquivo de configuração /etc/default/tlp:
tlp disk settings
Comente as linhas com um “#”:

# DISK_DEVICES="sda sdb"

# DISK_APM_LEVEL_ON_AC="254 254"
# DISK_APM_LEVEL_ON_BAT="128 128"

Acompanhe o consumo de energia de cada programa no seu sistema com o aplicativo powertop

Cada aplicativo em execução no seu sistema, consome a carga da sua bateria.
Podem ser programas que já são parte do sistema operacional, tais como o Firefox, o LibreOffice etc.
O powertop permite saber qual software está consumindo mais energia no seu sistema.

Além disto, ajuda a fazer ajustes para otimizar o consumo e proporcionar um tempo maior de uso entre uma recarga e outra.

O aplicativo é estável e possui boa parte de sua documentação já traduzida para português, veja:

# para usuários Debian/Ubuntu
apt show powertop

A descrição (resumida) do aplicativo, segue abaixo:

Description: diagnóstico de problemas com gerenciamento e consumo de energia (power)
 PowerTOP é uma ferramenta do Linux para diagnóstico de problemas com
 gerênciamento e consumo de energia. Adicionalmente para ser uma ferramenta
 de diagnóstico, o PowerTOP também tem um modo interativo que você pode usar
 para experimentar com várias configurações de gerênciamento de energia para
 casos onde a distribuição Linux não habilitou estas configurações.
 .
 PowerTOP relata quais componentes no sistema estão mais sujeitos a consumir
 mais energia do que o necessário, variando entre os aplicativos de software
 para componentes ativos no sistema. Telas detalhadas estão disponíveis para
 o 'CPU C' e 'P states', atividade de dispositivos e atividade de software.

No OpenSUSE, resultado semelhante será obtido com o seguinte comando:

zypper show powertop

Como instalar o powertop no Linux

Se você usa o Debian, Ubuntu ou outra distro baseada nestas, use o apt, para instalar o powertop:

sudo apt update
sudo apt install powertop

Usuários do openSUSE, podem usar o zypper:

sudo zypper update
sudo zypper install powertop

É sugerido (opcional) instalar, ainda, o pacote cpufreq, para obter melhores estatísticas e mais capacidade de manuseio do sistema.

Como ajustar o powertop

Após a instalação, recomenda-se reiniciar o computador.
Depois, calibrar as leituras obtidas a partir da bateria, com o seguinte comando:

sudo powertop -c

O procedimento de calibragem leva, aproximadamente, 15 minutos.
O sistema irá desligar a tela algumas vezes e você ficará impedido de fazer qualquer atividade no seu laptop durante todo o processo .
Isto é normal. Pegue um café e espere.
Quando o processo tiver terminado, um relatório em HTML pode ser obtido com o seguinte comando:

sudo powertop --html=desempenho.html

Acima, usei o nome ‘desempenho.html’, mas use o que quiser.
Para abrir o arquivo dentro do seu navegador preferido, basta citar o nome dele:

firefox desempenho.html

powertop linux
As estatísticas do upower podem ser encontradas em ‘/var/lib/upower/’:

sudo ls -lah /var/lib/upower/history-*
-rw-r--r-- 1 root root 29K dez 14 18:09 /var/lib/upower/history-charge-DELL_7P3X953I-43-0948.dat
-rw-r--r-- 1 root root 14K dez 14 18:09 /var/lib/upower/history-rate-DELL_7P3X953I-43-0948.dat
-rw-r--r-- 1 root root 18K dez 14 18:09 /var/lib/upower/history-time-empty-DELL_7P3X953I-43-0948.dat
-rw-r--r-- 1 root root 19K dez 14 18:09 /var/lib/upower/history-time-full-DELL_7P3X953I-43-0948.dat

Se você quiser dar um reset nas estatísticas, remova estes arquivos:

sudo rm /var/lib/upower/*

Alguns fabricantes (System76) recomendam – caso o indicador do ciclo de carga da bateria esteja impreciso – remover as estatísticas (com o comando acima).
Depois deste procedimento, após alguns ciclos completos de cargas/descargas as informações voltarão a ser mais exatas.

Como testar se seu hardware tem suporte a hibernação, suspensão ou suspensão-híbrida

A hibernação é um recurso que pode causar perda de dados em sistemas de hardware que não estejam preparados para ele ou que não sigam padrões abertos.
Felizmente, o Ubuntu e o Debian dispõem de ferramentas para testar a compatibilidade do seu hardware com os utilitários que aplicam estes recursos.
Não esqueça de conferir, ao final do texto, alguns links para artigos sobre hibernação, suspensão e suspensão-híbrida — há coisas interessantes, lá! 😉
ubuntu desligar hibernar
Um dos utilitários que fazem o teste é o pm-is-supported e faz parte do pacote de ferramentas pm-utils.
Por exemplo, para testar se seu sistema tem suporte a hibernação, use o comando assim:

pm-is-supported --hibernate

Não se preocupe se não vir resultado algum.
O fato é que o utilitário foi feito para ser usado dentro de scripts.
Para montar um script bem simples de testes, abra um terminal e crie um arquivo com o nome hibteste.sh (claro que você pode usar outro nome… ).
A seguir cole o seguinte texto dentro dele:

#!/bin/bash

if pm-is-supported --hibernate;
        then
        echo 'sim';
        else
        echo 'não';
fi

Em seguida, torne o arquivo executável e rode-o:

chmod +x hibteste.sh
./hibteste.sh

Agora, sim. Você não vai ficar sem resposta.
script pm-is-supported
O utilitário pm-is-supported pode ser usado com outros parâmetros:

  1. --suspend — para verificar se há suporte a suspensão do sistema.
  2. --suspend-hybrid — para verificar se há suporte a suspensão-híbrida do sistema.

Ele vai retornar 0 (para recurso disponível) ou 1 (para recurso não disponível).
Este artigo é um spin-off do Como habilitar a opção de hibernação no Ubuntu, onde o teste é necessário.

Referências

  1. Quais as diferenças entre Suspender, Hibernar e Suspender-híbrido? — https://elias.praciano.com/2014/09/suspender-ou-hibernar/.
  2. Como configurar o laptop para hibernar ou suspender, quando fechar a tampa? — https://elias.praciano.com/2015/11/como-configurar-o-notebook-para-suspender-ou-hibernar-quando-fechar-a-tampa-no-debian-e-ubuntu/.
  3. Como ativar a opção Hibernar no menu do Ubuntu? — https://elias.praciano.com/2016/04/como-habilitar-a-opcao-de-hibernacao-no-ubuntu/.
  4. Como ativar a opção suspend-sedation? — https://elias.praciano.com/2015/11/como-configurar-o-sistema-para-o-estado-suspend-sedation/.

Como habilitar a opção de hibernação no Ubuntu

A opção de hibernação no menu principal do Ubuntu e no menu de desligamento é desativada para evitar incompatibilidades com alguns hardwares específicos.
Se o seu hardware segue padrões de mercado e é amigável com sistemas operacionais abertos, ele provavelmente suporta bem a função de hibernação e, portanto, nada mais justo do que você ter acesso a ela, a partir dos menus.
Ubuntu menu suspend
Se você quiser entender melhor as diferenças entre suspender, hibernar e suspender-híbrido, leia este artigo.
Este texto se baseia em uma máquina Ubuntu 16.04 LTS Xenial Xerus, as instruções foram testadas em uma máquina Ubuntu 14.04 LTS e também no Xubuntu 16.04 LTS — com sucesso.
Se você ainda tiver algum problema, relate-o nos comentários.
Como forma de complementar este post, sugiro a leitura de Como configurar o notebook para suspender ou hibernar quando fechar a tampa no Debian e Ubuntu.
Aqui, vou abordar apenas a ativação da opção “Hibernar” nos menus de desligamento do Ubuntu.
Antes de partir para a solução, sugiro que você verifique se não tem problemas com hibernação no seu hardware.
Isto é muito fácil de se fazer.
Abra um terminal (Ctrl + Alt + T) e digite o comando abaixo, seguido de Enter:

sudo pm-hibernate

Aguarde o processo de hibernação se completar e ligue novamente a máquina.
Se você preferir, o artigo Como checar o suporte a hibernação, suspensão e suspensão híbrida, pode ajudar a verificar sem necessidade de desligar nada.
Se você teve problemas durante o processo, deve buscar formas de resolvê-los, antes de prosseguir.
Problemas na hibernação podem estar sendo causados pelo tamanho inadequado da partição de swap, no seu sistema. Leia mais sobre isto aqui.


Screenshot from 2016-04-28 19-43-11
Se tudo correu bem durante o teste, volte ao terminal para aplicar a solução relativa ao menu.
Como administrador do sistema abra o arquivo “/etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla”.
Se você não conseguir encontrar este arquivo, tente achá-lo em “var/lib/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla”.
Cole o texto que segue, dentro dele:

[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate
ResultActive=yes

Salve e feche o arquivo.
Se achar mais confortável, você pode reiniciar o seu computador — mas encerrar a sessão do Ubuntu e se autenticar de novo já é o suficiente.
Note que a opção Hibernar, agora está lá, no menu.
hibernate-in-menu-ubuntu
Ao pressionar o botão de desligar do laptop, a opção Hibernar também se fará presente.
ubuntu desligar hibernar
Referências:

https://help.ubuntu.com/16.04/ubuntu-help/power-hibernate.html.
http://ubuntuhandbook.org/index.php/2014/04/enable-hibernate-ubuntu-14-04/.

Como configurar o sistema para o estado Suspend sedation quando fechar a tampa do laptop

Quando o seu laptop suspende o sistema, armazenando seu estado atual na RAM, ele passa a usar uma quantidade ínfima de energia (apenas o suficiente para manter a imagem do sistema).
No modo de suspensão, contudo, a sessão em que você está ou estava trabalhando não persiste no disco rígido. Portanto, quando a carga da bateria chega ao nível crítico, o sistema será forçado a desligar e você terá que passar por todo o processo de boot novamente.
Há 2 formas de resolver este problema:

  1. O modo clássico (e simples), que consiste na suspensão híbrida, na qual a máquina é suspensa e, ainda assim, guarda o estado atual no disco (como na hibernação). Funciona com a velocidade da suspensão e, quando a carga da bateria acaba, oferece a comodidade da hibernação (que é ainda mais rápida que um boot completo).
    Se você quer conhecer mais sobre esta solução leia os seguintes tutoriais:
    Para usuários Ubuntu 14.04 LTS ou anterior. sugiro a leitura do artigo Suspender, hibernar e suspender-híbrido.
    Como configurar para suspender, hibernar ou suspender-híbrido no systemd, para usuários Debian 8 ou Ubuntu 15.10 (ou superior) ou de qualquer outra distro que use o systemd.
  2. Se você preferir o modo suspend sedation, este texto é pra você. Boa leitura!

O que é suspend sedation

Para escrever este guia, estou usando o Debian 8.2 “Jessie” que, a exemplo do Ubuntu 15.10, faz uso do systemd — o que acarreta algumas mudanças e adições no sistema.
A proposta é usar o real-time wake timer para permitir que o sistema acorde da suspensão, após um tempo predeterminado, e ative a hibernação.
É nisto que consiste o suspend sedation, que faz uso de alguns dos recursos do systemd.

Como ativar o suspend sedation no Debian

Crie o arquivo /etc/systemd/system/suspend-sedation.service, com o seguinte conteúdo:

# /etc/systemd/system/suspend-sedation.service
[Unit]
Description=Hibernate after suspend
Documentation=https://bbs.archlinux.org/viewtopic.php?pid=1420279#p1420279
Documentation=https://wiki.archlinux.org/index.php/Power_management
Documentation=https://wiki.debian.org/SystemdSuspendSedation
Conflicts=hibernate.target hybrid-suspend.target
Before=suspend.target
StopWhenUnneeded=true

[Service]
Type=oneshot
RemainAfterExit=yes
Environment="ALARM_SEC=300"
Environment="WAKEALARM=/sys/class/rtc/rtc0/wakealarm"

ExecStart=/usr/sbin/rtcwake --seconds $ALARM_SEC --auto --mode no
ExecStop=/bin/sh -c '\
ALARM=$(cat $WAKEALARM); \
NOW=$(date +%%s); \
if [ "$NOW" -ge "$ALARM" ]; then \
  echo "suspend-sedation: Acordei - sem alarme definido. Hibernando..."; \
  systemctl hibernate; \
else \
  echo "suspend-sedation: Acordei antes do alarme. Despertar normal."; \
  /usr/sbin/rtcwake --auto --mode disable; \
fi \
'

[Install]
WantedBy=sleep.target

Depois de criar o arquivo, ative-o, através do seguinte comando:

sudo systemctl enable suspend-sedation
Created symlink from /etc/systemd/system/sleep.target.wants/suspend-sedation.service to /etc/systemd/system/suspend-sedation.service.

Se você estiver interessade em ver as mensagens de log deste script, use o journalctl:

journalctl -u suspend-sedation

ou verifique o arquivo /var/log/daemon.log:

cat /var/log/daemon.log | grep suspend-sedation

Discussão

Se você quiser alterar o script acima, não esqueça de repetir o processo de criação do symlink, depois de salvar as mudanças:

sudo systemctl disable suspend-sedation; sudo systemctl enable suspend-sedation

Esta solução foi desenvolvida pelo e12e (link no final) para usar no sistema com dual boot Windows/Linux. Funciona bem em sistemas com boot Linux Exclusive (meu caso). Devo relatar que tive problemas para aplicar esta solução com um monitor HDMI conectado ao notebook (ele não entra em modo de suspensão) — Tudo bem. Eu só fecho a tampa do notebook quando estou fora de casa e sem um segundo monitor conectado.

Referência

https://wiki.debian.org/SystemdSuspendSedation