33.3. ACPI

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

Das BIOS bietet Tabellen mit Informationen zu den einzelnen Komponenten und Hardware-Zugriffsmethoden. 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 33.3.4, „Fehlerbehebung“.

33.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 Boot-Meldungen unter /var/log/boot.msg, ob ACPI aktiviert wurde.

Anschließend muss eine Reihe von Modulen geladen werden. Dies erfolgt über das Startskript des acpid-Skripts. Wenn eines dieser Module Probleme verursacht, kann das betreffende Modul unter /etc/sysconfig/powersave/common aus dem 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 Nummer der Dateien, die Informationen über den Systemzustand bieten oder zum Ändern einiger Zustände verwendet werden können. Einige Funktionen funktionieren noch nicht, da sie sich noch in der Entwicklungsphase befinden, und 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. In einigen Dateien können die Einstellungen mit echo geändert werden, beispielsweise echo X > file zur Angabe geeigneter Werte für X. Eine Möglichkeit für den einfachen Zugriff auf diese Werte ist der powersave-Befehl, der als Frontend für den Powersave-Daemon dient. 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 Strg-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 speziellen Programm ermitteln, das in Abschnitt 33.3.3, „ACPI-Werkzeuge“ beschrieben werden. Der Ladezustand, bei dem ein Akku-Ereignis (z. B. Warnung, niedrige oder kritische Kapazität) ausgelöst wird, kann unter alarm (Alarm) angegeben werden.

/proc/acpi/button

Dieses Verzeichnis enthält Informationen zu verschiedenen Schaltern.

/proc/acpi/fan/FAN/state

Zeigt, ob der Ventilator zurzeit aktiv ist. Sie können den Ventilator 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 des Systems 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 der Prozessoruhr festgelegt werden. Normalerweise ist eine Drosselung in acht Stufen möglich. Dies hängt von der Frequenzsteuerung der CPU ab.

/proc/acpi/processor/*/limit

Wenn Leistung (obsolet) und Drosselung 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 Hardware-Hersteller 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 weisen einige der Dateien nur einen theoretischen Wert auf.

/proc/acpi/thermal_zone/*/temperature

Aktuelle Temperatur der thermalen Zone.

/proc/acpi/thermal_zone/*/state

Dieser Status zeigt an, ob alles ok (OK) ist bzw. ob ACPI active (aktive) oder passive (passive) Kühlung durchführt. Bei ACPI-unabhängiger Ventilatorsteuerung ist dieser Zustand immer ok (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, Ventilatorgerä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 (heiß)) oder Herunterfahren (beim Zustand critical kritisch)). 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 Frontends, wie powersave, kpowersave und wmpowersave, möglich. Siehe Abschnitt 33.3.3, „ACPI-Werkzeuge“.

33.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 Ventilatoren 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 unabhängig von APM oder ACPI. Es gibt zwei Hauptverfahren für die Skalierung der CPU-Frequenz, über den Kernel an sich oder über eine userspace-Anwendung. Aus diesem Grund gibt es verschiedene Kernel-Govenors, die in /sys/devices/system/cpu/cpu*/cpufreq/ festgelegt werden können.

userspace governor

Wenn der userspace govenor festgelegt wird, steuert der Kernel die CPU-Frequenz durch die Skalierung auf eine userspace-Anwendung (normalerweise ein Daemon). In SUSE Linux-Verteilungen besteht dieser Daemon im powersaved-Paket. Wenn diese Implementierung verwendet wird, wird die CPU-Frequenz gemäß der aktuellen Systemlast angepasst. Standardmäßig wird eine der Kernel-Implementierungen verwendet. Bei mancher Hardware oder in Bezug auf bestimte Prozessoren oder Treiber ist die userspace-Implementierung jedoch nach wie vor die einzige funktionierende Lösung.

ondemand governor

Es handelt sich hierbei um die Kernel-Implementierung einer dynamischen CPU-Frequenz-Richtlinie und sollte auf den meisten Systemen funktionieren. Sobald eine hohe Systemlast vorliegt, wird die CPU-Frequenz sofort erhöht. Sie wird bei einer niedrigeren Systemlast herabgesetzt.

conservative governor

Dieser Regler ähnelt der ondemand-Implementierung, außer dass eine konservativere Richtlinie verwendet wird. Die Auslastung des Systems muss über einen bestimmten Zeitraum hoch sein, damit die CPU-Frequenz erhöht wird.

powersave governor

Die CPU-Frequenz wird statisch auf den niedrigsten möglichen Wert gesetzt.

performance governor

Die CPU-Frequenz wird statisch auf den höchstmöglichen Wert gesetzt.

Drosseln der Taktfrequenz

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/*/throttling angezeigt.

Frequenzskalierung und Drosselung sind nur relevant, wenn der Prozessor belegt ist, da der sparsamste C-Zustand ohnehin gilt, 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 dem ondemand governor des Kernels oder einem Daemon (z. B. powersaved) gesteuert wird, der beste Ansatz. Eine statische Einstellung auf eine niedrige Frequenz ist sinnvoll bei Akkubetrieb oder wenn der Computer kühl oder geräuscharm arbeiten soll.

Drosselung sollte nur als letzter Ausweg verwendet werden, um die Betriebsdauer des Akkus trotz hoher Systemlast zu verlängern. Einige Systeme arbeiten bei zu hoher Drosselung 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 33.5, „Das powersave-Paket“ erläutert.

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

33.3.4. Fehlerbehebung

Es gibt zwei verschiedene Arten von Problemen. Einerseits kann der ACPI-Code des Kernel Fehler enthalten, die nicht rechtzeitig erkannt wurden. In diesem Fall wird eine Lösung zum Herunterladen 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. Hardware-Komponenten, 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 Boot-Meldungen 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 33.5.4, „Fehlerbehebung“ erläutert.

In der Kernel-Konfiguration gibt es einen Schalter zur Aktivierung der ACPI-Fehlersuchmeldungen. Wenn ein Kernel mit ACPI-Fehlersuche kompiliert und installiert wurde, können Experten, die nach einem Fehler suchen, mit detaillierten Informationen unterstützt werden.

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.

33.3.4.1. Weitere Informationen

Weitere Dokumentation und Hilfe zu ACPI: