Athlon Powersaving HOWTO

Daniel Nofftz

daniel@nofftz.net.NOSPAM

2007-06-06

Revision History

Revision 1.2.3 2007-06-06 Revised by: dn

applicate correzioni da 1.2.3 (grazie a Rajeev V. Pillai)

Revision 1.2.2 2007-05-30 Revised by: dn

corretto refuso nel comando disable nforce

Revision 1.2.1 2007-05-13 Revised by: dn

correzioni per il nuovo copyright, correzione della liberatoria

Revision 1.2 2007-05-10 Revised by: dn

aggiunto coolrun, nuovo URL per la versione Portoghese (Brasiliano), cambio di Licenza (da GNU FDL a GNU GPL), alcuni cambi minori relativi all’accessibilità

Revision 1.1.12 2006-04-06 Revised by: dn

corretti refusi

Come abilitare la funzionalità per il risparmio energetico del processore

Athlon/Duron/AthlonXP su certe schede madri/chipset. Questo è utile per risparmiare elettricità ed abbassare la temperatura della CPU e del sistema. (Diminuirà anche il rumore, se si usano le ventole a controllo termico presenti nella cassa/sul dissipatore della CPU).

Traduzione a cura di Giancarlo Contrafatto. Revisione a cura di Antonio Colombo. Per versioni aggiornate di questo documento e per trovare altra documentazione in italiano sul software libero visitare il sito dell’ILDP (http://it.tldp.org)

1. Introduzione

1.1. Nozioni di Base sulla modalità risparmio energetico dell’Athlon

Il segnale HLT usato dal normale ciclo inattivo del kernel Linux, normalmente non conduce ad alcun significativo risparmio di energia sui processori della famiglia Athlon/Duron (d’ora in poi riferiti come processori Athlon). Per ottenere un risparmio energetico reale con un processore Athlon, bisogna mettere il processore in modalità STPGNT (Stop Grant Mode). Usando questa modalità, il processore è disconnesso dal front-side bus (FSB) e può spegnere alcune parti della CPU come pure ridurre il clock per risparmiare energia.

Certe schede madri/chipset moderni supportano anche una funzione che crea un STPGNT quando viene individuato un segnale HLT.

1.2. Copyright and License

This document, Athlon Powersaving HOWTO, is copyrighted (c) 2003-2007 by Daniel Nofftz.

This work is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation.

A copy of the license is available at http://www.daniel.nofftz.net/linux/gpl_v2.txt (http://www.daniel.nofftz.net/linux/gpl_v2.txt).

Linux is a registered trademark of Linus Torvalds.

1.3. Liberatoria

Questo lavoro è distribuito nella speranza che sia utile, ma SENZA ALCUNA GARANZIA; senza neppure la garanzia implicata di VENDIBILITÀ o IDONEITÀ A USI PARTICOLARI. Si veda la Licenza Pubblica Generica GNU per maggiori dettagli.

Tutti i diritti d’autore appartengono ai rispettivi proprietari, se non altrimenti specificato. Non si deve considerare l’uso di un termine in questo documento come influenzante la validità di alcun marchio o marchio di servizio. La citazione di specifici prodotti o marche non deve essere interpretata come approvazione.

1.4. Feedback/Domande/Supporto

Ricevere reazioni a questo documento è estremamente essenziale. Soluzioni nuove per chipset nuovi sono specialmente necessarie, come lo sono i commenti, sia che le soluzioni proposte funzionino oppure no. Si prega di inviare aggiunte, commenti, critiche e domande al seguente indirizzo e-mail: <daniel@nofftz.net.NOSPAM>> È possibile scrivermi sia in Inglese che in Tedesco.

Se si vuole sostenermi, è possibile fare donazioni usando Paypal (allo stesso indirizzo email) oppure inviarmi qualche nuovo pezzo di hardware con cui io possa giocare. ;)

1.5. Nuove versioni di questo documento

La versione più recente di questo HOWTO sarà sempre rese disponibili nel sito: http://www.daniel.nofftz.net/linux/ (http://www.daniel.nofftz.net/linux/)

