Energiesparen

aus openSUSE, der freien Wissensdatenbank

Energy Star Logo

Inhaltsverzeichnis

Einführung


Der folgende Abschnitt gibt einen Überblick über die Energieverwaltung in SUSE Linux-basierten Produkten, womit entweder openSUSE 11.1/Factory oder SUSE Linux Enterprise 11 gemeint sind. Er bietet eine Übersicht über die Maßnahmen, die zur Steigerung der Batterielaufzeit von Mobilcomputern ergriffen wurden.

Die beiden dafür maßgeblichen Rahmenwerke sind die pm-utils und die laptop-mode-tools. Allgemeine Energiesparfunktionen, die beim Abziehen des Netzsteckers in Kraft treten, erledigen die pm-utils. Die Skripte dazu liegen unter /usr/lib/pm-utils/power.d und werden manuell aktiviert, wenn pm-powersave true ausgeführt wird.

Die laptop-mode-tools haben ihre eigene Konfiguration unter /etc/laptop-mode/laptop-mode.conf und haben eine Menge, ja, eine Menge, möglicher Einstellungen, die die Festplatte oder Dateisystemoperationen beeinflussen.


Was gemacht wird


CPU-Frequenzskalierung (ACPI P-States)

Die Performanzstaaten einer CPU (gemäß der ACPI-Spezifikation) regeln die Taktfrequenz, mit der der Prozessorkern arbeiten kann. Das heißt, wie viele Instruktionen er pro Sekunde ausführen kann. Diese Funktion ist allgemein als CPU-Frequenzskalierung bekannt. Beispiele für diese Technologie sind Intel SpeedStep oder AMD PowerNow. Moderne Betriebssysteme nutzen dies, um die Frequenz bei Bedarf anzupassen, sie wird erhöht, wenn es viel zu tun gibt, und gesenkt, sobald Aufgaben abzuarbeiten sind, die nicht so viel CPU-Unterstützung brauchen.

Dies geschieht bei SUSE-basierten Produkten wie openSUSE 11.1, Factory oder SUSE Linux Enterprise Desktop/Server standardmäßig. Der Standard-CPU-Frequenzskalierungsregulator im Kernel heißt 'ondemand', er kümmert sich dynamisch um die Anpassung der Frequenz. Es bedarf dafür keiner Interaktion aus dem Nutzerraum.

Warum gibt es keine grafische Oberfläche zum Ändern der CPU-Richtlinie (CPU-Regulatoren)?

Meiner Erfahrung nach, suchen Kunden und openSUSE-Nutzer nur nach dieser Option, weil sie in der Vergangenheit (Testpläne, usw.) verfügbar war. Dies ist erstmal ein Fehler unsererseits.

Wir sollten unseren Kunden und Nutzern wirklich klar machen, dass es keinen Sinn ergibt, einen statischen CPU-Frequenzskalierungsalgorithmus wie powersave oder performance zu wählen.

Die Nutzung des Regulators 'powersave' würde nicht zum Energie sparen führen. Wenn die CPU auf ihre niedrigste Frequenz limitiert wird, dauert die Ausführung von Aufgaben nur länger, was durch die Verlängerung zum gleichen Energieverbrauch führt. Moderne Notebook-Komponenten wie CPUs sind auf eine sehr geringe Leistungsaufnahme optimiert, wenn sie nichts zu tun haben. Das Hauptziel sollte also sein, dass System so lange und so oft wie möglich nichts tun zu lassen. Wenn eine Aufgabe länger braucht, können auch alle anderen Komponenten wie Bildschirm, Festplatte und Netzwerkkomponenten in dieser Zeit nicht in den Ruhemodus versetzt werden.

Beim Regulator 'performance' würden Nutzer überhaupt keinen Geschwindigkeitszuwachs bemerken. Moderne CPUs und die CPUFreq-Implementation des Kernels können Frequenzen sehr schnell umschalten. Wenn Sie das System immer auf der höchsten Frequenz laufen lassen, wird in Wartezeiten massig Energie verschwendet.

Es gibt Nischen, in denen das obige nicht zutrifft, die aber hauptsächlich im Server-Bereich zu finden sind. Es ist nicht gut, dem normalen Nutzer einfache Kontrolle über etwas zu geben, das wie "jaa, wenn ich das wähle, dann habe ich mehr Leistung oder spare Energie" aussieht, ohne dass er die Hintergründe zu all den Auswirkungen auf das System kennt. Deshalb haben wir entschieden, solche CPU-Frequenzeinstellungen aus den grafischen Werkzeugen zu entfernen. Sehr erfahrene Nutzer können immer noch Kommandozeilenwerkzeuge wie die cpufreq-utils nutzen.

