Economia
de energia nos chips Athlon Como Fazer
Autor: Daniel Nofftz
daniel@nofftz.net.NOSPAM
(nota: para usar este email, retire a extensão .NOSPAM)
2003-12-18
Tradutor da versão Português do Brasil: Bruno Buys
<brunobuys@terra.com.br>
Histórico de revisões
Revisão 1.1.1
18-12-2003
dn
Tradução para o japonês adicionada, e
possível correção para problemas relativos ao
audio.
Revisão 1.1.0
04-10-2003
dn
Um monte de novas informações e links.
Revisão 1.02
29-08-2003
dn
Novo website, novo endereço de email, links atualizados!
Revisão 1.01
Conserto de bug! O hack de linha de comando para chipset AMD estava
errado!
Revisão 1.0
20-06-2003
dn
Lançamento inicial, revisto pelo LDP
Resumo
Este documento descreve como habilitar as funções de
economia de energia em processadores Athlon/Duron/AthlonXP em algumas
placas-mãe/chipsets. Isso é útil tanto para
economia de energia quanto para reduzir a temperatura da sua cpu e do
sistema. (E também irá reduzir o ruído, se
você usa ventoinhas controladas por temperatura no seu gabinete
ou na sua cpu).
Índice
1. Introdução
1.1 Conceitos sobre o estado de economia de energia
nos Athlon
1.2 Direitos autorais e Licensa
1.3 Recusa de responsabilidade
1.4 Feedback
1.5 Novas versões deste documento
2.0 As diferentes abordagens
2.1 O hack de linha de comando
2.2 O programa Athcool
2.3 Atualizações de BIOS
2.4 Meu patch do kernel
2.5 A solução LVcool
2.6 O programa FVcool
2.7 Economia de energia em AMD 760MP
3. O que mais?
3.1 Como testar se funciona
3.2 Problemas e bugs conhecidos
3.3 Possível conserto para problemas de audio
e outros problemas
3.4 ToDo
3.5 Traduções
1. Introdução
Conceitos sobre economia de energia nos Athlon.
O sinal HLT usado pelo idle loop do kernel linux não produz
nenhuma economia significante de energia em processadores da
família Athlon/Duron (a partir de agora, referidos somente como
"Athlon"). Para um Athlon conseguir entrar em estado de economia de
energia, você deverá colocar o processador em modo STPGNT
(Modo "stop grant"). Neste estado, o processador é desconectado
do barramento frontal (FSB) e pode desligar certas partes da cpu, bem
como reduzir o clock, para economizar energia.
Algumas placas-mãe modernas e chipsets também possuem uma
função para comandar um STPGNT quando um sinal HLT
é detectado.
1.2 Direitos autorais e Licensa
Este documento, "Gerenciamento de energia nos chips Athlon Como Fazer"
tem direitos reservados para Daniel Nofftz (2003).
É dada permissão para copiar, distribuir e/ou modificar
este documento sob os termos da GNU Licensa Livre de
Documentação, versão 1.2 ou qualquer versão
posterior publicada pela Free Software Foundation; sem
seções invariantes, sem textos de capa e sem textos de
contra-capa. Uma cópia da licensa está disponível
em http://www.gnu.org/copyleft/fdl.html.
Linux é marca registrada de Linus Torvalds.
1.3 Recusa de responsabilidade
Nenhuma responsabilidade pelo conteúdo deste documento
poderá ser aceita. Use os conceitos, exemplos e
informações por conta própria. Pode haver erros e
imprecisões capazes de danificar o seu sistema. Proceda com
cautela, e, apesar disso ser altamente improvável, o autor(es)
não aceita(m) nenhuma responsabilidade.
Todos os direitos autorais são mantidos pelos respectivos donos,
a menos que especificamente declarado. O uso de algum termo neste
documento não deve ser entendido como afetando a validade de
qualquer outra marca patenteada ou serviço. Os nomes de
determinados produtos ou marcas não deve ser visto como
propaganda.
1.4 Feedback
Feedback é essencial para este documento. Novas
soluções para novos chipsets são especialmente
requisitadas. Eu preciso também de comentários, mesmo se
as soluções fornecidas funcionarem ou não. Mande
suas sugestões, adições ou críticas para
<daniel@nofftz.net.NOSPAM>.
Você pode escrever tanto em inglês quanto em alemão!
1.5 Novas versões deste
documento
Novas versões deste documento serão sempre publicadas
aqui: http://www.daniel.nofftz.net/linux/
2. As diferentes abordagens
Noas próximas seções eu apresento diferentes
métodos de atingir o mesmo objetivo: economia de energia no seu
sistema baseado em Athlon. Meu método recomendado no momento
é o da linha de comando, porque o patch do kernel está
desatualizado, e não vai ser mais desenvolvido. O patch do
LVcool funciona apenas em uma única família de chipsets.
O programa Athcool parece bom, mas eu ainda não testei.
Quase todos estes métodos vão setar o bit "Habilitar
desconexão quando STPGNT for detectado" na ponte norte do
chipset. O resto do trabalho é feito pelo subsistema ACPI do
kernel, que envia um sinal STPGNT para o processador, quando este entra
em modo idle acpi-c2.
Se você ainda não tem um kernel com suporte a ACPI,
você deverá habilitá-lo no setup do kernel e depois
reocmpilar o novo kernel. Você achará as
opções ACPI em General setup+ Power Management
Setup->ACPI. Você deve ter no mínimo as seguintes
opções: ACPI Bus Manager, system e Processor.
Ou para o kernel 2.4.22: General setup + suporte a ACPI. Você
deverá tem ao menos a seguinte opção: Processor.
Alguns chipsets já possuem a instrução STPGNT
quando um sinal HLT é detectado. Essas plcas/chipsets não
precisam de ACPI habilitado. Eu estou precisando de feedback sobre
quais chipsets funcionam sem ACPI e quais não precisam de ACPI.
Quem sabe você não pode testar na sua placa mãe e
me mandar um email? (veja seção 3.1 "Como testar se
funciona").
2.1 O hack da linha de comando
Para usar a linha de comando você normalmente tem que habilitar o
ACPI no kernel. Não é necessário reiniciar.
Você pode habilitar/desabilitar pela linha de comando com estes
comandos:
Em KT133/133A, KX133, KL/KLE133, KM/KN133, ...: (sem dúvida
precisa de ACPI habilitado)
Habilitar: setpci -v -H1 -s 0:0.0 52=$(printf %x
$((0x$(setpci -H1 -s 0:0.0 52) | 0x80)))
Desabilitar: setpci -v -H1 -s 0:0.0 52=$(printf %x
$((0x$(setpci -H1 -s 0:0.0 52) & 0x7f)))
Em KT266/266A/333, KM266/333, ...:
Habilitar:
setpci -v -H1 -s 0:0.0 92=$(printf %x $((0x$(setpci
-H1 -s 0:0.0 92) | 0x80)))
setpci -v -H1 -s 0:0.0 95=$(printf %x $((0x$(setpci
-H1 -s 0:0.0 95) | 0x02)))
Desabilitar:
setpci -v -H1 -s 0:0.0 92=$(printf %x $((0x$(setpci
-H1 -s 0:0.0 92) & 0x7f)))
setpci -v -H1 -s 0:0.0 95=$(printf %x $((0x$(setpci
-H1 -s 0:0.0 95) & 0xfd)))
Em KT400:
Habilitar:
setpci -v -H1 -s 0:0.0 D2=$(printf %x $((0x$(setpci
-H1 -s 0:0.0 D2) | 0x80)))
setpci -v -H1 -s 0:0.0 D5=$(printf %x $((0x$(setpci
-H1 -s 0:0.0 D5) | 0x02)))
Desabilitar:
setpci -v -H1 -s 0:0.0 D2=$(printf %x $((0x$(setpci
-H1 -s 0:0.0 D2) & 0x7f)))
setpci -v -H1 -s 0:0.0 D5=$(printf %x $((0x$(setpci
-H1 -s 0:0.0 D5) & 0xfd)))
Em SIS730/733: (experimental! Por favor, me digam se funcionar!!)
enable: setpci -v -H1 -s 0:0.0 6B=$(printf %x
$((0x$(setpci -H1 -s 0:0.0 6B) | 0x01)))
disable: setpci -v -H1 -s 0:0.0 6B=$(printf %x
$((0x$(setpci -H1 -s 0:0.0 6B) & 0xfe)))
on SIS735/740/745/746/755:
Habilitar: setpci -v -H1 -s 0:0.0 6A=$(printf %x
$((0x$(setpci -H1 -s 0:0.0 6A) | 0x0001)))
Desabilitar: setpci -v -H1 -s 0:0.0 6A=$(printf %x
$((0x$(setpci -H1 -s 0:0.0 6A) & 0xfffe)))
Em Nforce:
Habilitar:
setpci -v -H1 -s 0:0.0 E4=$(printf %x $((0x$(setpci -H1 -s 0:0.0 E7) | 0x06)))
Desabilitar:
setpci -v -H1 -s 0:0.0 E4=$(printf %x $((0x$(setpci -H1 -s 0:0.0 E7) & 0xf9)))
Em Nforce2: (Funciona sem ACPI)
Habilitar: setpci -v -H1 -s 0:0.0 6F=$(printf %x
$((0x$(setpci -H1 -s 0:0.0 6F) | 0x10)))
Desabilitar: setpci -v -H1 -s 0:0.0 6F=$(printf %x
$((0x$(setpci -H1 -s 0:0.0 6F) & 0xef)))
Em AMD751 and AMD760/761:(Funciona sem ACPI)
Habilitar: setpci -v -s 0:0.0 0x62=$(printf %x
$((0x$(setpci -H1 -s 0:0.0 62) | 0x06)))
Desabilitar: setpci -v -s 0:0.0 0x62=$(printf %x
$((0x$(setpci -H1 -s 0:0.0 62) & 0xf9)))
2.2 O programa Athcool
Athcool é um pequeno programa que faz o mesmo que as linhas de
comando acima. Ele funciona nos mesmos chipsets e detecta qual chipset
você tem, comandando as linhas corretas para cada um, para obter
a economia de energia.
Você pode ler mais sobre ele (e baixá-lo) daqui:
http://members.jcom.home.ne.jp/jacobi/linux/softwares.html
2.3 Atualizações de BIOS
Em algumas placas mãe mais recentes o fabricante provê uma
atualização de BIOS que seta os bits necessários
no chipset da placa (ou deixa você escolher no setup do BIOS se
deve ser habilitado). Olhe o site do fabricante para saber se há
uma atualização dessas disponível para você.
2.4 Meu patch do kernel
O meu patch é baseado em outro patch (do Jan Niehusmann) que eu
encontrei no Newsnet. Eu modifiquei o patch para incluir suporte ao
KT266/266A. A propósito, o meu patch faz o mesmo que a linha de
comando, só que de dentro do kernel. Por isso eu recomendo usar
a linha de comando, que é realmente simples de usar.
Passo 1. Ok, agora passo a passo, como aplicar o patch.
1. Primeiro, baixar o patch:
Patch para kernel 2.4.17:
http://www.daniel.nofftz.net/linux/amd_cool.diff
Patch para kernel 2.4.21 (obrigado ao Thomas Reinhardt por
portá-lo para o 2.4.21):
http://www.daniel.nofftz.net/linux/amd_cool.linux-2.4.21.diff
2. Logar como root
3. cd /usr/src
4. Aplique o patch: cat $path-to-patch/amd_cool.diff | patch -p0
4. cd linux
6. Compile o novo kernel ('make')
7. Reinicie e no prompt de boot do kernel entre o parâmetro
amd_disconnect=yes. Isso é assim porque existem bugs conhecidos
do Athlon, que podem causar vários problemas em algumas placas
mãe. Você deve testar o patch, e se funcionar, pode anexar
o parâmetro amd_disconnect=yes ao arquivo /etc/lilo.conf.
2.5 A solução LVcool
LVcool é um pequeno port da versão para Windows, Vcool.
Suporta apenas os chipsets KT133/133A e KX133. Eu não posso dar
suporte para ele. Você pode baixá-lo aqui:
http://vcool.occludo.net/VC_Linux.html. Esta solução
não necessita de suporte a ACPI compilado no kernel.
2.6 O programa FVcool
Aqui (http://www.nt.phys.kyushu-u.ac.jp/shimizu/download/download.html)
está outra solução de economia de energia que
suporta vários chipsets. Há também um programa que
vem junto e com o qual você pode usar os monitores onboard da sua
placa (como no pacote lm_sensors).
2.7 Economia de energia em AMD 760MP
Há um módulo do kernel que habilita a economia de energia
no chipset multiprocessador AMD 760MP. Você pode achá-lo
aqui: http://www.muru.com/linux/amd-smp-idle/. Eu não sei se
é bom, mas obtive pelo menos um email de alguém que disse
que funcionou. Portanto, se quiser, verifique.
3. O que mais?
3.1 Como testar se funciona
Ok, você usa um dos métodos descritos e quer verificar se
funciona. Aqui estão duas maneiras de checar:
Se você tem um cooler (ventoinha) controlada por temperatura,
você pode observar o nível de ruído do cooler pra
saber se funciona. Depois de alguns minutos ociosa, dê algum
trabalho à cpu.
Passo 2. Normalmente eu faço assim:
1. Mudo para root.
2. cd /usr/src/linux
3. E dou ao computador algo para ele fazer: while true, do make clean,
make BzImage, done
Depois de uns 20 ou 30 segundos você perceberá que o
ruído do cooler ficará mais alto enquanto o cooler gira
mais rápido. Não se esqueça de sair do loop while
depois, com Ctrl+C.
O mesmo procedimento acima funciona com um programa de monitoramento
para a temperatura da cpu (como o lm_sensors ou o xmbmon).
3.2 Bugs e problemas conhecidos
Há dois bugs conhecidos no processador Athlon/Duron.
Estão listados como número 11 e número 14 no Guia
de Revisão do Processador Athlon. Parece que o AthlonXP é
significativamente menos afetado pelos bugs. Portanto, se você
tem um AthlonXP, você está com sorte (como eu).
Pode ocorrer os seguintes problemas (por causa dos bugs):
- Pulos durante a execução de áudio.
- Pulos e/ou demora na execução de vídeo.
- Lentidão em transferências Ultra-DMA.
- Congelamento do sistema.
- Problemas com USB.
- Alguém também me indicou um ruído alto e agudo.
Eventualmente uma atualização de BIOS ajuda (existe uma
com correção para o bug 11, que pode ser feita pelo
BIOS). Mas até onde eu sei, poucas placas possuem esta
correção no BIOS.
Para a Asus A7V133-C, sabe-se que a opção do BIOS "PCI
master read caching" resolve a maioria dos problemas quando habilitada.
Procure no seu BIOS se a função existe.
Sabe-se também que em alguns BIOS a opção "Delayed
transaction" resolve alguns problemas também. Talvez você
queira dar uma olhada.
AVISO: Em placas com KT133A, isso pode habilitar o famoso bug
VIA-pontesul!
De um post no Newsnet, sobre a Asus A7V:
Sem Delayed transaction: pulos no som e falhas na TV.
Com Delayed transaction: sem pulos no som e apenas ligeiros problemas
na TV.
Com Delayed transaction e Master read caching: quase nenhum problema
com TV e nenhum problema com som.
Existem outras causas para os problemas:
A fonte pode não ser forte o suficiente para agüentar as
flutuações de consumo de energia do processador.
Alguns reguladores de voltagem da placa mãe podem ter este mesmo
problema.
Você tem uma K7S5A (até onde eu sei, essa placa pode ter
comportamentos realmente estranhos, com a economia de energia
habilitada).
Se você tiver alguns problemas com a economia de energia
habilitada, e mesmo assim queiser usá-la, você pode
habilitar a economia de energia por default, e depois
desabilitá-la quando for ouvir música, assistir TV, etc...
3.3 Possível
correção para os problemas de som e outros
Obrigado ao Michael Hamilton por submeter esta idéia.
Isso é somente experimental. O único sucesso verificado
foi o da submissão inicial do Michael Hamilton. Por favor, acuse
se funcionou para você.
Vamos lá: parece que pelo menos alguns pulos no som podem ser
resolvidos maximizando a latência do dispositivo de áudio.
Prmeiro você deve encontrar o endereço pci do dispositivo.
Isso pode ser feito com "lspci". Você deve procurar algo como
"Multimedia audio controller" ou "AudioPCI". Pegue o endereço
pci do dispositivo (que é algo como 01:06.0 -> significa
barramento:slot.função) e maximize a latência para
ele. Isso é feito pelo setpci:
setpci -v -s "pci-address" latency_timer=ff
Para informação adicional sobre isso olhe aqui:
http://www-106.ibm.com/developerworks/linux/library/l-hw2.html
Talvez isso funcione também para outros problemas como USB e
demoras em transferências do disco rígido, mas ainda
não foi testado. Sinta-se à vontade para testar (mas
não me culpe se não funcionar, ou tornar as coisas
piores) e avise-me se funcionou. Eu não tenho nenhum destes
problemas, então não posso testá-los.
Se funcionar, você deverá usar este comando setpci a cada
reiniciação do seu sistema. Seria, então,
inteligente colocá-lo num script de iniciação.
3.4 ToDo.
Adicionar mais chipsets e mais informação a este
documento.
Talvez, fazer uma lista de placas mãe com os status "funciona" e
"não funciona".
3.5 Traduções
Traduções em diferentes idiomas existem. Até o
momento, são traduções da versão
pré-XML do documento.
Espanhol, por Carlos Mayo
(http://perso.wanadoo.es/cmayo/docs/Athlon-Powersaving-HOWTO-es.html)
Francês, por Mathieu Pillard
http://www.daniel.nofftz.net/linux/Athlon-Powersaving-HOWTO-fr.html
Italiano, por Maurizio Fantino
http://www.daniel.nofftz.net/linux/Athlon-Powersaving-HOWTO-it.html
Alemão (só partes), por Fabian Mohren
http://www.linuxwiki.de/PowersavingHowto
Japonês, por Senji Kaneko
http://www.linux.or.jp/JF/JFdocs/Athlon-Powersaving-HOWTO/index.html
Português do Brasil, por Bruno Dorfman Buys
http://br.tldp.org/projetos/howto/howtos.html (em
implantação)