Linux Stromsparen: Unterschied zwischen den Versionen

Aus ThinkPad-Wiki
Zeile 27: Zeile 27:
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 [http://www.lesswatts.org/projects/tickless/ Dynticks] seit Kernel 2.6.21 vom April 2007). Linux hat die Zahl der Kernel-Interrupts und Übergänge in CPU-Sleep-States deutlich optimiert.
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 [http://www.lesswatts.org/projects/tickless/ Dynticks] seit Kernel 2.6.21 vom April 2007). Linux hat die Zahl der Kernel-Interrupts und Übergänge in CPU-Sleep-States deutlich optimiert.


Aber die CPU macht nur einen kleinen Anteil des Gesamtstromverbrauchs aus. Dieser hängt auch stark von der spezifischen Hardware und den dazugehörigen Treibern ab. Für ältere Hardware sind stromeffiziente Treiber oft nur für Windows vorhanden. Auf einem [[T40]] beispielsweise hat man also 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 gut unterstützt. Ab der Generation des ThinkPad T43 verbrauchen Rechner unter Linux daher etwa 1-2 Watt weniger Strom als unter Windows (beide Betriebssysteme stromsparoptimiert).
Aber die CPU macht nur einen kleinen Anteil des Gesamtstromverbrauchs aus. Dieser hängt auch stark von der spezifischen Hardware und den dazugehörigen Treibern ab. 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.
 
Für ältere Hardware sind stromeffiziente Treiber oft nur für Windows vorhanden. Auf einem [[T40]] beispielsweise hat man also 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 gut unterstützt. Ab der Generation des ThinkPad T43 verbrauchen Rechner unter Linux daher etwa 1-2 Watt weniger Strom als unter Windows (beide Betriebssysteme stromsparoptimiert).


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]]).
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]]).

Version vom 13. Mai 2008, 18:49 Uhr

Stromverbrauch analysieren mit PowerTOP

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 verbraucht der Prozessor etwa die spezifizierte 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. Das Abschalten dauert aber etwas Zeit. Wenn die CPU 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

Abhängig vom BIOS lässt sich der C4-State "Deeper Sleep" für den Akkubetrieb aktivieren bzw. deaktivieren. Im Office/Surf-Betrieb wird eine moderne CPU kaum ausgelastet und verbringt über 95% im C4-Sleep-State.

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.

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. Ein nackter Desktop läuft mit unter 20 Wakeups. Hierbei unterscheiden sich Gnome, KDE oder XFCE übrigens kaum.

Neu seit Kernel 2.6.24 sind "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-Zusatänden verweilen kann. Dieses Power Aware IRQ Balancing ist im 2.6.24er-Kernel allerdings noch nicht ganz ausgereift.

Siehe auch http://www.lesswatts.org - Intel-Seite zum Stromsparen unter Linux

Stromverbrauch Windows versus Linux

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). Linux hat die Zahl der Kernel-Interrupts und Übergänge in CPU-Sleep-States deutlich optimiert.

Aber die CPU macht nur einen kleinen Anteil des Gesamtstromverbrauchs aus. Dieser hängt auch stark von der spezifischen Hardware und den dazugehörigen Treibern ab. 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.

Für ältere Hardware sind stromeffiziente Treiber oft nur für Windows vorhanden. Auf einem T40 beispielsweise hat man also 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 gut unterstützt. Ab der Generation des ThinkPad T43 verbrauchen Rechner unter Linux daher etwa 1-2 Watt weniger Strom als unter Windows (beide Betriebssysteme stromsparoptimiert).

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).

Stromfresser USB

Wesentliches Sparpotenzial hat das Abschalten von USB. 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 (Siehe Bild). Entladen des USB-Moduls sorgt hier für Abhilfe:

rmmod uhci_hcd

Der Anteil an C3/C4-Sleep sollte im Niedriglastbereich dann über 90% liegen. Die USB-Unterbrechungen abzuschalten bringt, je nach System und Last, etwa 1-2 Watt.

Qsicon inArbeit.png USB Module zu entladen (und bei Bedarf manuell nachzuladen) ist natürlich keine schöne Lösung. Bislang ist aber keine Möglichkeit für Autosuspend bekannt.

Grafikkarten

siehe http://wiki.ubuntuusers.de/Strom_sparen

Diverse Linux Stromspar-Tipps

  • Kernel >=2.6.24 (Standard in Ubuntu Hardy Heron)
  • Festplatte mit Laptop Mode kontrollieren und zum Stromsparen abschalten (wird bei Office-Arbeiten oder zum Web-Surfen nicht benötigt)
  • PowerTOP starten und Stromspar-Vorschläge ausführen sowie die laufenden Tasks 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 idR), 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. pp.

Spezifisch für T61

  • Bios Version 1.26 ist scheinbar die sparsamste, macht ~2Watt aus im Vergleich zu 2.10. Bios Version

Spezifisch für Intel PRO/Wireless 3945ABG

Stromsparmodus der WLAN-Karte aktivieren bei ipw-Treibern:

iwpriv eth0 set_power 5

Für iwl-Treiber:

echo 5 > /sys/bus/pci/drivers/iwl3945/*/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, 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 10 sec
echo 10 > /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
for i in `find /sys -name autosuspend -exec echo {} \;` ; do echo "1" > $i ; done
# Laptop Mode aktivieren
laptop_mode start
# governor auf ondemand
echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# Stromsparenden Scheduler 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
echo min_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
echo 1500 > /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 (späteres manuelles Nachtladen der Module ist kein Problem):

# module nicht laden wegen Wakeups
blacklist pcmcia
blacklist yenta_socket
blacklist ehci_hcd
blacklist uhci_hcd
blacklist usbcore
blacklist ohci1394
blacklist sbp2
blacklist ieee1394

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

update-initramfs

Links