Linux Stromsparen: Unterschied zwischen den Versionen

Aus ThinkPad-Wiki
(TLP verlinkt)
Zeile 107: Zeile 107:
== Festplatte abschalten ==
== Festplatte abschalten ==


Festplatte mit Laptop Mode kontrollieren und zum Stromsparen abschalten (wird bei Office-Arbeiten oder zum Web-Surfen nicht benötigt):
Festplatte mit Laptop Mode kontrollieren und zum Stromsparen abschalten (die Festplatte wird bei Office-Arbeiten oder zum Web-Surfen nicht benötigt):
* Festplatte dazu auf maximales Stromsparen stellen (hdparm -B 1)
* Festplatte dazu auf maximales Stromsparen stellen (hdparm -B 1)
* Dirty Writeback Time des RAM-Caches für die Festplatte hochsetzen, z.B. auf 30 Minuten (Default ist 5 Sekunden), das sind 180000 Centisecs
* Dirty Writeback Time des RAM-Caches für die Festplatte hochsetzen, z.B. auf 30 Minuten (Default ist 5 Sekunden), das sind 180000 Centisecs

Version vom 8. Juni 2010, 09:50 Uhr

Diese Seite diskutiert Maßnahmen zum Strom sparen unter Linux. Es werden aber auch einige generelle Faktoren erörtert, die den Stromverbrauch beeinflussen, so dass dieser Beitrag auch für Windows-Nutzer interessant sein dürfte.

Stromverbrauch Linux im Vergleich zu Windows

Linux lag bezüglich des Stromverbrauchs lange Zeit abgeschlagen hinter Windows. Daher war Linux auf Notebooks nicht besonders verbreitet. Diese Situation hat sich seit stromsparenden Änderungen am Linux-Kernel umgekehrt (insbesondere durch Dynticks seit Kernel 2.6.21 vom April 2007). Dank optimierter Kernel-Interrupts und verbesserter Übergänge der P- und C-States konnte die Stromaufnahme der CPU unter Linux deutlich reduziert werden, siehe Grafik von lesswatts.org, der Intel-Seite zum Stromsparen unter Linux.

Aber die CPU macht nur einen kleinen Anteil des Gesamtstromverbrauchs aus. So entfallen etwa auf Grafikkarte und Display oft mehr als die Hälfte des Stromverbrauchs des Gesamtsystems. Und ohne aktivierte Stromsparmechanismen verpulvert die WLAN-Schnittstelle unnötig Leistung. Der Stromverbrauch hängt also stark von der spezifischen Hardware und den Treibern ab.

Für ältere Hardware sind stromeffiziente Treiber oft nur für Windows vorhanden. Auf einem T40 beispielsweise hat man schlechte Chancen, den Stromverbrauch mit Linux auf die Verbrauchswerte von Windows zu drücken. Für die neueren Modelle sind die Linux-Treiber aber recht stromsparoptimiert. Hier hat Linux in den letzten Monaten enorm aufgeholt. Die integrierte Intel-Grafik oder auch die gängigen Grafikkarten von ATI und NVIDIA werden ab der Generation des ThinkPad T43 gut unterstützt.

Da Linux durch das effektivere Paketmanagement (bessere Wiederverwendung von Software-Teilen) weniger Speicher benötigt und auch die CPU geringer belastet, liegt der Verbrauch von Linux etwas unter dem von Windows. Zudem eröffnet Linux mehr Möglichkeiten zum Stromsparen: Abschalten der Fesplatte, des DVD-Laufwerks und USB sowie optimieren der CPU-Wakeups gestaltet sich unter Windows deutlich schwieriger. Dank PowerTOP, einem Tool von Intel, das die Hauptverbaucher identifiziert, wird unter Linux auch stärker auf die Stromsparoptimierung von Anwendungen geachtet. Als Daumenregel gilt daher, dass man unter Linux mit einem etwa 10% niedrigeren Stromverbrauch im Vergleich zu Windows rechnen kann.

Allerdings erreichen beide Betriebssysteme ihr Stromsparpotenzial nicht out-of-the-box, stattdessen bedarf es einiger optimierender Einstellungen. Unter Linux sind dazu nachfolgende Tipps zu berücksichtigen (für Windows siehe Vista Stromverbrauch senken).

Einfluss der CPU-States auf den Stromverbrauch

PowerTOP Screenshot unter einem frisch installierten Xubuntu Hardy auf einem x61t. Wie man sieht, verbringt die CPU zu viel Zeit in C2 statt in C3/C4. Durch das transparente Remapping werden C4-States als C3-States angezeigt.
PowerTOP Screenshot auf einem HP nx8220, der anders als ThinkPads kein C4-BIOS-Remapping macht. Dadurch werden C4-States separat angezeigt.

