21.3. ACPI

ACPI (Advanced Configuration and Power Interface) wurde entwickelt, um dem Betriebssystem die Einrichtung und Steuerung der einzelnen Hardwarekomponenten zu ermöglichen. ACPI ersetzt PnP und APM. Diese Schnittstelle bietet Informationen zu Akku, Netzteil, Temperatur, Lüfter und Systemereignissen wie dem Schließen des Deckels oder einem niedrigen Akkuladestand.

Das BIOS bietet Tabellen mit Informationen zu den einzelnen Komponenten und Hardwarezugriffsmethoden. Das Betriebssystem verwendet diese Informationen für Aufgaben wie das Zuweisen von Interrupts oder das Aktivieren bzw. Deaktivieren von Komponenten. Da das Betriebssystem die in BIOS gespeicherten Befehle ausführt, hängt die Funktionalität von der BIOS-Implementierung ab. Die Tabellen, die ACPI erkennen und laden kann, werden in /var/log/boot.msg gemeldet. Weitere Informationen zur Fehlersuche bei ACPI-Problemen finden Sie in Abschnitt 21.3.4, „Fehlersuche“.

21.3.1. ACPI in Aktion

Wenn der Kernel beim Booten des Systems ein ACPI-BIOS entdeckt, wird ACPI automatisch aktiviert und APM deaktiviert. Bei einigen älteren Computern kann der Bootparameter acpi=force erforderlich sein. Der Computer muss ACPI 2.0 oder höher unterstützen. Überprüfen Sie anhand der Bootmeldungen unter /var/log/boot.msg, ob ACPI aktiviert wurde.

Anschließend muss eine Reihe von Modulen geladen werden. Dies erfolgt über das Startskript des powersave-Daemons. Wenn eines dieser Module Probleme verursacht, kann das betreffende Modul unter /etc/sysconfig/powersave/common vom Lade- bzw. Entladevorgang ausgeschlossen werden. Das Systemprotokoll (/var/log/messages) enthält die Meldungen der Module, denen Sie entnehmen können, welche Komponenten erkannt wurden.

/proc/acpi enthält nun eine Anzahl von Dateien, die Informationen über den Systemzustand bieten oder zum Ändern einiger Zustände verwendet werden können. Manche Funktionen funktionieren noch nicht, da sie sich noch in der Entwicklungsphase befinden. Die Unterstützung einiger Funktionen hängt weitgehend von der Implementierung durch den Hersteller ab.

Alle Dateien (mit Ausnahme von dsdt und fadt) können mit cat gelesen werden. Bei einigen Dateien können die Einstellungen mit echo bearbeitet werden, beispielsweise echo X > file zur Angabe geeigneter Werte für X. Verwenden Sie immer den Befehl powersave zum Zugriff auf diese Informationen und Steueroptionen. Im Folgenden werden die wichtigsten Dateien beschrieben:

/proc/acpi/info

Allgemeine Informationen zu ACPI.

/proc/acpi/alarm

Hier können Sie angeben, wann das System aus einem Ruhezustand wieder aktiviert werden soll. Zurzeit wird diese Funktion nicht vollständig unterstützt.

/proc/acpi/sleep

Bietet Informationen zu möglichen Ruhezuständen.

/proc/acpi/event

Hier werden alle Ereignisse gemeldet und vom Powersave-Daemon (powersaved) verarbeitet. Wenn kein Daemon auf diese Datei zugreift, können Ereignisse, wie ein kurzes Antippen des Netzschalters oder das Schließen des Deckels mit cat /proc/acpi/event gelesen werden (Beenden mit -C).

/proc/acpi/dsdt und /proc/acpi/fadt

Diese Dateien enthalten die ACPI-Tabellen DSDT (Differentiated System Description Table) und FADT (Fixed ACPI Description Table). Diese können mit acpidmp, acpidisasm und dmdecode gelesen werden. Diese Programme und ihre Dokumentation befinden sich im Paket pmtools. Beispiel: acpidmp DSDT | acpidisasm.

/proc/acpi/ac_adapter/AC/state

Zeigt an, ob das Netzteil angeschlossen ist.

/proc/acpi/battery/BAT*/{alarm,info,state}

Detaillierte Informationen zum Ladezustand des Akkus. Der Ladezustand wird durch einen Vergleich zwischen last full capacity (letzte volle Kapazität) aus info (Info) und remaining capacity (verbleibende Kapazität) aus state (Zustand) ermittelt. Bequemer lässt sich der Ladezustand mit einem der speziellen Programm ermitteln, die in Abschnitt 21.3.3, „ACPI-Werkzeuge“ beschrieben werden. Der Ladezustand, bei dem ein Akku-Ereignis ausgelöst wird, kann unter alarm (Alarm) angegeben werden.

/proc/acpi/button

Dieses Verzeichnis enthält Informationen zu verschiedenen ACPI Buttons.

/proc/acpi/fan/FAN/state

Zeigt, ob der Lüfter zurzeit aktiv ist. Sie können den Lüfter manuell aktivieren bzw. deaktivieren, indem Sie 0 (ein) bzw. 3 (aus) in diese Datei schreiben. Diese Einstellung wird jedoch sowohl vom ACPI-Code im Kernel als auch von der Hardware (bzw. BIOS) überschrieben, wenn die Temperatur zu hoch wird.

/proc/acpi/processor/*

Für jede CPU im System wird ein gesondertes Unterverzeichnis geführt.

/proc/acpi/processor/*/info

Informationen zu den Energiesparoptionen des Prozessors.

/proc/acpi/processor/*/power

Informationen zum aktuellen Prozessorzustand. Ein Sternchen neben C2 zeigt an, dass der Prozessor zurzeit nicht genutzt wird. Dies ist der häufigste Zustand, wie aus dem Wert usage (Nutzung) ersichtlich ist.

/proc/acpi/processor/*/throttling

Hiermit kann die Drosselung (Throttling) der Prozessoruhr festgelegt werden. Normalerweise ist Throttling in acht Stufen möglich. Dies hängt von der Frequenzsteuerung der CPU ab.

/proc/acpi/processor/*/limit

Wenn Leistung (obsolet) und Throttling automatisch von einem Daemon gesteuert werden, können hier die Obergrenzen angegeben werden. Einige der Grenzwerte werden durch das System bestimmt. Andere können vom Benutzer angepasst werden.

/proc/acpi/thermal_zone/

Für jede Thermalzone ist ein eigenes Unterverzeichnis vorhanden. Eine Thermalzone ist ein Bereich mit ähnlichen thermischen Eigenschaften. Ihre Anzahl und Bezeichnungen werden vom Hardwarehersteller festgelegt. Viele der von ACPI gebotenen Möglichkeiten werden jedoch kaum implementiert. Stattdessen wird die Temperatursteuerung üblicherweise dem BIOS überlassen. Das Betriebssystem hat kaum Gelegenheit, einzugreifen, da die Lebensdauer der Hardware in Gefahr ist. Daher haben einige der Dateien nur einen theoretischen Wert.

/proc/acpi/thermal_zone/*/temperature

Aktuelle Temperatur der thermalen Zone.

/proc/acpi/thermal_zone/*/state

Dieser Status zeigt an, ob alles ok (in Ordnung) ist bzw. ob ACPI active (aktive) oder passive (passive) Kühlung durchführt. Bei ACPI-unabhängiger Lüftersteuerung ist dieser Zustand immer ok.

/proc/acpi/thermal_zone/*/cooling_mode

Wählen Sie die von ACPI gesteuerte Kühlmethode aus. Wählen Sie einen passiven (weniger Leistung, sparsamer) oder aktiven (volle Leistung, Lüftergeräusche) Kühlmodus aus.

/proc/acpi/thermal_zone/*/trip_points

Aktiviert die Ermittlung von Temperaturgrenzen zur Auslösung spezieller Vorgänge, wie passiver bzw. aktiver Kühlung, Suspend-Modus (beim Zustand (hot) oder Herunterfahren (beim Zustand critical). Die möglichen Aktionen sind in der DSDT definiert (geräteabhängig). Folgende Schwellenwerte werden in der ACPI-Spezifikation festgelegt: critical (kritisch), hot (heiß), passive (passiv), active1 (aktiv1) und active2 (aktiv2). Auch wenn sie nicht alle implementiert sind, müssen sie stets in dieser Reihenfolge in die Datei eingegeben werden. Der Eintrag echo 90:0:70:0:0 > trip_points setzt die Temperatur für critical (kritisch) auf 90 und die Temperatur für passive (passiv) auf 70 Grad Celsius.

/proc/acpi/thermal_zone/*/polling_frequency

Wenn der Wert in temperature bei Temperaturänderungen nicht automatisch aktualisiert wird, können Sie hier auf einen anderen Erhebungsmodus umschalten. Der Befehl echo X > /proc/acpi/thermal_zone/*/polling_frequency führt zu einer Abfrage der Temperatur alle X Sekunden. Um die Erhebung zu deaktivieren, setzen Sie X=0.

Keine dieser Einstellungen, Informationen und Ereignisse muss manuell bearbeitet werden. Dies ist über den Powersave-Daemon (powersaved) und verschiedene Anwendungen, wie powersave, kpowersave und wmpowersave, möglich. Siehe Abschnitt 21.3.3, „ACPI-Werkzeuge“. Da powersaved auch die Funktionen des älteren Daemon acpid umfasst, wird acpid nicht mehr benötigt.

21.3.2. Steuern der CPU-Leistung

Mit der CPU sind Energieeinsparungen auf drei verschiedene Weisen möglich. Je nach Betriebsmodus des Computers können diese Methoden auch kombiniert werden. Energiesparen bedeutet auch, dass sich das System weniger erhitzt und die Lüfter seltener in Betrieb sind.

Frequenz- und Spannungsskalierung

Bei AMD und Intel läuft diese Technologie unter dem Namen PowerNow! bzw. Speedstep. Doch auch in die Prozessoren anderer Hersteller ist diese Technologie integriert. Taktfrequenz und Kernspannung der CPU werden gleichzeitig verringert, was zu mehr als linearen Energieeinsparungen führt. Eine Halbierung der Frequenz (halbe Leistung) führt also dazu, dass wesentlich weniger als die Hälfte der Energie verbraucht wird. Diese Technologie ist von APM bzw. ACPI unabhängig. Sie erfordert einen Daemon, der die Frequenz und die aktuellen Leistungsanforderungen anpasst. Diese Einstellungen können im Verzeichnis /sys/devices/system/cpu/cpu*/cpufreq/ vorgenommen werden.

Drosseln der Taktfrequenz (Throttling)

Bei dieser Technologie wird ein bestimmter Prozentsatz der Taktsignalimpulse für die CPU ausgelassen. Bei einer Drosselung von 25 % wird jeder vierte Impuls ausgelassen. Bei 87.5 % erreicht nur jeder achte Impuls den Prozessor. Die Energieeinsparungen sind allerdings ein wenig geringer als linear. Normalerweise wird die Drosselung nur verwendet, wenn keine Frequenzskalierung verfügbar ist oder wenn maximale Energieeinsparungen erzielt werden sollen. Auch diese Technologie muss von einem speziellen Prozess gesteuert werden. Die Systemschnittstelle lautet /proc/acpi/processor/*/throttling.

Versetzen des Prozessors in den Ruhezustand

Das Betriebssystem versetzt den Prozessor immer dann in den Ruhezustand, wenn keine Arbeiten anstehen. In diesem Fall sendet das Betriebssystem den Befehl Halt an die CPU. Es gibt drei Zustände: C1, C2 und C3. Im Zustand mit der höchsten Energieeinsparung, C3, wird sogar die Synchronisierung des Prozessor-Cache mit dem Hauptspeicher angehalten. Daher ist dieser Zustand nur möglich, wenn der Inhalt des Hauptspeichers von keinem anderen Gerät über Busmaster-Aktivitäten bearbeitet wird. Einige Treiber verhindern die Verwendung von C3. Der aktuelle Zustand wird unter /proc/acpi/processor/*/power angezeigt.

Frequenzskalierung und Throttling sind nur relevant, wenn der Prozessor belegt ist. Der sparsamste C-Zustand ist ohnehin, wenn sich der Prozessor im Wartezustand befindet. Wenn die CPU belegt ist, ist die Frequenzskalierung die empfohlene Energiesparmethode. Häufig arbeitet der Prozessor nur im Teillast-Betrieb. In diesem Fall kann er mit einer niedrigeren Frequenz betrieben werden. Normalerweise ist eine dynamische Frequenzskalierung, die von einem Daemon (z. B. powersaved) gesteuert wird, der beste Ansatz. Eine statische Einstellung auf eine niedrige Frequenz ist nur bei Akkubetrieb oder wenn der Computer kühl oder geräuscharm arbeiten soll sinnvoll.

