33.3. ACPI

A ACPI (Interface de Energia e Configuração Avançada) foi projetada para habilitar o sistema operacional a configurar e controlar os componentes individuais do hardware. A ACPI substitui PnP e APM. Envia informações sobre a bateria, adaptador de CA, temperatura, 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 33.3.4, “Solução de problemas” para obter mais informações sobre solução de problemas da ACPI.

33.3.1. ACPI em ação

Se o kernel detectar um BIOS de ACPI quando o sistema for inicializado, a ACPI será automaticamente ativada e o APM desativado. O parâmetro de inicialização acpi=force poderá ser necessário para algumas máquinas mais antigas. O computador deve aceitar ACPI 2.0 ou posterior. Verifique as mensagens de boot do kernel em /var/log/boot.msg para ver se a ACPI foi ativada.

Em seguida, deverá ser carregado um número de módulos. Isso é feito pelo script de início de acpid. Se algum destes módulos causar problemas, o módulo respectivo poderá ser excluído de carregar ou descarregar em /etc/sysconfig/powersave/common. O registro do sistema (/var/log/messages) contém as mensagens dos módulos, permitindo que você veja que componentes foram detectados.

/proc/acpi agora contém vários arquivos que fornecem informações sobre o estado do sistema ou que podem ser usados para mudar alguns dos estados. Alguns recursos ainda não funcionam porque estão em desenvolvimento e o suporte de algumas funções depende muito da implementação do fabricante.

Todos os arquivos (exceto dsdt e fadt) podem ser lidos com cat. Em alguns arquivos, as configurações podem ser modificadas com echo, por exemplo, echo X > file para especificar valores adequados para X. Uma possibilidade para acesso fácil a esses valores é o comando powersave, que age como um front end para o daemon de economia de energia. Os arquivos mais importantes estão descritos abaixo:

/proc/acpi/info

Informações gerais sobre a ACPI.

/proc/acpi/alarm

Aqui, especifique quando o sistema deve ser ativado de um estado de inatividade. Atualmente, esse recurso não é totalmente suportado.

/proc/acpi/sleep

Fornece informações sobre possíveis estados de adormecimento.

/proc/acpi/event

Todos os eventos são reportados aqui e processados pelo daemon do Powersave (powersaved). Se nenhum daemon acessar o arquivo, eventos como um clique rápido no botão de alimentação ou fechamento da tampa podem ser lidos com cat /proc/acpi/event (encerrar com Ctrl-C).

/proc/acpi/dsdt e /proc/acpi/fadt

Estes arquivos contêm as tabelas DSDT (differentiated system description table - tabela de descrição de sistema diferenciado) e FADT (fixed ACPI description table - tabela de descrição de ACPI fixa) da ACPI. Elas podem ser lidas com acpidmp, acpidisasm e dmdecode. Estes programas e sua documentação localizam-se no pmtools do pacote. Por exemplo, acpidmp DSDT | acpidisasm.

/proc/acpi/ac_adapter/AC/state

Mostra se o adaptador de CA está conectado.

/proc/acpi/battery/BAT*/{alarme,info,estado}

Informações detalhadas sobre o estado da bateria. O nível de carga é lido através da comparação da última capacidade cheia e info com a capacidade remanescente no estado. Um modo mais confortável de fazer isto é usar um dos programas especiais apresentados na Seção 33.3.3, “Ferramentas da ACPI”. O nível de carga em que o evento bateria (como um alerta, baixa e crítica) é acionado pode ser especificado em alarme.

/proc/acpi/button

Este diretório contém informações sobre vários switches, como botões e a tampa do laptop.

/proc/acpi/fan/FAN/state

Mostra se o ventilador está ativo atualmente. Ativar ou desativar o ventilador manualmente, escrevendo 0 (ligado) ou 3 (desligado) neste arquivo. No entanto, os dois códigos da ACPI no kernel e no hardware (ou no BIOS) sobregravam esta configuração no caso de aquecimento do sistema.

/proc/acpi/processor/*

É mantido um subdiretório separado para cada CPU incluída no seu sistema.

/proc/acpi/processor/*/info

Informações sobre as opções de economia de energia do processador.

/proc/acpi/processor/*/power

Informações sobre o estado atual do processador. Um asterisco próximo a C2 indica que o processador está inativo. Este é o estado mais freqüente, como pode ser verificado no valor de utilização.

/proc/acpi/processor/*/throttling

Pode ser usado para configurar o throttling do relógio do processador. Normalmente, é possível o throttling em oito níveis. Isto é independente do controle de freqüência da CPU.

/proc/acpi/processor/*/limit

Se o desempenho (desatualizado) e o throttling forem controlados automaticamente por um daemon, os limites máximos podem ser especificados aqui. Alguns dos limites são determinados pelo sistema. Alguns podem ser ajustados pelo usuário.

/proc/acpi/thermal_zone/

Existe um subdiretório separado para cada zona térmica. Uma zona térmica é uma área com propriedades térmicas similares, cujo número e nomes são designados pelo fabricante do hardware. No entanto, muitas das possibilidades oferecidas pela ACPI raramente são implementadas. Ao contrário, o controle de temperatura convencionalmente é administrado pelo BIOS. O sistema operacional não tem muita oportunidade de intervir, porque a vida útil do hardware está ameaçada. Portanto, alguns dos arquivos têm apenas um valor teórico.

/proc/acpi/thermal_zone/*/temperature

Temperatura atual da zona térmica.

/proc/acpi/thermal_zone/

O estado indica se tudo está ok ou se a ACPI aplica o resfriamento ativo ou passivo. No caso de controle de ventilador independente da ACPI, o estado está sempre ok.