Maßgeblich für den Stromverbrauch des Prozessors ist der Zeitanteil, den er in den unterschiedlichen Zuständen verbringt. Es gibt die P-States, in denen der Prozessor läuft, diese States unterscheiden sich durch unterschiedliche Taktung. Im höchsten Takt steigt der Verbrauch des Prozessors in den Bereich der spezifizierten Thermal Design Power (TDP), für einen Mobile Core-2-Duo liegt die TDP beispielsweise bei 35 Watt. In der Praxis liegt die Stromaufnahme des Prozessors aber meist deutlich unter dieser Maximalangabe.

Entscheidende Einsparungen beim Stromverbrauch erreichen die C-States Deep Sleep (C3) und Deeper Sleep (C4). Hier ist der Prozessor untätig und es werden bestimmte Bereiche der CPU abgeschaltet. Im Prinzip sollte der Prozessor bei Untätigkeit immer in den tiefsten C-State schalten, also in C4. Im C4-State werden die CPU-Kerne, die Level-1 Caches und auch der Level-2 Cache abgeschaltet und die Versorgungsspannung reduziert, so dass der Stromverbrauch der CPU unter 2 Watt geht. Da die Aufwachphase in tieferen Sleep-States mehr Zeit benötigt als in den höheren, benötigt die CPU folglich mehr Ruhezeit um in die tiefen Zustände eintreten zu können. Wenn die CPU also zu oft durch Arbeitsanforderungen unterbrochen wird, erreicht sie demzufolge nur die höheren Sleep-Zustände C1 bzw. C2 die weniger Bereiche der CPU von der Stromzufuhr abkoppeln und demzufolge nur geringe Einsparungen bringen. Um den Stromverbrauch der CPU zu minimieren gilt es daher, die Ursache für CPU-Wakeups aufzuspüren. Hierzu hat Intel ein Tool entwickelt: PowerTOP. Dies ermittel die Zeitanteile der CPU in den aktiven P-States und in den stromsparenden C-Sleep-States und zeigt an, welche Prozesse die CPU durch Wakeup-Interrupts aus den C-Sleep-States aufwecken.

Stromsparen durch Deeper Sleep C4

Im Office- und Surf-Betrieb wird eine moderne CPU kaum ausgelastet und verbringt über 95% im C4-Sleep-State.

Abhängig vom BIOS lässt sich der C4-State "Deeper Sleep" für den Akkubetrieb aktivieren bzw. deaktivieren. Bei ThinkPads macht das BIOS ein "transparentes Remapping" des C4-State auf den C3-State, d.h. PowerTOP sieht dann den C4-State nicht, obwohl dieser aktiviert wird. Stattdessen werden die C4-States mit bei den C3-States zusammengefasst. Leider lässt sich durch dieses transparente Remapping nicht feststellen, ob der besonders stromsparende C4-State sauber läuft bzw. zu welchem Zeitanteil er erreicht wird. Nur das typische C4-Fiepen liefert dann einen Hinweis. Aktivieren des C4-States bringt jedenfalls etwa 1,5 Watt Einsparungen beim Stromverbrauch.

Einfluss der Core-Spannung

Die Leistungsaufnahme hängt linear vom Takt und quadratisch von der Spannung ab. Die Absenkung der Core-Spannung - Undervolting - ist demnach je nach CPU unterschiedlich effektiv.

Bei aktuellen CPU's bringt Undervolting vornehmlich Einsparungn bei hoher Last, da diese ansonsten so viel Zeit wie möglich in den C-States verbringen, wodurch die P-States (welche durch Undervolten mit niedrigerer Spannung betrieben werden) nur noch vernachlässigbaren Einfluss auf den Stromvebrauch haben. In den C3/C4-Sleep-States schaltet die CPU Teile komplett ab, wodurch auch ohne explizites Undervolting weniger Spannung gebraucht wird. Wird die CPU aufgeweckt, geht sie kurz auf Maximaltakt, erledigt die Aufgabe und fällt zurück in den Sleepstate. Je nachdem wie weit sich für eine konkrete CPU die Kernspannung reduzieren läßt, reduziert sich entsprechend auch die Stromaufnahme der P-States - dies bewegt sich etwa in der Größenordnung von 10-20%. Die Gesamteinsparung errechnet sich dann durch Multiplikation mit dem Anteil des P-States.

Beispiel: arbeitet eine CPU 33% Zeitanteil in P-States, reduziert sich die Leistungsaufnahme um insgesamt etwa 5%, wenn man von rund 15% Verringerung der Leistungsaufnahme im den P-States selber durch Undervolting ausgehen kann. Zu beachten ist hier jedoch noch, dass die minimal mögliche Spannung bei niedrigen P-States geringer vom Originalwert abweicht als bei höheren.

Bei älteren CPU's ohne C-States sind die P-States die primären Sparfunktionen, wodurch Undervolting hier auch im Niedriglastbereich durchaus 10-15% reduzierte Stromaufnahme erreichen kann (nur bei Centrinos der ersten Generationen, seit Dual Core wurden Sperren eingebaut für niedrigste Spannungen).

