Stromsparen unter Linux
Gerade bei den Distributionen bei denen man selbst Hand anlegen muss, braucht es ein paar Handgriffe bis die Hardware nicht sinnlos Energie in Wärme umwandelt.
CPU
Die CPU ist mittlerweile recht einfach zum Stromsparen zu überreden. Im Kernel müss dafür unter anderem folgendes aktiviert (und falls als modul gebaut auch geladen) werden:
- CONFIG_CPU_FREQ
- CONFIG_X86_ACPI_CPUFREQ
- CONFIG_CPU_IDLE
- CONFIG_INTEL_IDLE
Die Wirksamkeit der Einstellung kann man entweder durch blick in /proc/cpuinfo oder powertop überprüfen
Grafik
Intel
Die Stromsparfunktionen einer Intel-GPU werden über die Optionen des Kernelmodules gesteuert, am wichtigsten ist RC6.
i915.i915_enable_rc6=1 i915.lvds_downclock=1
Mittlerweile sind die Probleme gefixt, ab 3.4 sollte der “normale” RC6 zustand Aktiviert sein - “deep” und “deepest” RC6 können dann über i915.i915_enable_rc6=3 bzw. i915.i915_enable_rc6=7 aktiviert werden. Von der Nutzung von deepest RC6 raten die Intel Entwickler allerdings ab. Weitere Informationen siehe: http://www.heise.de/open/meldung/Linux-3-4-nutzt-Intels-GPU-Stromspartechnik-RC6-1501110.html
Um zu überprüfen ob die GPU ihren Takt ändert hilft
watch -n1 'cat /sys/kernel/debug/dri/0/i915_cur_delayinfo'
Nouveau
schwer zu schreiben ohne Nvidia-Karte im Haus :(
Radeon
Zum aktivieren der Dynamischen Taktung der radeon Treiber genügt ein:
echo "dynpm" > /sys/class/drm/card0/device/power_method
Allerdings kann es bei manchen Karten beim umschalten der Frequenzen zu einem leichten Bildflackern kommen. Möchte man den zustand der Karte selbst regeln, so kann man auf Profilbasierte Regelung umstellen:
echo "profile" > /sys/class/drm/card0/device/power_method; echo "low" > /sys/class/drm/card0/device/power_profile
Verfügbare Werte sind (bei der hd3850): high, mid, low
Möchte man überprüfen ob die Karte ihren Takt verändert, kann man die aktuellen Einstellungen mit
cat /sys/kernel/debug/dri/0/radeon_pm_info
ansehen.
Sonstiges
Hilfreich für die Einstellungen der WLAN Karte oder der Festplatten-Parameter sind die Tipps von “powertop”. Sachen die davon nicht abgedeckt werden sollen hier erklärt werden.
Aktivieren des Energiesparmodi für jedes Gerät
Ob ein Gerät automatisch Energie spart wird in Linux über die “power/control” variable geregelt, die für jedes Gerät im /proc Verzeichnisbaum liegt. Der letze “Tab” in powertop bemängelt dabei auch immer den Zustand der Variabeln mit “Good” oder “Bad”. Um im Akkubetrieb hier nur “Good” stehen zu haben, genügt es ein kleines Skript zu schreiben das das Programm “pm-powersave” (aus dem gentoo-Paket sys-power/pm-utils) dann aufruft. pm-powersave wird standardmäßig von acpid verwendet (einstellbar in der /etc/acpi/default.sh ) um je nach zustand des Netzsteckers einige Stromsparmasnahmen zu aktivieren oder deaktivieren. Das neue Skript sollte (je nach Distribution) im Verzeichnis /usr/lib64/pm-utils/power.d (oder ähnlich) gespeichert werden.
#!/bin/sh # enables the runtime powermanagement for every device found runtime_pm() { for i in `find /sys -path "*/power/*" -name "control" -print`; do echo "auto" > $i done # Device: 0003:046D:C52B.0003: hiddev0,hidraw0: USB HID v1.11 Device [Logitech USB Receiver] # seems to dislike autosuspend - lagging mouse etc echo "on" > /sys/bus/hid/devices/0003:046D:C52B.0003/power/control } case "$1" in true) echo "**runtime powermanagement ON" runtime_pm ;; false) echo "**runtime powermanagement unchanged" ;; esac exit 0
PCIE-ASPM
Vor 3.2 hat sich der Linux-Kernel auf die BIOS-Informationen verlassen, um die PCI-Express Stromsparmaßnahmen zu steuern. Dies führte meist dazu, das kein Strom gespart wird. Um auf diesen Kerneln ASPM dennoch zu nutzen benötigte man einen Bootparameter
pcie_aspm=force
Ab der Version 3.2 nutzt Linux die Informationen aus den Windows-Gerätetreibern, um die Optimalen Einstellungen zu setzen. Auf manchen Laptops führt das erzwingen von ASPM mit dem Bootparameter zu Abstürzen - dann einfach einen neueren Kernel verwenden ;) Weitere Informationen, siehe http://www.heise.de/open/artikel/Kernel-Log-Hoeherer-Stromverbrauch-durch-BIOS-Bugs-1268394.html