Im Endeffekt heißt dies nicht, dass wir nichts für die Energieverwaltung unternehmen. Es ist nur so, dass die meisten Dinge heutzutage dynamisch angepasst werden. Wenn eine bestimmte Komponente arbeitslos ist, sollte sie so wenig Energie wie möglich verbrauchen. Wenn es etwas zu tun gibt, sollte die Aufgabe so schnell wie möglich erledigt werden, um sich nachher wieder schlafen legen zu können. Ein weit verbreitetes Schlagwort für diese Strategie ist "Race to Idle".


Hürden im Nutzerraum überwinden

Während der letzten Jahre wurden viele verschwenderische Anwendungen aus dem Nutzerraum verbessert. Verschwenderischer Nutzerraum meint Prozesse/Anwendungen, die die CPU unnötig aufwecken, wodurch sie nicht so oft in den Ruhemodus versetzt werden und Energie sparen kann. Dies ist natürlich ein laufender Prozess.. Schuldige Anwendungen können meisten mit Powertop erkannt werden.


Mehrkernfähige CPU-Aufgabenplaner

Der Linux-Kernel hat einen mehrkernfähigen CPU-Aufgabenplaner (scheduler). Einfach gesagt heißt das, dass die CPU-Last so verteilt wird, dass möglichst nur eine CPU aufgeweckt wird.

Die Einstellung kann mit den pm-utils aus dem Nutzerraum heraus geändert werden:

$ echo 1 > /sys/devices/system/cpu/sched_mc_power_savings


Bildschirme

Die Energierichtlinien des Bildschirms werden unter GNOME vom gnome-power-manager Applet und unter KDE4 von power-devil durchgesetzt.

DPMS-Methoden werden genutzt, um den Bildschirm nach einer bestimmten Zeit auszuschalten, wenn das System nichts zu tun hat.

Die Bildschirmhelligkeit wird passend zum Status des Systems angepasst. Wenn es auf Batteriebetrieb läuft wird die Helligkeit verringert, läuft es im Netzbetrieb wird sie erhöht.

Weiterhin dimmen gnome-power-manager und power-devil den Bildschirm sogar nach einer bestimmten Ruhezeit, und erhöhen sie wieder, wenn der Nutzer aktiv ist.


Speichergeräte

SATA: Aggressive Verbindungsenergieverwaltung (pm-utils)

Wenn es keine E/A gibt, wird die SATA-Verbindung zur Festplatte in einen Energiesparmodus versetzt. Sie wird automatisch wieder aufgeweckt, wenn Anfragen ankommen. Dies kann pro Festplatte 1 Watt sparen.

Dateizugriffszeit (atime)

Wie bei der CPU ist auch hier das Ziel, die Festplatte so selten wie möglich aufzuwecken. Um das zu erreichen, werden Dateisysteme mit der Option 'relatime' eingebunden. Diese Option aktualisiert die letzte Zugriffszeit einer Datei nur, wenn die allte Zugriffszeit (atime) älter als die Modifizierungs- (mtime) oder die Änderungszeit (ctime) ist. Den Grund, warum wir nicht die Option 'noatime' verwenden, finden Sie weiter unten..

Laptop-Modus

Im Batteriebetrieb nutzen wir auch eine Art Laptop-Modus, um über die laptop-mode-tools Zwischenspeicher zu nutzen. Um die inaktive Zeit zu verlängern, speichert der Kernel Daten so lange wie mögliche zwischen, um zu verhindern, dass die Festplatte zu oft aufwacht und los dreht. Allerdings bringt dies die Gefahr des Datenverlusts durch Abnutzung mit sich. In Arbeitsplatzrechnern zum Einsatz kommende Festplatten sind oft nicht dafür ausgelegt, regelmäßig anzuhalten und anzulaufen, wodurch ihre Lebensdauer verkürzt werden kann. Die gleiche Gefahr besteht auch bei Laptop-Festplatten, wenn auch nicht im selben Ausmaß. Hersteller konstruieren ihre mobilen Festplatten oftmals so, dass sie auf häufiges Wechseln zwichen Schlafen und Arbeiten ausgelegt sind. Demgegenüber bringen Laptop-Festplatten im Energiesparmodus oftmals nicht so viel Energiesparpotential mit, da sie meistens schon auf niedrige Energieaufnahme optimiert sind.