Interessanter Weise unterscheiden sich normale T- und Low Voltage-CPUs von Intel gar nicht, siehe Intel Low Voltage-Skandal.

CPU-Wakeups optimieren

Die meisten Wakeups gehen auf Kosten des TouchPads bzw. des Trackpoints, bis zu 400 Interrupts sind hier normal. Ansonsten sollte die Zahl der Wakeups pro Sekunde bei unter 50 liegen. Instant-Messenger wie Skype sorgen dabei für circa 20 Wakeups/s, WLAN, ACPI und animierte Taskbar-Icons sind weitere Aufwecker. Stromschlucker die oft übersehen werden sind auch Webseiten mit Java, Flash oder Ajax. Ein nackter Desktop läuft mit unter 20 Wakeups/s. Hierbei unterscheiden sich Gnome, KDE oder XFCE übrigens kaum.

Neu seit Kernel 2.6.24 gibt es zudem "Rescheduling Interrupts" auf Mehrkern-CPUs. Hierbei wird die Verarbeitung der Wakeup-Interrupts auf die Kerne verteilt, so dass die CPU insgesamt trotzdem länger in den Sleep-Zuständen verweilen kann. Dieses Power Aware IRQ Balancing ist im 2.6.24er-Kernel allerdings noch nicht ganz ausgereift. Der Kernel 2.6.25 produziert deutlich weniger Rescheduling Interrupts.

USB Autosuspend

USB ist ein Polling-basierter Bus, d.h. die CPU muss ständig aufwachen, um auf dem Bus nach Daten zu schauen, selbst wenn dort gar nichts passiert. Dies verhindert auch im Leerlauf, dass die CPU ordentlich in C3/C4-Sleep wechseln kann. Hierzu kann man USB auf Autosuspend stellen, d.h. wenn keine USB-Geräte angeschlossen sind bzw. keine Daten anliegen, können die USB-Chipsätze in einen Stromsparmodus schalten bzw. die Polling-Rate kann reduziert werden. Da viele ältere Geräte (z.B. Drucker, Scanner und auch einige Kameras gehen dann nach wenigen Sekunden Untätigkeit aus) hiermit Probleme haben, ist USB-Autosuspend bei manchen Distributionen per default deaktiviert. Neuere Geräte funktionieren damit aber problemlos und man kann USB-Autosuspend getrost aktivieren. Hot-Pluging, also das Einstecken von USB-Geräten im laufenden Betrieb mit automatischer Erkennung, funktioniert dabei trotzdem. Mit:

cat /sys/bus/usb/devices/*/power/level
cat /sys/bus/usb/devices/*/power/autosuspend

kann man die USB-Konfiguration abfragen (korrekte Ausgabe ist "auto" bzw. Zeit bis Autosuspend aktiviert wird).

PowerTOP macht hier leider falsche Angaben (Versionen 1.8 und 1.9). Zum einen sind die Stromspar-Vorschläge zu USB nur relevant, wenn USB-Treiber im Kernel integriert sind, aber nicht, wenn sie wie in Ubuntu als Kernel-Module konfiguriert sind (CONFIG_USB=m). Zum anderen beruht die Erkennung auf der Abfrage autosuspend=0, was aber ab Kernel 2.6.22 lediglich bedeutet, dass 0 Sekunden bis zum Autosuspend gewartet wird (vorher bedeutete es, dass Autosuspend abgeschaltet ist, siehe Bugreport). Folgende ansonsten oft vorgeschlagene Methode hat daher keinen Effekt:

for i in `find /sys -name autosuspend -exec echo {} \;` ; do echo "1" > $i ; done

bzw.

 for i in /sys/bus/usb/devices/*/power/autosuspend; do echo 1 > $i; done

Jedenfalls ist in Ubuntu Hardy usbcore als Modul konfiguriert und per default ist autosuspend bereits aktiviert.

Bei anderen Distributionen ist ggf. das usbcore Module auf Autosuspend zu stellen, am besten über Module-Optionen in /etc/modprobe.d/options (Debian/Ubuntu):

options usbcore autosuspend=1

Folgende ebenfalls oft vorgeschlagene Alternative funktioniert nur, wenn Autosuspend bei der Compilierung des Kernels aktiviert wurde (in Ubuntu Gutsy und Hardy ist dies nicht der Fall): Bootoption "usbcore autosuspend=1" an die Kernel-Kommandozeile oder in der GRUB Konfiguration

Dennoch verbringt die CPU bei einer Out-of-th-Box Installation von Ubuntu Hardy etwa die Hälfte der Zeit in C2-Sleep, statt in C3/C4 zu gehen. Ursache ist ein Fehler im USB 1.1 Modul (uhci_hcd), das permanent Busmaster-Zugriff (DMA) erzeugt, selbst ohne angeschlossene USB-Geräte. Dies verhindert, dass die CPU in tiefere Schlafzustände gelangt (im DMA-Betrieb musst die CPU die Cache-Kohärenz mit dem RAM gewährleisten und kann daher nicht schlafen). Entladen des USB-Moduls sorgt dafür, das die CPU nicht mehr am Schlafen gehindert wird:

rmmod uhci_hcd

Der Anteil von C1 und C2 sollte damit auf 0% fallen und der Anteil an C3/C4-Sleep sollte im Niedriglastbereich dann über 95% liegen, was etwa 1-2 Watt reduzierten Strombedarf bringt. Bei Bedarf lässt sich das USB-Modul wieder laden (wird für USB 1.1-Geräte benötigt, USB 2.0-Geräte laufen auch ohne dieses Modul):

modprobe uhci_hcd

Leider sind sowohl der Fingerprint Reader als auch Bluetooth über USB 1.1 angebunden und lassen sich ohne das Modul uhci_hcd nicht nutzen. Um beides zu kriegen - niedrigen Stromverbauch und trozdem funktionierenden Fingerprint Reader - müsste das Modul per Script jeweils temporär geladen bzw. wieder entladen werden. Gleiches gilt für die Nutzung der Bluetooth Schnittstelle oder anderer USB 1.1 Geräte.

Nach langer Suche ist endlich hierfür die Lösung bekannt:

USB autosuspend funktioniert nur korrekt, wenn die Treiber im Kernel integriert sind. Bei den Distributionen, bei denen dies nicht der Fall ist (z.B. Ubuntu Hardy) muss man also den Kernel mit den entsprechenden Modulen compilieren (Anleitung dazu siehe Kernel compilieren). Dann kann man den Fingerprint Reader und auch Bluetooth nutzen und die CPU kann gleichzeitig dennoch in die stromsparenden C3/C4-States wechseln. Auch das autmatische Abschalten von USB bei Nichtbenutzung funktioniert dann.

Im Kernel von Ubuntu Intrepid Ibex wurde dies nun geändert, so dass USB autosuspend out-of-the-box funktioniert.

Grafikkarten

Integrierte Intel-Grafikkarten und NVIDIA Grafikkarten werden i.d.R. bei der Installation von Ubuntu Hardy automatisch erkannt und die Stromsparfunktionen aktiviert. Bei ATI-Karten muss man hierzu unter System/Hardware Treiber den "Beschleunigten Grafik-Treiber von ATI" aktivieren und rebooten. Abfragen des Modus mit:

aticonfig --lsp

Aktivieren der Stromsparfunktion bringt etwa 3 Watt:

aticonfig --set-powerstate=1

Für Modelle mit Nvidia Grafik sollte man in der /etc/X11/xorg.conf in der Section "Device" Folgendes hinzufügen, damit werden die von dem Grafikchip ausgehenden Wakeups im einfachen 2D Betrieb nahezu vollständig eliminiert.

Option      "OnDemandVBlankInterrupts" "true"

1-2 Watt bringt das Aktivieren der Ati-Grafikkarten-Stromsparmodi Erfahrungen nach (mindestens) auf dem X31. Dazu trägt man in die /etx/X11/xorg.conf folgendes ein:

Section "Device"
        (....)
        Option  "DynamicClocks" "true"
        Option "NoDri" "true"
EndSection

Das deaktiviert zwar die DRI-Extension und die lustigen 3D effekte bleiben auf der Strecke, es ist aber signifikanter Bestandteil eines ehrgeizigen Stromsparens. Idle-Werte auf niedrigster Helligkeit, Wlan an und geparkter Platte sind mit neuem Ubuntu 8.10 von 7.3W bei 10 Wakeups pro Sekunde üblich, sofern man in den anderen Bereichen seine Hausaufgaben gemacht hat.

siehe auch:

Festplatte abschalten

Festplatte mit Laptop Mode kontrollieren und zum Stromsparen abschalten (die Festplatte wird bei Office-Arbeiten oder zum Web-Surfen nicht benötigt):

  • Festplatte dazu auf maximales Stromsparen stellen (hdparm -B 1)
  • Dirty Writeback Time des RAM-Caches für die Festplatte hochsetzen, z.B. auf 30 Minuten (Default ist 5 Sekunden), das sind 180000 Centisecs
  • die Spindown on idle Zeit, also wie lange die Platte untätig bleibt, bevor sie abschaltet, entsprechend runter setzen, z.B. auf 1 Sekunde (mehr ist nicht nötig)
  • Zusätzlich sind einige Log-Zugriffe abzuschalten syslog, noatime (siehe Doku zu Laptop Mode Tools)
  • mit ramlog lassen sich auch logs in eine Ramdisk verlegen
  • Problem: Firefox nutz, ebenso wie Opera, SQlight. Dabei werden Daten öfter mal mit einem flush() am Write-Cache vorbei auf die Platte geschrieben.
  • Man kann nun das ständige Flushen des RAM Write Caches in Firefox 3.0 durch die SQlite Voreinstellung "Pragma Syncronous off" abschalten, dies erfordert aber ein Neucompilieren der Firefox Sourcen. Den vermutlich gleichen Effekt erzielt man durch Änderung des Parameters in der about:config (toolkit.storage.synchronous = integer value 0, meaning "off"), allerdings gibt es trotzdem immer 2 Zugriffe je Seite, siehe auch diesen Thread bei mozillazine.
  • die ganz harte Tour verhindert das Flushen der Datenbank über Kernel-Einstellung fsync/fdatasync disabled. Das erfordert natürlich das Kompilieren des Kernels und ist auch nicht ganz risikolos (möglicher Datenverlust bei Crash).
  • Alternativ kann man Datenbank in eine RAM-Disk verlegen. Dann muss man darauf achten, dass diese vor dem Ausschalten immer auf die Platte geschrieben wird.
  • oder man verlegt das Profil, bzw. nur die kritische Datenbank-Datei places.sqlight auf ein remote Laufwerk.
  • Oder man kann einen anderen Browser benutzen, Epiphany oder Kazehakase erzeugen z.B. keine Festplattenzugriffe (am Write Cache vorbei). Leider waren Epiphany und Kazehakase in den getesteten Versionen nicht wirklich Crash-resistent und daher nicht zur durchgängige Nutzung geeignet.
  • Man kann die die SQLight-Zugriffe auch einfach umgehen, indem man einige Features abschaltet. Also Pishing Filter aus, Chronik aus, AwesomeBar aus, siehe dazu z.B. Chronik abschalten. Damit ist dann ein Arbeiten ohne Festplattenzugriff auch mit Firefox möglich. Wer dennoch Features wie eine Suche in der Bookmarkliste nutzen möchte, kann besser auf Online-Dienste dazu zurückgreifen, beispielsweise del.icio.us oder Mozilla Weave.
  • die Platte bleibt mit vergrößerter Writeback-Zeit solange aus, bis man wieder auf sie explizit zugreift. Mehrere Stunden Surfen ohne einen einzigen Plattenzugriff ist kein Problem (lediglich Writeback-Zeit entsprechend einstellen).
  • mit ausreichend RAM (z.B. 3GB) und wenn man lange genug arbeitet ohne zu booten stehen die meisten Daten im Cache und die Festplatte wird fast nicht benutzt. Der RAM-Cache bleibt erhalten, auch nach Sleep/Resume oder Hibernate.
  • wer öfter Rebooten muss, kann das Tool preload benutzen, um den RAM Cache zu befüllen
  • auch megabyteweise Downloads z.B. ein PDF-File und anschließendes Öffnen im PDF-Viewer erzeugt so dank Write-Caching keinen einzigen Plattenzugriff.
  • ohne Lüfter- und Festplattenaktivität ist der Laptop fast unheimlich...

Lüftersteuerung mit ThinkPad_Fan_Control

ThinkPadFanControl erlaubt die Einstellung einer Triggerschwelle für alle Temperatursensoren
  • Homepage ThinkPad_Fan_Control
  • Funktioniert einwandfrei mit Ubuntu Hardy
  • Lässt den Lüfter bis zu einer einstellbaren Temperatur aus, darüber wird auf Hardwaresteuereung (BIOS) umgeschaltet

Dadurch erhält man kein weiches Anlaufen des Lüfters und oberhalb der eingestellten Schwelle zu hohe Drehzahlen, was sich leider nicht ändern lässt. Allerdings benötigt dieser Ansatz vergleichsweise wenige CPU Wakeups. In Ubunty Hardy gehen die ACPI Wakeups lediglich von circa 5 pro Sekunde auf etwa 10-25 pro Sekunde hoch. Dies entspricht (bei geringer Last) etwa einem Mehrverbrauch von 0,1 Watt (bei hoher Last haben diese Wakeups keinen Einfluss auf den Stromverbrauch).

Siehe auch Lüftersteuerung

Stromhungrige Anwendungen

  • mit TOP bzw. PowerTOP die Hauptverdächtigen anzeigen lassen, dann sieht man welche Prozesse/Anwendungen Last bzw. WakeUps verursachen
  • oft übersehen wird der Browser als Lastfaktor. Etliche Webseiten haben inzwischen Java Script Animationen laufen, die bei diversen offenen Tabs schnell zu erheblichem Stromverbrauch führen. Wer im Akkubetrieb möglichst lange surfen möchte, sollte Java Script also in seinen Browser-Einstellungen deaktivieren. Allerdings werden dann auch einige erwünschte Effekte nicht dargestellt, beispielsweise verlangen viele WYSIWYG-Browser-Editoren Java Script. Leider gibt es bei den gängigen Browsern noch keine Möglichkeit, nur für bestimmt Webseiten oder für Teile daraus Java Script zu aktivieren bzw. zu deaktivieren. Auch Flash-Animationen und Flash-Videos sind ausgemachte Stromfresser. Diese starten - im Gegensatz zu Java Script Animationen - aber meistens erst, wenn man sie anclickt. Leider gibt Flash die Ressourcen nicht wieder korrekt frei, man muss also eine Seite, auf der man ein Flash Video angeschaut hat komplet schließen. Ansonsten geht das Sound Interface nicht in Sleep und dessen CPU Wakeups verursachen 1-2 Watt Mehrverbrauch. Hinzu kommen Web 2.0 Goodies wie Ajax. Leider belasten diese dynamischen Browser-Elemente den Rechner, auch wenn sie gar nicht angezeigt werden. Wer also tabbed browsing im Akkubetrieb macht, sollte bedenken, dass auch die nicht sichtbaren Tabs den Rechner belasten. Der Einfluss auf den Stromverbrauch ist erheblich, eine einzige dynamische Webseite sorgt bereits typisch für einige Watt Mehrverbrauch. Wer seine Mails also beispielsweise direkt über Google-Mail im Browser ließt, sollte diese Seite im Akkubetrieb nicht ständig im Hintergrund (als Tab) offen halten (besser für den Strombedarf: Mails per POP bzw IMAP abrufen).
  • Scrolling, Zooming und Rendering: Die Ressorcenbelastung durch den Browser ist beim Rendering erheblich. Beim Scrolling mit aktivierter Smooth Option und Full Page Zooming, kommt ein System - speziell bei Intel Grafik in Verbindung mit aktiviertem Compositing und hoher Display-Auflösung - schnell an die Leistungsgrenze. Mehr zu den für den Stromverbrauch besten Einstellungen der Scrolling-Optionen der Browser in diesem Thread. Man sollte in Firefox 3 die Zoom-Einstellungen auf "Text only" stellen und zum Scrollen eine Extension wie "Yet another Smooth Scrolling" nutzen, dies reduziert signifikant die CPU Last.
  • Der Gnome System Monitor ist ausgesprochen ressourcenhungrig. Wer diesen im Hintergrund laufen lässt kriegt sofort 4-5 Watt Mehrverbrauch. Besser ist da ein Commandozeilentool, etwa top.
  • dynamische Taskbar-Applets (etwa zum Anzeigen der CPU-Auslastung) oder Desktop-Applets (z.B. Anzeige einer Uhr mit Sekundenzeiger), erzeugen etliche Wakeups und sorgen in Summe schnell für ein Watt Mehrverbrauch auf einem ansonsten unbelasteten Rechner
  • Instant Messenger erzeugen einige Wakeups. Das P2P-basierte Skype sorgt mit ca 20 Wakeups/sec. für etwa 1 Watt Mehrverbrauch. Zentralistische Client-Server Messenger kommen mit weniger aus.
  • als Faustregel gilt: alles was sich bewegt, blinkt bzw. sonstwie dynamisch aktualisiert werden muss, erzeugt CPU-Wakeups, stört die CPU beim Schlafen und verbraucht damit Strom

Diverse Linux Stromspar-Tipps

  • neuesten Kernel benutzen. Standard in Ubuntu Hardy Heron ist 2.6.24. Zum Upgraden des Kernels siehe Kernel compilieren. Ein Upgrade von Kernel 2.6.24 auf 2.6.25 bringt auf Core Duo Prozessoren etwa 0,5 Watt. Ursache sind Verbesserungen beim IRQ-Balancing (in Powertop als "Rescheduling Interruts" angezeigt).
  • PowerTOP starten und Stromspar-Vorschläge ausführen sowie die laufenden Prozesse auf Wakeup-Übeltäter durchforsten und ggf. beenden
  • Optional: Undervolting (bringt Reduzierung des Stromverbrauchs bei höherer Last)
  • zugehöriger Thread im Thinkpad-Forum
  • Stromfresser sind vor allem USB 1.* (uhci_hcd), der _alte_ Bluetooth Treiber (leider sind die Broadcom Chips in den TPs per legacy USB angeschlossen), der CardBus für pcmcia etc., Musikapplikationen, Animationen, grafische Spielereien wie Compiz etc.
  • Firefox Disk Cache disablen (über about:config), das reduziert die Festplattenzugriffe (dies spielt bei aktiviertem RAM Write Caching aber keine Rolle)
  • Framebuffer compression, bringt etwa 0,6 Watt laut Intel

BIOS & Stromsparen

  • Spezifisch für T61: Bios Version 1.26 ist scheinbar die sparsamste, macht ~2Watt aus im Vergleich zu 2.10. Bios Version (nur bei Meroms, also Prozessoren der T7* Familie). Siehe auch Vista, BIOS & Stromsparen.

WLAN Stromsparen

Stromsparmodus der WLAN-Karte aktivieren bei ipw-Treibern (alt):

iwpriv eth0 set_power 5

Achtung: ab einer nicht näher bekannten Version des Treibers, spätestens aber ab Ubuntu 8.10, ist der Stromsparparameter

iwpriv eth0 set_power 7

Überprüfen kann man das mit folgendem Befehl:

max@x31:~$ iwpriv eth1 get_power
eth1      get_power:Power save level: 7 (BATTERY)

Für iwl-Treiber (das sind die neueren):

echo 5 > /sys/bus/pci/drivers/iwl3945/*/power_level

