Capítulo 18. Gerenciamento de energia

Sumário

18.1. Funções de economia de energia
18.2. Advanced Configuration and Power Interface (ACPI)
18.3. Descanso do disco rígido
18.4. Solução de problemas
18.5. Para obter mais informações

O gerenciamento de energia é especialmente importante em laptops, mas também é útil em outros sistemas. A ACPI (Advanced Configuration and Power Interface — Interface de Energia e Configuração Avançada) está disponível em todos os computadores modernos (laptops, desktops e servidores). As tecnologias de gerenciamento de energia exigem hardware adequado e rotinas BIOS. A maioria dos laptops e muitos desktops e servidores modernos atendem a esses requisitos. Também é possível controlar a escala de frequência de CPU para economizar energia ou reduzir o ruído.

18.1. Funções de economia de energia

As funções de economia de energia não são significativas apenas para o uso móvel de laptops, como também para sistemas desktop. As funções principais e respectivas utilizações na ACPI são:

Standby

Não suportado.

Suspender (para memória)

Este modo grava todo o estado do sistema na memória RAM. Em seguida, todo o sistema é colocado em repouso, salvo a memória RAM. Neste estado, o computador consome pouquíssima energia. A vantagem desse estado é a possibilidade de reiniciar o trabalho no mesmo ponto em alguns segundos sem precisar inicializar e reiniciar os aplicativos. Essa função corresponde ao estado da ACPI S3. O suporte desse estado ainda está em desenvolvimento e, portanto, depende muito do hardware.

Suspender (para o disco)

Neste modo operacional, o estado do sistema inteiro é gravado no disco rígido e o sistema é desligado. Deve existir uma partição de troca pelo menos tão grande quanto a RAM para gravar todos os dados ativos. A reativação desse estado leva de 30 a 90 segundos. O estado anterior ao suspenso é restaurado. Alguns fabricantes oferecem variantes híbridas desse modo, como RediSafe em Thinkpads da IBM. O estado correspondente da ACPI é S4. No Linux, a suspensão para disco é desempenhada pelas rotinas de kernel, que são independentes de ACPI.

Monitor de bateria

A ACPI verifica o status da carga da bateria e fornece informações correspondentes. Além disso, ela coordena as ações a serem desempenhadas quando um status de carga crítico é atingido.

Desligamento automático

Após um encerramento, o computador é desligado. Isto é especialmente importante quando um encerramento automático é realizado pouco antes da bateria esgotar-se.

Controle de velocidade do processador

Em conexão com a CPU, é possível economizar energia de três maneiras diferentes: escala de frequência e voltagem (também conhecida como PowerNow! ou Speedstep), throttling e adormecimento do processador (C-states). Dependendo do modo operacional do computador, esses métodos também podem ser combinados.

18.2. Advanced Configuration and Power Interface (ACPI)

A ACPI foi desenvolvida para habilitar o sistema operacional a configurar e controlar cada componente de hardware. A ACPI substitui tanto o Plug and Play (PnP) de Gerenciamento de Energia quanto o Gerenciamento Avançado de Energia (APM). Ela envia informações sobre a bateria, o adaptador de CA, a temperatura, o ventilador e eventos do sistema, como fechar tampa ou bateria fraca.

O BIOS fornece tabelas que contém informações sobre os componentes individuais e métodos de acesso ao hardware. O sistema operacional usa essas informações para tarefas como atribuir interrupções ou ativar e desativar componentes. Como o sistema operacional executa comandos armazenados no BIOS, a funcionalidade depende da implementação do BIOS. As tabelas que a ACPI podem detectar e carregar são reportadas em /var/log/boot.msg. Consulte a Seção 18.2.3, “Solução de problemas” para obter mais informações sobre solução de problemas da ACPI.

18.2.1. Controlando o desempenho da CPU

A CPU pode economizar energia de três maneiras:

Dependendo do modo operacional do computador, estes métodos também podem ser combinados. Economizar energia também significa que o sistema esquenta menos e os ventiladores são ativados com menos frequência.

Expansão e throttling de frequência são relevantes apenas quando o processador está ocupado, pois o C-state mais econômico é aplicado de qualquer maneira quando o processador fica ocioso. Se a CPU estiver ocupada, a escala da frequência é o método recomendado para economia de energia. Em geral o processador só trabalha com carga parcial. Neste caso, pode ser executado com uma frequência inferior. Normalmente, a expansão da frequência dinâmica controlada pelo regulador sob demanda do kernel é a melhor abordagem.

Throttling deve ser usado como última alternativa, por exemplo, para ampliar o tempo de operação da bateria, apesar de uma alta carga do sistema. Contudo, alguns sistemas não são executados suavemente quando ocorrem throttlings em excesso. Ademais, o throttling da CPU não faz sentido se a CPU tem pouco a fazer.

18.2.1.1. Escala de frequência e voltagem

PowerNow! e Speedstep são as designações usadas pela AMD e pela Intel para esta tecnologia. No entanto, essa tecnologia também é aplicada em processadores de outros fabricantes. A frequência do relógio da CPU e sua voltagem básica são reduzidas ao mesmo tempo, resultando em economias de energia mais do que lineares. Isso significa que quando a frequência for reduzida pela metade (meio desempenho), muito menos que metade da energia é consumida. Essa tecnologia é independente de ACPI.

Há duas abordagens principais para realizar a expansão da frequência da CPU—pelo próprio kernel (infraestrutura do CPUfreq com reguladores internos do kernel) ou pela aplicação de espaço do usuário. Os reguladores internos do kernel são reguladores de política capazes de mudar a frequência da CPU com base em diferentes critérios (uma série de esquemas de energia pré-configurados para a CPU). Os seguintes reguladores estão disponíveis com o subsistema CPUfreq:

Regulador de Desempenho

A frequência da CPU é estaticamente definida para o desempenho máximo possível. Consequentemente, a economia de energia não é o foco desse regulador.

Regulador de Economia de Energia

A frequência da CPU é estaticamente definida como a mais baixa possível. Isso pode ter um grave impacto no desempenho, já que o sistema não subirá a uma frequência mais alta do que essa, independentemente do grau de ocupação dos processadores.

Regulador Sob Demanda

A implementação de kernel de uma política de frequência dinâmica da CPU: O regulador monitora a utilização do processador. Assim que ela ultrapassa determinado limite, o regulador define a frequência para a mais alta possível. Se a utilização for menor que o limite, a próxima frequência mais baixa será usada. Se a utilização do sistema continuar sendo abaixo do limite, a frequência será mais uma vez reduzida até chegar à frequência mais baixa disponível.

Regulador Conservador

Semelhante à implementação sob demanda, esse regulador também ajusta dinamicamente as frequências com base na utilização do processador, só que ele permite um aumento mais gradual na energia. Se a utilização do processador exceder determinado limite, o regulador não passará imediatamente para a frequência mais alta possível (como faz o regulador sob demanda), mas apenas para a maior frequência seguinte disponível.

Os arquivos relevantes para os reguladores do kernel estão em /sys/devices/system/cpu/cpu*/cpufreq/. Se a sua máquina tiver mais de uma CPU, /sys/devices/system/cpu/ vai manter um subdiretório para cada processador: cpu0, cpu1, etc. Se o seu sistema utiliza o regulador sob demanda ou conservador, você verá um subdiretório separado para esses reguladores no cpufreq, incluindo os parâmetros desses reguladores.

18.2.1.2. Obstruindo a frequência do relógio (T-states)

Esta tecnologia omite uma determinada porcentagem dos impulsos de sinal do relógio para a CPU. Com throttling a 25%, todo quarto impulso é omitido. A 87,5%, apenas cada oitavo impulso chega ao processador. No entanto, as economias de energia são pouco menos que lineares. Normalmente, o throttling só é usado se a escala da frequência não estiver disponível ou para maximizar as economias de energia. Essa tecnologia deve também ser controlada por um processo especial. A interface do sistema para Estados de Obstrução do Processador (T-states) é /proc/acpi/processor/*/throttling.

18.2.1.3. Adormecendo o processador (C-states)

Processadores modernos têm vários modos de economia de energia denominados C-states. Eles refletem a capacidade de um processador ocioso em desativar componentes não usados para economizar energia. O sistema operacional coloca o processador em repouso sempre que há inatividade. Nesse caso, o sistema operacional envia um comando halt à CPU. Há três estados ociosos: C1, C2 e C3. No estado mais econômico, C3, até a sincronização do cache do processador com a memória principal é desligada. Portanto, esse estado só pode ser aplicado se nenhum dispositivo modificar o conteúdo da memória principal por meio de atividade do barramento mestre. Alguns drivers impedem o uso de C3. O estado atual é exibido em /proc/acpi/processor/*/power.

Para obter maiores informações, consulte a Seção “C-States (Processor Operating States)” (Capítulo 11, Power Management, ↑System Analysis and Tuning Guide (Guia de Análise do Sistema e Ajuste)).

18.2.2. Ferramentas

Para ver ou ajustar as configurações atuais do CPUfreq, o subsistema utiliza as ferramentas fornecidas pelo cpufrequtils para essa finalidade. Após instalar o pacote cpufrequtils, use o cpufreq-info para recuperar as informações de kernel do CPUfreq. O comando cpufreq-set pode ser usado para modificar as configurações do CPUfreq. Por exemplo, execute o seguinte comando como root para ativar o regulador sob demanda em tempo de execução:

cpufreq-set -g ondemand

Para obter mais detalhes e as opções disponíveis, consulte as páginas de manual de cpufreq-info e cpufreq-set ou execute cpufreq-info --help ou cpufreq-set --help, respectivamente.

A gama de utilitários mais ou menos abrangentes da ACPI inclui ferramentas que apenas exibem informações, como o nível de carga e a temperatura da bateria (acpi, klaptopdaemon etc.), ferramentas que facilitam o acesso às estruturas de /proc/acpi ou que auxiliam no monitoramento das mudanças (akpi, acpiw, gtkacpiw), e ferramentas para edição das tabelas da ACPI no BIOS (pacote pmtools).

18.2.3. Solução de problemas

Há dois tipos de problemas. De um lado, o código ACPI do kernel pode conter erros que não foram detectados em tempo útil. Neste caso, uma solução estará disponível para download. O mais comum é que os problemas sejam causados pelo BIOS. Às vezes, desvios da especificação da ACPI são propositalmente integrados ao BIOS para contornar erros na implementação da ACPI em outros sistemas operacionais amplamente utilizados. Componentes de hardware que têm erros sérios na implementação da ACPI são gravados em uma lista negra que impede que o kernel do Linux use a ACPI para esses componentes.

A primeira ação a ser tomada quando problemas forem detectados, é atualizar o BIOS. Se o computador não inicializar de jeito nenhum, um dos seguintes parâmetros de boot poderá ser útil:

pci=noacpi

Não usar ACPI para configurar os dispositivos PCI.

acpi=ht

Realizar apenas uma configuração com recursos simples. Não usar a ACPI para outros fins.

acpi=off

Desabilitar a ACPI.

[Warning]problemas de boot sem ACPI

Algumas máquinas mais novas (especialmente os sistemas SMP e AMD64) precisam de ACPI para configurar o hardware corretamente. Nestas máquinas, desabilitar a ACPI pode causar problemas.

Às vezes a máquina é confundida pelo hardware conectado por USB ou FireWire. Se uma máquina se recusa a inicializar, desconecte todos os itens de hardware desnecessários e tente novamente.

Monitore as mensagens de boot do sistema com o comando dmesg | grep -2i acpi (ou todas as mensagens, porque o problema pode não ser causado pela ACPI) após o boot. Se ocorrer um erro ao analisar uma tabela ACPI, a tabela mais importante — a DSDT (Differentiated System Description Table) — poderá ser substituída por uma versão aprimorada. Neste caso, a DSDT defeituosa do BIOS é ignorada. O procedimento está descrito na Seção 18.4, “Solução de problemas”.

Na configuração do kernel, há um switch para ativar as mensagens de depuração da ACPI. Se um kernel com depuração da ACPI for compilado e instalado, os técnicos que procuram o erro podem ser auxiliados com informações detalhadas.

Se você tiver problemas com BIOS ou hardware, é sempre recomendável entrar em contato com os fabricantes. Especialmente se eles nem sempre derem assistência ao Linux, devem ser indagados em caso de problemas. Os fabricantes só levarão a questão a sério se compreenderem que um número satisfatório de seus clientes usa Linux.

18.2.3.1. Para obter mais informações

18.3. Descanso do disco rígido

No Linux, o disco rígido pode colocado em repouso total se não estiver em uso e pode ser executado em modo mais econômico ou silencioso. Nos laptops modernos, não é necessário desativar o disco rígido manualmente, porque entram automaticamente em um modo operacional econômico sempre que não estão em uso. No entanto, para aumentar a economia de energia, experimente alguns dos seguintes métodos usando o comando hdparm.

Ele pode ser usado para modificar várias configurações de disco rígido. A opção -y alterna instantaneamente o disco rígido para o modo standby. -Y coloca-o em repouso. hdparm -S x faz o disco rígido ser encerrado após um determinado período de inatividade. Substitua x conforme a seguir: 0 desabilita esse mecanismo, fazendo o disco rígido funcionar continuamente. Valores de 1 a 240 são multiplicados por 5 segundos. Valores de 241 a 251 correspondem de 1 a 11 vezes 30 minutos.

As opções de economia de energia interna do disco rígido podem ser controladas pela opção -B. Selecione um valor de 0 a 255 para obter de economia máxima a throughput máximo. O resultado depende do disco rígido usado e é difícil de avaliar. Para tornar um disco rígido mais silencioso, use a opção -M. Selecione um valor de 128 a 254 para obter de silencioso a rápido.

Muitas vezes não é fácil colocar o disco rígido em repouso. No Linux, vários processos gravam no disco rígido, ativando-o repetidamente. Portanto, é importante entender como o Linux trata os dados que necessitam ser gravados no disco rígido. Primeiro, todos os dados estão no buffer da memória RAM. Esse buffer é monitorado pelo daemon pdflush. Quando os dados atingem uma determinada idade limite ou quando o buffer está cheio até certo grau, o conteúdo do buffer é descarregado para o disco rígido. O tamanho do buffer é dinâmico e depende do tamanho da memória e da carga do sistema. Por padrão, pdflush é configurado em intervalos curtos para obter a integridade máxima de dados. Ele verifica o buffer a cada 5 segundos e grava os dados no disco rígido. As seguintes variáveis são interessantes:

/proc/sys/vm/dirty_writeback_centisecs

Inclui o atraso até o thread pdflush ser acionado (em centésimos de segundo).

/proc/sys/vm/dirty_expire_centisecs

Define o período após o qual uma página modificada deve ser gravada por último. O padrão é 3000, o que equivale a 30 segundos.

/proc/sys/vm/dirty_background_ratio

Porcentagem máxima de páginas modificadas para pdflush começar a gravá-las. O padrão é 5%.

/proc/sys/vm/dirty_ratio

Quando a página modificada exceder essa porcentagem da memória total, os processos são forçados a gravar buffers modificados durante suas frações de tempo em vez de continuar gravando.

[Warning]deficiência da integridade de dados

Mudanças nas configurações do daemon pdflush arriscam a integridade dos dados.

Além desses processos, sistemas de arquivos de registro em diário, como ReiserFS, Ext3, Ext4 e outros, gravam seus metadados independentemente do pdflush, o que impede o encerramento do disco rígido. Para evitar isso, foi desenvolvida uma extensão especial de kernel para dispositivos móveis. Para usar a extensão, instale o pacote laptop-mode-tools e consulte /usr/src/linux/Documentation/laptops/laptop-mode.txt para ver os detalhes.

Outro fator importante é o modo como se comportam os programas ativos. Por exemplo, os bons editores gravam regularmente backups ocultos do arquivo modificado no momento para o disco rígido, fazendo com que ele saia do modo de hibernação. Recursos como este podem ser desabilitados às custas da integridade dos dados.

Com relação a isso, o mail daemon postfix faz uso da variável POSTFIX_LAPTOP. Se essa variável for configurada para sim, postfix acessa o disco rígido com muito menos frequência.

No SUSE Linux Enterprise Desktop, essas tecnologias são controladas por laptop-mode-tools.

18.4. Solução de problemas

Todas as mensagens de erro e alertas são registradas no arquivo /var/log/messages. As seções a seguir abordam os problemas mais comuns.

18.4.1. ACPI ativada com suporte de hardware, mas funções não funcionam

Se tiver problemas com a ACPI, procure nos resultados de dmesg por mensagens específicas da ACPI, utilizando o comando dmesg|grep -i acpi.

Poderá ser necessário atualizar o BIOS para solucionar o problema. Na home page do fabricante do seu laptop, procure uma versão atualizada do BIOS e instale-a. Peça ao fabricante para estar em conformidade com a última especificação da ACPI. Se os erros persistirem após a atualização do BIOS, faça o seguinte para substituir a tabela DSDT defeituosa no seu BIOS com um DSDT atualizado:

Procedimento 18.1. Atualizando a tabela DSDT no BIOS

Para o procedimento a seguir, verifique se os seguintes pacotes estão instalados: kernel-source, acpica e mkinitrd.

  1. Faça o download do DSDT para o seu sistema em http://acpi.sourceforge.net/dsdt/index.php. Verifique se o arquivo está descompactado e compilado como mostra a extensão de arquivo .aml (linguagem computacional ACPI). Se for o caso, continue com a etapa 3.

  2. Se a extensão de arquivo da tabela descarregada for .asl (linguagem de origem da ACPI), compile-a executando o seguinte comando:

    iasl -sa file.asl
  3. Copie o arquivo (resultante) DSDT.aml para qualquer local (/etc/DSDT.aml é recomendado).

  4. Edite /etc/sysconfig/kernel e adapte o caminho para o arquivo DSDT de forma compatível.

  5. Inicie o mkinitrd. Sempre que você instalar o kernel e usar o mkinitrd para criar um arquivo initrd, a DSDT modificada será integrada e carregada quando o sistema for inicializado.

18.4.2. A frequência da CPU não funciona

Consulte as fontes do kernel para ver se o seu processador é suportado. Você poderá precisar de um módulo de kernel ou de opção especial para ativar o controle de frequência da CPU. Se o pacote kernel-source estiver instalado, essas informações estarão disponíveis em /usr/src/linux/Documentation/cpu-freq/*.

18.4.3. Suspender e Standby não funcionam

Os sistemas ACPI podem ter problemas com suspender e standby devido a falha na implementação de DSDT (BIOS). Se esse for o seu caso, atualize o BIOS.

Quando o sistema tenta descarregar módulos defeituosos, o sistema é verificado ou o evento suspenso não é acionado. O mesmo também pode acontecer se você não descarregar módulos ou interromper serviços que impeçam uma suspensão bem-sucedida. Em ambos os casos, tente identificar o módulo defeituoso que impediu o modo adormecido. O arquivo de registro /var/log/pm-suspend.log contém informações detalhadas sobre o que está ocorrendo e onde estão os erros possíveis. Modifique a variável SUSPEND_MODULES em /usr/lib/pm-utils/defaults para descarregar os módulos com problema antes de efetuar suspensão ou standby.

Consulte http://old-en.opensuse.org/Pm-utils e http://en.opensuse.org/SDB:Suspend_to_RAM para obter informações mais detalhadas sobre como modificar o processo de suspensão e continuação.

18.5. Para obter mais informações