Throttling sollte nur als letzter Ausweg verwendet werden, um die Betriebsdauer des Akkus trotz hoher Systemlast zu verlängern. Einige Systeme arbeiten bei zu hohem Throttling jedoch nicht reibungslos. Außerdem hat die CPU-Drosselung keinen Sinn, wenn die CPU kaum ausgelastet ist.

Unter SUSE Linux werden diese Technologien vom Powersave-Daemon gesteuert. Die Konfiguration wird in Abschnitt 21.5, „Das powersave-Paket“ erläutert.

21.3.3. ACPI-Werkzeuge

Zu der Palette der mehr oder weniger umfassenden ACPI-Dienstprogramme gehören Werkzeuge, die lediglich Informationen anzeigen, wie beispielsweise Akku-Ladezustand und Temperatur (acpi, klaptopdaemon, wmacpimon, usw.), Werkzeuge, die den Zugriff auf die Strukturen unter /proc/acpi ermöglichen oder Überwachungsänderungen erleichtern (akpi, acpiw, gtkacpiw), sowie Werkzeuge zum Bearbeiten der ACPI-Tabellen im BIOS (Paket pmtools).

21.3.4. Fehlersuche

Es gibt zwei verschiedene Arten von Problemen. Einerseits kann der ACPI-Code des Kernels Fehler enthalten, die nicht rechtzeitig erkannt wurden. In diesem Fall wird eine Lösung zum Download bereitgestellt. Häufiger jedoch werden die Probleme vom BIOS verursacht. Manchmal werden Abweichungen von der ACPI-Spezifikation absichtlich in das BIOS integriert, um Fehler in der ACPI-Implementierung in anderen weit verbreiteten Betriebssystemen zu umgehen. Hardwarekomponenten, die ernsthafte Fehler in der ACPI-Implementierung aufweisen, sind in einer Blacklist festgehalten, die verhindert, dass der Linux-Kernel ACPI für die betreffenden Komponenten verwendet.

Der erste Schritt, der bei Problemen unternommen werden sollte, ist die Aktualisierung des BIOS. Wenn der Computer sich überhaupt nicht booten lässt, kann eventuell einer der folgenden Boot-Parameter Abhilfe schaffen:

pci=noacpi

ACPI nicht zum Konfigurieren der PCI-Geräte verwenden.

acpi=oldboot

Nur eine einfache Ressourcenkonfiguration durchführen. ACPI nicht für andere Zwecke verwenden.

acpi=off

ACPI deaktivieren.

[Warning]Probleme beim Booten ohne ACPI

Einige neuere Computer (insbesondere SMP- und AMD64-Systeme) benötigen ACPI zur korrekten Konfiguration der Hardware. Bei diesen Computern kann die Deaktivierung von ACPI zu Problemen führen.

Überwachen Sie nach dem Booten die Bootmeldungen des Systems mit dem Befehl dmesg | grep -2i acpi (oder alle Meldungen, da das Problem möglicherweise nicht durch ACPI verursacht wurde). Wenn bei der Analyse einer ACPI-Tabelle ein Fehler auftritt, kann die wichtigste Tabelle, DSDT, durch eine verbesserte Version ersetzt werden. In diesem Fall wird die fehlerhafte DSDT des BIOS ignoriert. Das Verfahren wird in Abschnitt 21.5.4, „Fehlersuche“ erläutert.

In der Kernelkonfiguration gibt es einen Schalter zur Aktivierung der ACPI-Fehlersuchmeldungen. Ein mit ACPI-Fehlersuche kompilierter und installierter Kernel unterstützt Experten, die nach einem Fehler suchen, mit detaillierten Informationen.

Wenn Sie Probleme mit dem BIOS oder der Hardware feststellen, sollten Sie stets Kontakt mit den betreffenden Herstellern aufweisen. Insbesondere Hersteller, die nicht immer Hilfe für Linux anbieten, sollten mit den Problemen konfrontiert werden. Die Hersteller nehmen das Problem nur dann ernst, wenn sie feststellen, dass eine nennenswerte Zahl ihrer Kunden Linux verwendet.

21.3.4.1. Weitere Informationen

Weitere Dokumentation und Hilfe zu ACPI: