SDB:Riduzione del consumo di energia del ThinkPad durante ACPI sleep


Problema

Molti IBM/Lenovo ThinkPad laptops consumano troppa energia in sleep mode (suspensione RAM). La batteria dura solo alcune ore.

Cause

La principale causa cause e`il chip della scheda grafica Radeon usato in alcuni modelli. Questo non e`disattivato propriamente dal sistema ACPI. Tipicamente esso consuma 5W.

Un`altra causa e`il chip E1000: per default esso non si disattiva in sleep mode. Esso consuma circa 0.3W

Soluzione

Se si carica una versione recente del driver radeonfb framebuffer, esso dovrebbe ridurre il consumo di energia dello sleep-mode di circa 4W. Il processo di base e`descritto in [ThinkWiki]. Questa pagina descrive come applicare il processo in openSuSE 10.2. Riparare versioni piu`vecchie di SuSE e`piu`difficile poiche` si dovrebbe intervenire sul source code del kernel e ricostruirlo.

Prima di iniziare

Per scoprire se hai questo problema:

  • Scarica [power drain test script] da ThinkWiki.
  • Controlla le istruzioni per capire se sono idonee al tuo caso.
  • Disconnetti il filo di alimentazione.
  • Accedi come "root" ed esegui il test script. Cio`fara`funzionare la macchina in sleep mode.
  • Lascia la macchina funzionare in sleep mode per alcuni minuti (almeno 5,ma 20 o piu` danno migliori risultati).
  • Riavvia la macchina utilizzando il tasto di avvio.
  • Controlla se nel file /var/log/battery.log – nella riga "result" appaiono circa 1500mW, allora il tuo sistema probabilmente ha questo problema.

Chip Radeon

E`necessario caricare il driver "radeonfb" durante il processo di boot poiche`le versioni recenti di questo driver hanno un per questo problema. Il workaround e`stato aggiunto a partire dalla versione 2.6.18 del kernel, quindi questa soluzione richiede almeno una versione "openSuSE 10.2" o piu`recente.

Il processo di boot normale di openSuSE carica il driver vesa, il quale crea un conflitto con il driver radeonfb, e`cosi`necessario cambiare i parametri di boot.

  • Assicurati che la tua macchina abbia openSuSE 10.2 installato, e che inoltre tutti gli aggiornamenti di kernel siano stati installati. Se aggiorni il sistema a questo punto, riavvia il sistema prima di continuare.
  • Accedi come root usando su in una finestra terminal oppure accedendo il sistema come rootin una command-line console.
  • Modifica il file /etc/sysconfig/kernel aggiungendo 'radeonfb' alla linea INITRD_MODULES. Apparira`probabilmente cosi`:
INITRD_MODULES="processor thermal piix fan jbd ext3 edd radeonfb"
  • Inserisci un nuovo initrd (sostituisci i numeri con la tua versione di kernel):
cd /boot
mkinitrd -i /boot/initrd-2.6.18.2-34-special -k vmlinux-2.6.18.2-34-default.gz
  • Modifica /boot/grub/menu.lst
    • Copia la lista di istruzioni di boot di default ed inserisci la nuova copia al top della lista.
    • Dagli un nuovo titolo, ae modifica la linea di kernel:
reimuovi 00x314 (o altrir vga= parameter)
aggiungi    video=vesa:off vga=normal
    • Cambia la linea initrd: sostituisci '-default' con '-special'
    • Il file dovrebbe apparire cosi`:
# Modified by YaST2. Last modification on Fri Jan  5 11:20:56 UTC 2007
default 0
timeout 8
##YaST - generic_mbr
gfxmenu (hd0,1)/boot/message
##YaST - activate

title openSUSE 10.2 with radeonfb fix
    root (hd0,1)
    kernel /boot/vmlinuz-2.6.18.2-34-default root=/dev/hda2 video=vesa:off vga=normal    resume=/dev/hda1 splash=silent showopts
    initrd /boot/initrd-2.6.18.2-34-special

###Don't change this comment - YaST2 identifier: Original name: linux###
title openSUSE 10.2
    root (hd0,1)
    kernel /boot/vmlinuz-2.6.18.2-34-default root=/dev/hda2 vga=0x314    resume=/dev/hda1 splash=silent showopts
    initrd /boot/initrd-2.6.18.2-34-default

###Don't change this comment - YaST2 identifier: Original name: failsafe###
title Failsafe -- openSUSE 10.2
    root (hd0,1)
    kernel /boot/vmlinuz-2.6.18.2-34-default root=/dev/hda2 vga=normal showopts ide=nodma apm=off acpi=off noresume nosmp noapic maxcpus=0 edd=off 3
    initrd /boot/initrd-2.6.18.2-34-default


Chip Ethernet

Modifica /etc/init.d/boot.local ed aggiungi la linea:

/usr/sbin/ethtool -s eth0 wol d

Questo disabilita wake-on-lan e cosi`permette al chip ethernet di disconnettersi durante l`ACPI sleep.

Test

  • Riavvia la macchina. Dovrebbero ora apparire tre opzioni nel boot menu: assicurati che sia utilizzata anche la nuova appena inserita.
  • Accedi e riavvia il test power-drain. Dovresti vedere a questo punto una potenza al di sotto di 1000mW. (Un R51 con 1.5GB di RAM usa circa 750mW in sleep mode)

Se questo non risolve il problema, guarda il messaggio di bootup:

dmesg | less

Cerca per le righe che iniziano con "radeon" in modo da capire se ti danno qualche suggerimento. In particolare vuoi trovarne una che appare cosi`:

radeonfb: IBM Thinkpad R50/R51/T40/T41 detected, enabling workaround

Controlla gli aggiornamenti del kernel

Ogni volta che un aggiornamento di kernel e` installato, dovrai inserire un nuovo initrd e modificare il boot menu di nuovo.


Links

[ThinkWiki page describing the problem in more detail]

[Power drain test script]


<keyword>laptop,acpi,thinkpad,sleep,radeon,battery</keyword>