Drahtlosnetzwerk

Als der drahtlose LAN-Standard IEEE 802.11 entworfen wurde, hatte die zuständige Arbeitsgruppe bereits Energieverwaltung eingeplant. Das ermöglicht es, Drahtlos-Chips schlafen zu legen. Zur Zeit unterstützen die Intel-Chips IWL3945 und IWL4965 diese Funktion.

Als erstes müssen Sie dabei wissen, dass Drahtloskarten die meiste Energie bei der Übertragung von Daten verbrauchen. Als logische Konsequenz sollte das Ziel darin bestehen, kurz aber massiv Daten zu übertragen, so dass sich verbundene Clients schnell wieder schlafen legen können, nachdem die Daten übertragen wurden. Clients finden sich so in zwei Staaten wieder. In einem für die Datenübertragung, dem aktiven Status, und einem zum Schlafen. Clients wachen periodisch auf, um zu prüfen, ob für sie Daten bereitstehen. Umgekehrt kennen die Zugriffspunkte (die es unterstützen) den Status aller verbundenen Clients, egal ob sie schlafen oder aktiv sind. Wenn es Datenpakete für einen bestimmten Client gibt, der gerade aktiv ist, werden diese Pakete sofort übertragen. Wenn der Client schläft, werden die Pakete so lange zwischengespeichert, bis der Client das nächste Mal aufwacht.

Dies kann bis zu 2 Watt sparen! Aus dem Nutzerraum kann man das Verhalten anpassen:

$ echo 6 > \
  /sys/bus/pci/drivers/iwl*/000*/power_level

In SUSE Linux-basierten Produkten wird dies beim Übergang in den Batteriebetrieb automatisch erledigt.


Audiokarten

Audiokarten können heruntergefahren (in einen Energiesparmodus versetzt) werden, wenn keine Töne ausgegeben werden. Dies geschieht, wenn eine Zeit lang nichts zu tun ist.

Energieersparnis: ≈ 0.5Watt

Die Auszeit kann aus dem Nutzerraum über die pm-utils angepasst werden:

$ echo 10 > /sys/module/snd_hda_intel/parameters/power_save

Warum erzeugt das auf meinem System manchmal ein klickendes Geräusch?

Beim Aufwachen aus dem Energiesparmodus produzieren manche Geräte ein klickendes Geräusch. Dies kann entweder passieren, wenn das Netzkabel entfernt/eingesteckt wird oder kurz bevor ein Ton abgespielt wird.

Falls dies zu nervig ist, kann es deaktiviert werden:

$ echo SOUND_PM= > /etc/pm-utils/sound-pm


Was besser gemacht werden kann


Energieverwaltung der Grafikkarte

Das Potential in diesem Bereich ist ziemlich groß, allerdings sind die Möglichkeiten geringer.

  • Intel:
 Für die Chips, für die ein quelloffener Treiber existiert, wie es
 bei Intel der Fall ist, ist der Chip in Bezug auf Energieverwaltung
 recht intelligent. Hier muss nicht mehr viel gemacht werden.
  • ATI:
fglrx: aticonfig exportiert für solche Grafikkarten Funktionen zum
  Anpassen der Energieverwaltungsmodi. Allerdings nutzen wir es nicht,
  da wir noch zögern, ob wir sollen.
radeonHD: Da der Treiber noch sehr neu ist, hat er noch keine
  Energiesparfunktionen. Das wird sich in Zukunft hoffentlich ändern.
  • NVIDIA: TODO


Dateisystemoption 'noatime'

Im Batteriebetrieb binden wir Dateisysteme neu mit der Option relatime ein. Allerdings gibt es mit der Option 'noatime', die das Schreiben der Zugriffszeit komplett abschaltet und die Festplatte so länger im Ruhemodus belässt, eine noch bessere Möglichkeit zum Energie sparen. Wir setzen sie allerdings standardmäßig nicht ein, weil es einige Anwendungen gibt, die eine gespeicherte Zugriffszeit brauchen, um richtig zu funktionieren. Tatsächlich kenne ich aber nur eine Anwendung, nämlich den E-Mail-Leser "mutt". Wenn Sie ihn also nicht nutzen, weil Sie bspw. Evolution oder so einsetzen, können Sie auf ihrem System wahrscheinlich ruhig die Option 'noatime' nutzen. Dazu müssen Sie die folgenden Einstellungen in /etc/laptop-mode/laptop-mode.conf anpassen:

CONTROL_NOATIME=1
USE_RELATIME=0 # (Standard in SUSE-basierten Produkten ist USE_RELATIME=1)


laptop-mode-tools

Die laptop-mode-tools bieten noch weitere Einstellungen, die beim Energie sparen helfen. Die Kommentare in /etc/laptop-mode/laptop-mode.conf sollten selbsterklärend sein, aber etwas Grundlagenwissen über die Energieverwaltung von Festplatten und Dateisystemen is dennoch nötig.


USB-Energieverwaltung

Eine bisher noch nicht implementierte Funktion ist die USB-Energieverwaltung. Diese befindet sich zur Zeit noch in Arbeit. Mit dieser Funktion werden aktive USB-Geräte automatische deaktiviert, wenn sie nicht genutzt werden. Ein gutes Beispiel, bei dem dies Sinn ergibt, könnte eine Webcam sein. Allerdings kann dies nicht auf allen Systemen und allen Geräten automatisch gesetzt werden. Es wird eine Weißliste benötigt, die die Implementation zu einem Mehrzeiler macht.

Um es zu aktivieren, kann aus dem Nutzerraum für jedes USB-Gerät in die sysfs-Dateien unter /sys/bus/usb/devices/*/power/level geschrieben werden, etwa so:

for dev in /sys/bus/usb/devices/*/power/level; do
        echo auto > $dev
done

Dies kann abhängig von der eingesetzten Hardware bis zu 2 Watt einsparen.


Drahtgebundenes Netzwerk (LAN)

Bei einigen Netzwerkkarten gibt es die Möglichkeit, die Verbindungsgeschwindigkeit bei niedrigem Netzverkehr zu senken. Allerdings muss eine eine korrekte Implementierung für eine dynamische Anpassung erst noch erstellt werden.

Beachten Sie bitte außerdem: Es wurde von uns noch nicht getestet, ob dadurch überhaupt Energie gespart wird. Es kann auch sehr stark von der eingesetzten Hardware abhängen.

Bei Treibern, die die Erweiterung 'ethtool' haben, kann es so gemacht werden:

$ ethtool -s <Schnittstellenname> speed <Geschwindigkeit>

Beispiel:

ethtool -s eth0 speed 10


Besser Killswitch-Verwaltung

Moderne Laptopt exportieren oftmals eine Auswahl von killswitches für Bluetooth, WLAN oder WWAN. Im Batteriebetrieb ergibt es oftmals nur Sinn, wenn nur einer davon aktiviert ist. Die meisten aktivierten Geräte verbrauchen auch dann Batterieenergie, wenn sie nicht genutzt werden. Der zur Zeit problematischste Teil sind Bluetooth-Geräte. Sie verbrauchen auch dann noch 1 Watt wenn Sie sie stundenlang nicht brauchen. Sie sollten sie dann also über das jeweilige Bluetooth-Kontrollprogramm deaktivieren!

In Zukunft wäre es schön, den Status von killswitches abhängig von den Nutzereinstellungen oder sogar dynamisch zu aktivieren/deaktivieren, wenn sie genutzt/ungenutzt sind. Aber so weit sind wir noch nicht.


Was nicht gemacht wird


CPU-Drosselung (ACPI T-States)

Während dies bei Systemen die zur Überhitzung tendieren nützlich sein kann, ist es keine Option um Energie zu sparen. Die meiste Hardware (CPUs) verfügt selber über eine gute Überhitzungserkennung und drosselt sich selbst, wenn eine bestimmte Temperatur erreicht ist.

Der Hauptgrund, warum dies nicht vom Betriebssystem (Kernel/Nutzerraum) erledigt wird ist, dass die Drosselung keine Energie spart. Die CPU übergeht nur einige Takte, ohne dabei die Frequenz zu reduzieren. Es verlangsamt lediglich das System, was dazu führt, dass Aufgaben nicht so schnell abgearbeitet werden und dadurch das ganze System in Betrieb halten. Aktivieren Sie sie also nicht selbst!


Referenzen oder... nützliche Informationen