/proc/acpi/thermal_zone/*/cooling_mode

Selecione o método de resfriamento controlado pela ACPI Escolha o modo de resfriamento passivo (menor desempenho, econômico) ou ativo (total desempenho, ruído do ventilador).

/proc/acpi/thermal_zone/*/trip_points

Habilita a determinação de limites de temperatura para acionamento de ações específicas, como resfriamento ativo ou passivo, suspensão (quente), ou um shutdown (crítico). As ações possíveis são definidas no DSDT (dependente do dispositivo). Os pontos de desligamento determinados na especificação da ACPI são crítico, quente, passivo, ativo1 e ativo2. Mesmo que nem todos eles sejam implementados, devem ser sempre digitados neste arquivo nesta ordem. Por exemplo, a entrada echo 90:0:70:0:0 > trip_points configura a temperatura de crítico a 90 e a temperatura de passivo a 70 (todas as temperaturas medidas em graus Celsius).

/proc/acpi/thermal_zone/*/polling_frequency

Se o valor em temperatura não for atualizado automaticamente quando a temperatura mudar, alterne o modo polling aqui. Com o comando echo X > /proc/acpi/thermal_zone/*/polling_frequency a temperatura é verificada a cada X segundos. Configure X=0 para desabilitar o polling.

Nenhuma destas configurações, informações e eventos precisam ser editados manualmente. Isto pode ser feito com o daemon do Powersave (economia de energia) e diversos front ends, como powersave, kpowersave e wmpowersave. Consulte a Seção 33.3.3, “Ferramentas da ACPI”.

33.3.2. 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 freqüência.

Dimensionamento de freqüência e voltagem

PowerNow! e Speedstep são as designações de uso AMD e Intel para esta tecnologia . No entanto, essa tecnologia também é aplicada em processadores de outros fabricantes. A freqüê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 freqüência for reduzida pela metade (meio desempenho), muito menos que metade da energia é consumida. Essa tecnologia é independente de APM ou ACPI. Há duas abordagens principais para executar a escala de freqüência da CPU: pelo próprio kernel ou por um aplicativo de espaço de usuário. Portanto, há diferentes gerenciadores de kernel que podem ser definidos abaixo de /sys/devices/system/cpu/cpu*/cpufreq/.

gerenciador de espaço de usuário

Se o gerenciador de espaço de usuário estiver definido, o kernel passa o controle da escala de freqüência de CPU para um aplicativo de espaço de usuário, geralmente um daemon. Em distribuições do SUSE Linux, este daemon é o pacote powersaved. Quando essa implementação é usada, a freqüência de CPU é ajustada em relação à carga do sistema atual. Por padrão, uma das implementações de kernel é usada. Porém, em alguns hardwares ou em relação a drivers ou processadores específicos, a implementação do espaço de usuário ainda é a única solução que funciona.

gerenciador em demanda

Esta é a implementação de kernel de uma política de freqüência de CPU dinâmica e deve funcionar na maioria dos sistemas. Assim que houver uma carga alta de sistema, a freqüência de CPU é imediatamente aumentada. Ela é reduzida em uma carga de sistema baixa.

gerenciador conservador

Esse gerenciador é similar à implementação em demanda, exceto que uma política mais conservadora é usada. A carga do sistema deve ser alta por um tempo específico antes que a freqüência do CPU seja aumentada.

gerenciador de economia de energia

A freqüência de cpu é definida estaticamente para o mais baixo possível.

gerenciador de desempenho

A freqüência de cpu é definida estaticamente para o mais alto possível.

Throttling da freqüência do relógio

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 o dimensionamento da freqüência não estiver disponível ou para maximizar as economias de energia. Essa tecnologia também deve ser controlada por um processo especial. A interface do sistema é /proc/acpi/processor/*/throttling.

Colocando o processador para hibernar

O sistema operacional coloca o processador para hibernar sempre que não houver nada para fazer. Neste caso, o sistema operacional envia um comando de halt para a CPU. Há três estados: C1, C2 e C3. No estado mais econômico, C3, até a sincronização do cache do processador com a memória principal é interrompida. 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.

O dimensionamento e o throttling da freqüência só são relevantes se o processador estiver ocupado, porque o estado C mais econômico é aplicado sempre que o processador está inativo. Se a CPU estiver ocupada, o dimensionamento da freqüê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 freqüência inferior. Normalmente, a escala de freqüência dinâmica controlada pelo gerenciador em demanda do kernel ou por um daemon, como powersaved, é o melhor método. Uma configuração estática em baixa freqüência é útil para operações à bateria ou se você desejar que o computador permaneça frio ou em silêncio.

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.

No SUSE Linux estas tecnologias são controladas pelo daemon do powersave. A configuração está explicada na Seção 33.5, “O Pacote powersave”.

33.3.3. Ferramentas da ACPI

A faixa mais ou menos abrangente dos utilitários da ACPI inclui ferramentas que apenas exibem informações, como o nível de carga e a temperatura da bateria (acpi, klaptopdaemon, wmacpimon, 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).

33.3.4. 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. No entanto, o mais comum é que os problemas sejam causados pelo BIOS. Às vezes, desvios da especificação da ACPI são integrados de propósito no 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 inicialização poderá ser útil:

pci=noacpi

Não use ACPI para configurar os dispositivos PCI.

acpi=oldboot

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

acpi=off

Desabilitar a ACPI.

[Warning]Problemas de inicialização 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.

Monitore as mensagens de inicialização 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 a inicialização. Se ocorrer um erro ao analisar uma tabela da ACPI, a tabela mais importante, a DSDT, pode ser substituída por uma versão aperfeiçoada. Neste caso, a DSDT defeituosa do BIOS é ignorada. O procedimento está descrito na Seção 33.5.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.

33.3.4.1. Mais informações

Documentação adicional e suporte para a ACPI: