linux_powersave

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.

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

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'

FIXME schwer zu schreiben ohne Nvidia-Karte im Haus :(

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.

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.

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

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

  • linux_powersave.txt
  • Last modified: 2013/01/02 11:56
  • by brot