oder

echo 5 > /sys/bus/pci/drivers/iwl4965/*/power_level

Dabei ist der "*" individuell zu ersetzen (in das Verzeichnis wechseln und nachschauen wie es dort heißt), sieht komplett dann z.B. so aus:

echo 5 > /sys/bus/pci/drivers/iwl3945/0000:03:00.0/power_level

Abfrage geht analog mit cat Befehl:

cat /sys/bus/pci/drivers/iwl3945/0000:03:00.0/power_level

WLAN Stromsparmodus spart etwa 0,25-0,5 Watt (je nach Belastung) und sorgt zudem für eine kühlere WLan Karte (liegt bei vielen Thinkpad-Modellen - z.B. X-Serie - unter der rechten Handballenauflage).

Stromspar-Änderungen persistent machen

Im Startupscript /etc/rc.local kann man die Einstellungen persistent machen (d.h., bei jedem Booten automatisch ausführen, was aber nicht immer reicht, siehe nachfolgend). Hier eine Beispieldatei (x61t):

# By default this script does nothing.
# Trackpoint sensibler (empfohlen für Trackpoint-Experten)
echo -n 250 > /sys/devices/platform/i8042/serio1/sensitivity
# und schneller
echo -n 250 > /sys/devices/platform/i8042/serio1/speed

# Wake-on-Lan aus
ethtool -s eth0 wol d

# PCI Geräte stromsparen
for i in /sys/bus/pci/devices/*/power_level ; do echo 5 > $i ; done

# WLAN stromsparen, hier 3945agb mit iwl-treibern
echo 5 > /sys/bus/pci/drivers/iwl3945/*/power_level
# WLAN Stromsparen bei intel2200 (z.B. T43)
# iwpriv eth1 set_power 5

# Sound stromsparen nach 4 sec
echo 4 > /sys/module/snd_hda_intel/parameters/power_save
# Sound stromsparen auf AC97 Chipsätzen (z.B. T40 - T43)
# echo 1 > /sys/module/snd_ac97_codec/parameters/power_save

# xbacklight aktivieren (Workaround für einen Bug in Hardy-Alpha-6)
# xrandr --output LVDS --set BACKLIGHT_CONTROL native
# USB autosuspenden (bringt ab Kernel 2.6.22 nichts mehr)
# for i in `find /sys -name autosuspend -exec echo {} \;` ; do echo "1" > $i ; done
# Laptop Mode aktivieren
echo 5 > /proc/sys/vm/laptop_mode
# governor auf ondemand
echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# Stromsparenden Scheduler für Multicore Systeme aktivieren
echo 1 > /sys/devices/system/cpu/sched_mc_power_savings
# AHCI Link Power Management. Auskommentiert wenn statt AHCI
# "Compatibility Mode" im Bios aktiviert ist; min_power bedingt
# ein sehr langsames Suspend to Ram
echo medium_power > /sys/class/scsi_host/host0/link_power_management_policy 

# Falls CD Laufwerk vorhanden das Polling abschalten
# hal-disable-polling --device /dev/cdrom
# Dirty Writeback Time vergrößern für weniger Festplattenaktivität
# 180000 Centisecs entspricht 30 Minuten Ruhe ((macht auch Laptop Mode)
echo 180000 > /proc/sys/vm/dirty_writeback_centisecs
# Bluetooth abschalten
hciconfig hci0 down ; rmmod hci_usb
exit 0

Unnötige Kernel-Module in die Blacklist /etc/modprobe.d/blacklist (deaktiviert PCMCIA, USB, FireWire, späteres manuelles Nachtladen der Module ist kein Problem):

# folgende Module nicht laden wegen Wakeups/Stromverbrauch
blacklist pcmcia
blacklist yenta_socket
# blacklist ehci_hcd # Bedingt keine Wakeups, nur bei angeschlossenen Geräten
blacklist uhci_hcd # USB 1.1, verbraucht 1-2 Watt! 
# Man kann das uhci_hcd-Problem aber durch integrieren des Moduls in den Kernel beheben, siehe Kernel compilieren
blacklist usbcore
blacklist ohci1394
blacklist firewire-ohci

Einige Module werden schon während der initramfs-Phase geladen. Die blacklist auch dort durchsetzen durch:

update-initramfs -u

Zusammenspiel Laptop Mode Tools und Gnome Power Manager

Dummerweise überschreibt der Gnome Power Manager (GPM) beim Wechsel Akku/AC die Dirty Writeback Time, siehe auch diesen Thread auf ubuntuusers. Das heißt, man muss sie jedes mal manuell oder per script wieder auf den gewünschten Wert setzen. Hierzu gibt es bisher keine saubere Lösung, außer den GPM zu deaktivieren (geändert in Intrepid Ibex, s.u.).

Der GPM übernimmt aber auch einige weitere Funktionen, etwa die Keycodes. Denn leider funktionieren im 2.6.24 Kernel die Fakekey propagates durch den kernel nicht, siehe Bugreport, d.h. ohne GPM funktionieren die HotKeys nicht. Ein Workaround sind setkeycode Befehle für jede Taste, die der Kernel durchlassen soll, diese kann man in /etc/rc.local persistent machen.

Mit Ubuntu Intrepid Ibex wurden das Zusammenspiel zwischen gnome-power-manager und den laptop-mode-tools überarbeitet. Dabei ruft der GPM nun Teile des LMT codes auf, so dass endlich die dort eingestellten Werte benutzt werden.

Ein anderes Problem ist, dass einige Schnittstellen nach einem Suspend/Resume ihre Einstellungen verlieren, so wird etwa Wake-on-Lan nach dem Aufwachen immer wieder aktiviert. Und auch die WLAN Stromspareinstellungen gehen verloren.

Debugging

Zum Debugging hilfreich: Überprüfen der Dirty Writeback Zeit geht mit:

cat /proc/sys/vm/dirty_writeback_centisecs

Ob Laptop Mode aktiviert ist, prüft man mit:

cat /proc/sys/vm/laptop_mode

(0 bedeutet aus; >0 bedeutet an)

Gnome Power Manager abschalten:

killall gnome-power-manager

Laptop Mode starten bzw. stoppen:

sudo laptop_mode start

bzw.

sudo laptop_mode stop

Beispiel eines Rundum-Pakets für das X31 mit frischem Ubuntu 8.10 für 7 Watt im Idle

Das war immer in meinen Startup-Scripten, ich wünsche mir dass es jemand der es besser weiß kommentiert oder editiert wo es am besten im neuen Ubuntu hin sollte.

echo 1 > /sys/module/snd_ac97_codec/parameters/power_save
echo 1500 > /proc/sys/vm/dirty_writeback_centisecs

for i in /sys/bus/usb/devices/usb*/power/autosuspend ; 
  do echo 1 > /sys/bus/usb/devices/usb4/power/autosuspend; 
done

echo 5 > /proc/sys/vm/laptop_mode
iwpriv eth1 set_power 7
ethtool -s eth0 wol 


/etc/modprobe.d/blacklist

(..)
#USB1.1
blacklist uhci_hcd

#PCMCIA
blacklist pcmcia
blacklist yenta_socket

#SPEEDSTEP, USE acpi_cpufreq instead
blacklist speedstep-centrino

#IPTABLES
blacklist iptables_filter
blacklist ip_tables
blacklist x_tables

#PARPORT
blacklist ppdev
blacklist parport_pc
blacklist lp
blacklist parport

#IRDA
blacklist nsc_ircc
blacklist irda
blacklist crc_ccitt

#FIREWIRE
blacklist ohci1394
blacklist firewire-ohci

/etc/modules

(..)
acpi-cpufreq
ipw2200 associate=0 led=1

/etc/X11/xorg.conf - Macht einen Löwenanteil von bis zu 2 Watt aus!


Section "Device"
        Identifier      "Configured Video Device"
        Option  "DynamicClocks" "true"
        Option "NoDri" "true"
EndSection

Das acpi_cpufreq-Modul mit dem Undervolting-Patch gibt es vorkompiliert hier, für Ubuntu 8.10 braucht man momentan das Modul für 2.6.27-7.