Il codice sorgente di questo HOWTO è ospitato al Linux Documentation Project (http://www.tldp.org) oppure può essere richiesto a me.

2. I diversi approcci

Nella seguente sezione presento diversi approcci per ottenere lo stesso obbiettivo: risparmiare energia in un sistema basato sul Athlon/Athlon-XP. L’approccio che consiglio al momento, è quello di usare “il metodo della riga di comando” o il programma Athcool (la patch al kernel è ormai obsoleta e non verrà più aggiornata, e la patch LVCool supporta solo una famiglia di chipset).

Quasi tutti questi approcci assegneranno, nel north bridge del chipset, il bit “disconnessione abilitata quando si individua un STPGNT”. Il resto del lavoro viene sostenuto dal sottosistema ACPI del kernel, che invia un segnale STPGNT al processore quando entra in modalità inattiva acpi-c2.

Se il kernel in uso non ha ancora supporto per ACPI, bisogna abilitarlo nell’impostazione del kernel e ricompilare nuovamente il kernel. Le opzioni-ACPI si trovano sotto Impostazioni generali+Impostazioni gestione energetica⟶ACPI. Devono essere impostate almeno le seguenti scelte: Gestione bus ACPI, Sistema e Processore.

Oppure per il kernel 2.4.22: Impostazioni generali+Supporto ACPI. Deve essere impostata almeno la seguente scelta: Processore.

Kernel 2.6.x: Opzioni di risparmio energetico+ACPI. Deve essere impostata almeno la scelta Processore. Non si dovrebbe abilitare Zona Termica !!

Alcuni chipset supportano anche un STPGNT se un segnale HLT è rilevato. Queste schede madri/chipset non hanno bisogno che sia abilitato ACPI! Al momento mi servono riscontri su quali chipset funzionano senza ACPI e quali lo necessitano. Forse potreste provarlo sulla vostra scheda madre ed inviarmi un email. (vedere Section 3.1)

2.1. Metodo della riga di comando (raccomandato)

Per usare la linea di comando è normalmente necessario abilitare ACPI nel kernel, altrimenti se ne viene avvisati. Non è necessario riavviare il computer per abilitare il risparmio energetico. Lo si può

Athlon Powersaving HOWTO

abilitare/disabilitare dalla riga di comando, con il comando seguente:

su KT133/133A, KX133, KL/KLE133, KM/KN133, ...: (decisamente acpi deve essere abilitato) abilitare: setpci -v -H1 -s 0:0.0 52=$(printf %x $((0x$(setpci -H1 -s 0:0.0 52) | 0x80))) disabilitare: setpci -v -H1 -s 0:0.0 52=$(printf %x $((0x$(setpci -H1 -s 0:0.0 52) & 0x7f)))

su KT266/266A/333,KM266/266A/333, ...:

abilitare: 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))) disabilitare: 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)))

su KT333CF/KT400/KT400A/KM400/KM400A/KT600:

abilitare: 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))) disabilitare: 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)))

su KT880:

abilitare:

Athlon Powersaving HOWTO

setpci -v -H1 -s 0:0.0 82=$(printf %x $((0x$(setpci -H1 -s 0:0.0 82) | 0x80))) setpci -v -H1 -s 0:0.0 85=$(printf %x $((0x$(setpci -H1 -s 0:0.0 85) | 0x02))) disabilitare: setpci -v -H1 -s 0:0.0 82=$(printf %x $((0x$(setpci -H1 -s 0:0.0 82) & 0x7f))) setpci -v -H1 -s 0:0.0 85=$(printf %x $((0x$(setpci -H1 -s 0:0.0 85) & 0xfd)))

su SIS730/733:

abilitare: setpci -v -H1 -s 0:0.0 6B=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6B) | 0x01))) disabilitare: setpci -v -H1 -s 0:0.0 6B=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6B) & 0xfe)))

su SIS735/740/745/755: abilitare: setpci -v -H1 -s 0:0.0 6A=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6A) | 0x0003))) disabilitare: setpci -v -H1 -s 0:0.0 6A=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6A) & 0xfffc)))

su SIS741/741GX/746/748: abilitare:setpci -v -H1 -s 0:0.0 6C=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6C) | 0x0003))) disabilitare: setpci -v -H1 -s 0:0.0 6C=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6C) & 0xfffc)))

su Nforce:

abilitare: setpci -v -H1 -s 0:0.0 E7=$(printf %x $((0x$(setpci -H1 -s 0:0.0 E7) | 0x06))) disabilitare: setpci -v -H1 -s 0:0.0 E7=$(printf %x $((0x$(setpci -H1 -s 0:0.0 E7) & 0xf9))) su Nforce2: (funziona con apci non abilitato)

abilitare: setpci -v -H1 -s 0:0.0 6F=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6F) | 0x10)))

disabilitare: setpci -v -H1 -s 0:0.0 6F=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6F) & 0xef)))

su AMD751 e AMD760/761:(non per il 760MP!!!)(funziona con acpi non abilitato)

abilitare: setpci -v -s 0:0.0 0x62=$(printf %x $((0x$(setpci -H1 -s 0:0.0 62) | 0x06)))

disabilitare: setpci -v -s 0:0.0 0x62=$(printf %x $((0x$(setpci -H1 -s 0:0.0 62) & 0xf9)))

2.2. Lo shell script coolrun (raccomandato)

Coolrun è un breve shell script che fa risparmiare lavoro usando il metodo della riga di comando. È sviluppato/mantenuto da Grozdan Nikolov ed è basato su questo HOWTO.

Si possono avere più informazioni (e scaricarlo) qui: https://sourceforge.net/projects/coolrun/ (https://sourceforge.net/projects/coolrun/)

2.3. Il programma Athcool (raccomandato)

Athcool è un breve programma che esegue lo stesso compito del comando setpci visto sopra. Supporta gli stessi chipset, rileva qual è il vostro chipset e sceglie le impostazioni adatte per far funzionare il risparmio-energia.

Si possono avere più informazioni (e scaricarlo) qui: http://members.jcom.home.ne.jp/jacobi/linux/softwares.html (http://members.jcom.home.ne.jp/jacobi/linux/softwares.html) Non sono io l’autore di questo programma!

2.4. Aggiornamenti del BIOS

Su alcune schede più recenti i fabbricanti forniscono un aggiornamento del BIOS che predispone il bit o i bit necessari nel chipset della scheda (oppure offre la scelta di abilitare o no, nell’impostazione del BIOS). Riferirsi alla homepage del fabbricante della scheda madre per accertarsi se tale aggiornamento è disponibile.

2.5. Patch del kernel

La patch si basa su un’altra patch (di Jan Niehusmann) che ho trovato su Newsnet. Ho modificato la patch in modo da aggiungere supporto anche per il chipset KT266/266A. Incidentalmente, la mia patch fa lo stesso lavoro del metodo della riga di comando, tranne che lo fa dall’interno del kernel. Ecco perchè raccomando l’utilizzo del metodo della riga di comando, che è veramente semplice da usare e non richiede di modificare il kernel.

Allora... adesso, passo per passo, ecco come applicare la patch:

1. Per prima cosa, scaricare la patch:

Patch per il Kernel 2.4.17 (http://www.daniel.nofftz.net/linux/amd_cool.diff)

Patch per il Kernel 2.4.21 (http://www.daniel.nofftz.net/linux/amd_cool.linux-2.4.21.diff) (grazie a Thomas Reinhardt per aver fatto il porting a 2.4.21)

Patch per il Kernel 2.6.5 (http://www.daniel.nofftz.net/linux/amd_cool.linux-2.6.5.diff) con supporto per tutti i chipset Via fino al KT600 (grazie a Sebastian Droege per aver fatto il porting a 2.6.5 ed aggiunto gli altri Chipsets)

Patch per il Kernel 2.6.9 (http://www.daniel.nofftz.net/linux/amd_cool.linux-2.6.9.diff) che supporta tutti i chipset Via fino al KT600 (grazie a Alexander Hug per aver fatto il porting da 2.6.5 a 2.6.9)

2. Fare login come root

3. cd /usr/src

4. Applicare la patch: cat $path-to-patch/amd_cool.diff | patch -p0 (Per la nuova patch 2.6.5: cd linux e patch -p1)

5. cd linux

6. Eseguire Make per il nuovo kernel

7. Riavviare e, al prompt d’avvio del kernel, digitare l’istruzione amd_disconnect=yes . Ciò perchè si sa che ci sono dei bachi nel processore Athlon, che potrebbero causare problemi su parecchie schede madre. Provare la patch e se funziona, accodare l’istruzione

     amd_disconnect=yes al file /etc/lilo.conf.

2.6. La soluzione LVCool

LVCool è un piccolo porting del programma Vcool per Windows (http://vcool.occludo.net/). Supporta solamente i chipsets KT133/133A e KX133 ed io non posso fornire supporto. Può essere scaricato qui (http://vcool.occludo.net/VC_Linux.html). Questa soluzione non ha bisogno di avere ACPI compilata nel kernel.

2.7. Il programma FVCool

Qui (http://www.nt.phys.kyushu-u.ac.jp/shimizu/download/download.html) c’è un altro programma per risparmio energetico che dà supporto a parecchi chipset. Io non l’ho provato ma ho sentito dire che funziona. Dategli un’occhiata ... è anche accompagnato da un programma che potrebbe essere usato per controllare i chip di monitoraggio presenti su certe schede madri (come il pacchetto lm-sensors).

2.8. Risparmio di energia con l’AMD 760MP

C’è un modulo del kernel che abilita il risparmio di energia sul chipset del multiprocessore 76MP. Potreste trovarlo qui; (http://www.muru.com/linux/amd-smp-idle/). Non so se funziona bene, ma ho ricevuto almeno un’email da qualcuno che diceva che funzionava. Perciò, dategli un’occhiata.

3. Che cos’altro?

3.1. Come provare per vedere se funziona

Bene ... state usando una delle impostazioni risparmia-energia descritte e volete verificare se funziona. Ecco due modi per controllare:

Se il diffusore della vostra CPU ha una ventola a controllo termico, sarebbe possibile controllare il livello di rumore della ventola per vedere se funziona o no. Dopo qualche minuto di inattività, date qualcosa da fare alla CPU.

Normalmente lo faccio così :

1. diventate superuser (root)

2. cd /usr/src/linux

3. e date qualche cosa da fare al computer: while true; do make clean; make bzImage; done

Dopo circa 20 o 30 secondi si dovrebbe notare che il rumore della ventola sta diventando più forte e la ventola gira più velocemente. Non scordarsi di terminare il while-loop dopo un po’ (qualche minuto) con CTRL-C.

La stessa procedura descritta qui sopra funziona anche con un programma di monitoraggio della temperatura della CPU (come lm-sensors (http://secure.netroedge.com/~lm78/), xmbmon (http://www.nt.phys.kyushu-u.ac.jp/shimizu/download/download.html) e rtsensors (http://www.tinet.org/~com.ea/rtsensors/)).

3.2. Bachi noti/Problemi

Ci sono due bachi noti nel processore Athlon/Duron. Questi sono i numeri 11 e 14 nella AMD Athlon Processor Revision Guide. Sembra che l’Athlon XP sia molto meno affetto da questi bachi. Così se si possiede un Athlon XP (come me) si è fortunati.

Ci possono essere i problemi seguenti (causati dai bachi):

• salti nell’audio durante l’ascolto

• salti e rallentamenti video durante la visione

• trasferimenti ultra-DMA a disco rigido rallentati

• blocco del sistema

• problemi con l’USB

• pigolio acuto riportato da alcuni

A volte un aggiornamento BIOS aiuta (questo è un modo per aggirare il baco 11, che si può fare tramite BIOS). Ma, per quanto ne so io, ci sono solo poche schede che hanno questa possibilità di soluzione nel BIOS).

Per l’Asus A7V133-C, si sa che abilitare la scelta-BIOS PCI master read caching risolverà la maggior parte dei problemi. Dunque, si dovrebbe cercare tale funzionalità nel proprio BIOS.

Si sa anche che su certe schede, la scelta-BIOS Delayed Transaction risolve alcuni problemi. Si può tentare anche questa opzione.

ATTENZIONE: su schede con il KT133A, ciò potrebbe introdurre il famoso baco VIA-Southbridge!

Da un messaggio su Newsnet, riguardante l’Asus A7V:

• senza delayed transaction: salti nell’audio e nella visualizzazione TV

• con delayed transaction: niente salti nell’audio e solo leggeri problemi di TV

• con delayed transaction e master read caching: quasi nessun problema di TV e nessun salto nell’audio.

Esistono altre cause di problemi:

• l’alimentazione non è abbastanza forte da soddisfare le fluttuazioni nel consumo di energia del processore/scheda madre

• i regolatori di voltaggio di certe schede madri potrebbero avere problemi simili a quello dell’alimentatore ;)

• state usando un K7S5A (per quanto ne so, questa scheda potrebbe avere un comportamento davvero strambo con il risparmio-energia abilitato)

Se si riscontrano problemi minori col risparmio-energia abilitato ma, ciò nonostante si vuole usare il risparmio-energia, si può abilitare il risparmio di energia per default, e disabilitarlo quando si vuole ascoltare musica, guardare la TV, ...

3.3. Aggiustare i salti nell’audio e altri problemi

Grazie a Michael Hamilton per avermi dato l’idea di come funziona.

Il funzionamento di questa riparazione è stato confermato da due persone, quindi sembra che funzioni, ma potrebbe non funzionare per tutti. Siete gentilmente invitati a comunicarmi ulteriori esperienze!

Allora: sembra che almeno i salti nell’audio siano curabili massimizzando il timer di latenza PCI del dispositivo.

Per prima cosa bisogna trovare il "pci-address" della scheda-audio. Questo si potrebbe fare con lspci. Si deve cercare qualcosa come "Multimedia audio controller" oppure "AudioPCI". Annotate il "PCI-address" del dispositivo (qualcosa come: 01:06.0 -> che sta per: bus:slot,function) e impostare al massimo il suo timer di latenza. Questo viene fatto usando il comando setpci:

setpci -v -s "pci-address" latency_timer=ff

Per maggiori informazioni sul timer di latenza si può vedere qui. (http://www-106.ibm.com/developerworks/linux/library/l-hw2.html)

Forse questo può servire anche a risolvere altri problemi come i problemi con l’USB e i rallentamenti nei trasferimenti al disco rigido, ma per ora questo non è stato verificato. Consideratevi liberi di provare (ma non date la colpa a me se non funziona o se la situazione peggiora) e fatemi sapere se funziona. il fatto è che io non ho nessuno di questi problemi per cui, non mi è possibile provare.

Se funziona, sarà necessario eseguire questo comando setpci ad ogni avviamento/ri-avviamento del computer. Quindi sarebbe cosa saggia metterlo in uno degli init-script (dopo il caricamento del modulo driver!).

Athlon Powersaving HOWTO

3.4. Un’altra riparazione per i salti nell’audio ed altri problemi (su certi chipset Via)

Grazie a Wijatmoko Prayitno per queste informazioni! Il funzionamento di questa riparazione è stato confermato per i chipset KT266, KT/KM333 e KT/KM400. Potrebbe anche funzionare su altri chipset Via. Per cortesia fatemi sapere se funziona su altri chipset Via! Questo è abbastanza facile, e funziona come il metodo dalla riga di comando per abilitare il risparmio di energia: Aggiustare il suono sui Chipset KT/KM333 e KT/KM400:

abilitare: setpci -v -H1 -s 0:0.0 70=$(printf %x $((0x$(setpci -H1 -s 0:0.0 70) | 0x08))) disabilitare: setpci -v -H1 -s 0:0.0 70=$(printf %x $((0x$(setpci -H1 -s 0:0.0 70) & 0xf7)))

Se funziona, sarà necessario eseguire questo comando setpci ad ogni avviamento/ri-avviamento del computer. Quindi sarebbe bene metterlo in uno degli init-script (dopo il caricamento del modulo driver!).

3.5. Cose da fare

Aggiungere più chipset e più informazioni a questo documento. Aggiungere qualche informazione sul sistema a risparmio energetico delle CPU Athlon64 e Opteron. Aggiungere qualche informazione sui Notebook e il risparmio energetico.

3.6. Traduzioni

Esistono anche traduzioni nelle lingue seguenti. Al momento, alcune non sono aggiornate. Ungherese (http://tldp.fsf.hu/HOWTO/Athlon-Powersaving-HOWTO-hu/index.html)da Zsolt Mocza Spagnolo (http://perso.wanadoo.es/cmayo/docs/Athlon-Powersaving-HOWTO-es.html) da Carlos Mayo (very out-dated)

Portoghese Brasiliano/Portoghese (http://www.gigantefotos.com.br/sl/pt_BR_Athlon_Powersaving_HOWTO.html) da Bruno Buys

Francese (http://www.daniel.nofftz.net/linux/Athlon-Powersaving-HOWTO-fr.html) da Mathieu Pillard (very out-dated)

Italiano (http://www.daniel.nofftz.net/linux/Athlon-Powersaving-HOWTO-it.html) da Giancarlo Contrafatto

Tedesco (solo in parte) (http://www.pluto.it/ildp/howto.html?chunk=all) da Fabian Mohren

Giapponese (http://www.linux.or.jp/JF/JFdocs/Athlon-Powersaving-HOWTO/index.html) da Seiji Kaneko