http://swiss.ubuntuforums.org/showthread.php?t=786402&page=22

Downloaden, entpacken und dann kopieren.

sudo cp acpi-cpufreq.ko /lib/modules/$(uname -r)/kernel/arch/x86/kernel/cpu/cpufreq

Dannach kann man seine Spannungswerte setzen, hier mal meine für ein X31/1.7Ghz, muss man aber halt anpassen wenns einfriert.

sudo -s
echo 17:40 14:24 12:18 10:10 8:4 6:0 > /sys/devices/system/cpu/cpu0/cpufreq/phc_controls

Auch das kann man dem obersten Script hinzufügen, dann allerdings ohne sudo -s

Der laptop-mode kann durch eine kleine Änderung in der Datei /etc/default/acpi-support aktiviert werden:

# Switch to laptop-mode on battery power - off by default as it causes odd
# hangs on some machines
ENABLE_LAPTOP_MODE=true


Nach all diesen Änderungen erreiche ich auf meinem X31 bei niedrigster Helligkeit, Wlan verbunden und Idle mit geparktem Lesekopf 7W Verbrauch. Das finde ich Ordentlich, zumal man in dem Zustand Webseiten lesen kann. Surft man normal im Netz, so pendelt sich der Verbrauch zwischen 7.7W und 8.5W ein. Ein Wert, der sich auch mit Blick auf Windows XP sehen lassen kann!

Links