16.3. ACPI

ACPI steht für Advanced Configuration and Power Interface und soll dem Betriebssystem ermöglichen, die einzelnen Hardwarekomponenten individuell einzurichten und zu steuern. Damit ersetzt ACPI sowohl Plug and Play als auch APM. Weiterhin stellt ACPI noch diverse Informationen über Batterie, Netzteil, Temperatur und Lüfter zur Verfügung und unterrichtet über Systemereignisse, wie zum Beispiel „Deckel schließen“ oder „Batterieladung niedrig“.

Das BIOS stellt Tabellen zur Verfügung, in denen Informationen über die Einzelkomponenten und Methoden für den Zugriff auf die Hardware enthalten sind. Diese Informationen werden vom Betriebssystem verwendet, um zum Beispiel Interrupts zuzuweisen oder Komponenten bedarfsweise an- und abzuschalten. Da das Betriebssystem allerdings Anweisungen ausführt, die im BIOS abgelegt sind, ist man auch hier wieder von der Implementierung des BIOS abhängig. In /var/log/boot.msg findet man die Bootmeldungen. Dort meldet ACPI, welche Tabellen es gefunden hat und erfolgreich auslesen konnte. Mehr Informationen zur Lösung von ACPI-Problemen lesen Sie unter Abschnitt 16.3.4, „Mögliche Probleme und Lösungen“.

16.3.1. Praxis

Wenn der Kernel beim Booten ein ACPI-BIOS erkennt, wird ACPI automatisch aktiviert (und APM deaktiviert). Der Bootparameter acpi=on kann höchstens bei älteren Maschinen notwendig sein. Der Computer muss ACPI 2.0 oder neuer unterstützen. Ob ACPI aktiviert wurde, kann den Bootmeldungen des Kernels in /var/log/boot.msg entnommen werden.

Danach müssen jedoch noch eine Reihe von Modulen geladen werden. Diese werden vom Startskript des ACPI-Daemons geladen. Wenn eines dieser Module Probleme bereitet, kann es in /etc/sysconfig/powersave/common vom Laden oder Entladen ausgeschlossen werden. Im Systemlog (/var/log/messages) findet man die Meldungen der Module und kann sehen, welche Komponenten erkannt wurden.

Jetzt findet man unter /proc/acpi eine Reihe von Dateien, die über den Systemzustand informieren oder mit deren Hilfe man einige Zustände verändern kann. Nicht alle Funktionen sind vollständig unterstützt, da manche noch entwickelt werden und die Unterstützung mancher Funktionen stark von der Implementierung des Herstellers abhängt.

Alle Dateien (außer dsdt und fadt) können mit cat ausgegeben werden. In einigen kann man Einstellungen mit echo ändern. So kann man beispielsweise mit echo X >Datei geeignete Werte für X übergeben. Um auf diese Informationen und Steuerungsmöglichkeiten zuzugreifen, sollten Sie immer den Befehl powersave verwenden. Es folgt eine Beschreibung der wichtigsten Dateien:

/proc/acpi/info

Allgemeine Information über ACPI

/proc/acpi/alarm

Hier lässt sich einstellen, wann das System aus einem Schlafzustand zurückkehrt. Momentan ist dieses Feature noch nicht hinreichend unterstützt.

/proc/acpi/sleep

Gibt Auskunft über die möglichen Schlafzustände.

/proc/acpi/event

Hier werden alle Ereignisse gemeldet. Diese werden vom Powersave Daemon (powersaved) verarbeitet. Wenn kein Daemon darauf zugreift, kann man die Ereignisse mit cat /proc/acpi/event lesen (mit Strg-C beenden). Ein kurzer Druck auf Power oder das Schließen des Deckels sind solche Ereignisse.

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

Hier finden sich die ACPI-Tabellen DSDT (Differentiated System Description Table) und FADT (Fixed ACPI Description Table). Diese können mit acpidmp, acpidisasm und dmdecode ausgelesen werden. Diese Programme einschließlich Dokumentation finden Sie im Paket pmtools. Beispiel: acpidmp DSDT | acpidisasm.

/proc/acpi/ac_adapter/AC/state

Ist das Netzteil angeschlossen?

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

Ausführliche Information über den Zustand der Batterien. Um den Füllstand ablesen zu können, muss last full capacity aus info mit remaining capacity aus state verglichen werden. Komfortabler geht das mit speziellen Programmen, wie sie unter Abschnitt 16.3.3, „ACPI-Tools“ vorgestellt werden. In alarm kann die Kapazität eingegeben werden, bei der ein Batterieereignis ausgelöst wird.

/proc/acpi/button

In diesem Verzeichnis gibt es Informationen über diverse Schalter.

/proc/acpi/fan/FAN/state

Dies zeigt an, ob der Lüfter gerade läuft. Er kann auch manuell ein- und ausgeschaltet werden, indem man 0 (=ein) bzw. 3 (=aus) in diese Datei schreibt. Es ist jedoch zu beachten, dass sowohl der ACPI-Code im Kernel als auch die Hardware (bzw. das BIOS) diese Einstellung überschreiben, wenn es zu warm wird.

/proc/acpi/processor/CPU*/info

Informationen über die Energiesparmöglichkeiten des Prozessors.

/proc/acpi/processor/CPU*/power

Information über den gegenwärtigen Prozessorzustand. Ein Sternchen bei C2 bedeutet Leerlauf; das ist der häufigste Zustand, wie am Wert für usage zu erkennen ist.

/proc/acpi/processor/CPU*/throttling

Hier kann das Aussetzen des Prozessortakts eingestellt werden. Meistens ist eine Drosselung in acht Stufen möglich. Dies ist unabhängig von der Frequenzsteuerung der CPU.

/proc/acpi/processor/CPU*/limit

Wenn Performance (veraltet) und Throttling von einem Daemon automatisch geregelt werden, lassen sich hier die Grenzen angeben, die nicht überschritten werden dürfen. Es gibt vom System festgelegte Limits und solche, die vom Benutzer einstellbar sind.

/proc/acpi/thermal_zone/

Hier gibt es für jede Thermalzone ein Unterverzeichnis. Eine Thermalzone ist ein Bereich mit ähnlichen thermischen Eigenschaften, deren Anzahl und Namen vom Hardware-Hersteller gewählt werden. Viele der Möglichkeiten, die ACPI bietet, werden jedoch nur selten implementiert. Stattdessen wird die Temperatursteuerung auf herkömmliche Weise direkt vom BIOS übernommen, ohne dem Betriebssystem ein wesentliches Mitspracherecht einzuräumen, denn es geht um nicht weniger als die Lebensdauer der Hardware. Die folgenden Beschreibungen sind also teilweise theoretischer Natur.

/proc/acpi/thermal_zone/*/temperature

Die aktuelle Temperatur der Thermalzone.

/proc/acpi/thermal_zone/*/state

Der Status sagt aus, ob alles ok ist oder ob ACPI aktiv oder passiv kühlt. Bei ACPI-unabhängiger Lüftersteuerung ist der Status immer ok.

/proc/acpi/thermal_zone/*/cooling_mode

Hier kann man die bevorzugte, von ACPI kontrollierte Kühlmethode wählen. Entweder passiv (weniger Leistung, aber sparsam) oder aktiv (immer volle Leistung und voller Lüfterlärm).

/proc/acpi/thermal_zone/*/trip_points

Hier kann eingestellt werden, ab welcher Temperatur etwas unternommen werden soll. Das reicht von passiver oder aktiver Kühlung über Suspendierung (hot) bis zum Abschalten des Computers (critical). Die möglichen Aktionen sind aber geräteabhängig in der DSDT definiert. In der ACPI-Spezifikation festgelegte Trip-Points sind: critical, hot, passive, active1 und active2. Auch wenn diese nicht immer alle implementiert sind, müssen sie beim Schreiben in diese Datei trip_points alle in dieser Reihenfolge eingegeben werden. So setzt eine Eingabe wie echo 90:0:70:0:0 > trip_points die Temperatur für critical auf 90 und für passive auf 70 (alle Angaben in Grad Celsius).

/proc/acpi/thermal_zone/*/polling_frequency

Wenn der Wert in temperature nicht automatisch aktualisiert wird, sobald sich die Temperatur ändert, kann hier auf den „Polling Modus“ umgeschaltet werden. Der Befehl echo X > /proc/acpi/thermal_zone/*/polling_frequency bewirkt, dass die Temperatur alle X Sekunden abgefragt wird. Mit X=0 wird das Polling wieder ausgeschaltet.

Diese Informationen, Einstellungen und Ereignisse müssen nicht von Hand bearbeitet werden. Dazu gibt es den Powersave Daemon (powersaved) und verschiedene Anwendungen wie powersave, kpowersave und wmpowersave (siehe Abschnitt 16.3.3, „ACPI-Tools“). Da die Fähigkeiten des älteren acpid in powersaved enthalten sind, wird acpid nicht mehr benötigt.

16.3.2. Kontrolle der Prozessorleistung

Es gibt drei verschiedene Arten für die CPU, Energie zu sparen, die je nach Betriebsart des Computers geeignet kombiniert werden können. Energieeinsparung bedeutet auch, dass das System weniger heiß wird und dadurch auch die Lüfter seltener eingeschaltet werden.

Frequenz und Spannungsregelung

PowerNow! und Speedstep sind die Bezeichnungen der Firmen AMD und Intel für diese Technik, die es aber auch in Prozessoren anderer Hersteller gibt. Hier werden die Taktfrequenz der CPU und deren Kernspannung gemeinsam gesenkt. Der Vorteil ist eine mehr als lineare Energieeinsparung. Das heißt bei halber Frequenz (entspricht halber Leistung) wird deutlich weniger als die Hälfte der Energie benötigt. Diese Technik funktioniert unabhängig von APM oder ACPI und benötigt einen Daemon, der die Frequenz an die aktuelle Leistungsanforderung anpasst. Einstellungen können im Verzeichnis /sys/devices/system/cpu/cpu*/cpufreq/ vorgenommen werden.

Aussetzen der Taktfrequenz

Diese Technik ist als Throttling bekannt. Hier werden vom Taktsignal für die CPU ein bestimmter Prozentsatz der Impulse ausgelassen. Bei 25% Drosselung wird jeder vierte ausgelassen, bei 87,5% kommt nur noch jeder achte Impuls beim Prozessor an. Die Energieeinsparung ist jedoch etwas geringer als linear. Man verwendet Throttling nur, wenn es keine Frequenzregulierung gibt oder zum Zweck maximaler Einsparung. Auch diese Technik muss von einem eigenen Prozess gesteuert werden. Die Systemschnittstelle ist /proc/acpi/processor/*/throttling.

Schlafenlegen des Prozessors

Der Prozessor wird vom Betriebssystem immer in einen Schlafzustand versetzt, wenn es gerade nichts zu tun gibt. In diesem Fall sendet das Betriebssystem der CPU die dafür vorgesehene halt Anweisung. Es gibt verschiedene Abstufungen C1, C2 und C3. Im sparsamsten Zustand C3 wird sogar der Abgleich des Prozessorcache mit dem Hauptspeicher angehalten, weshalb dieser Zustand nur dann eingenommen werden kann, wenn kein weiteres Gerät per Bus-Master Aktivität den Inhalt des Hauptspeichers verändert. Manche Treiber verhindern deshalb die Verwendung von C3. Der gegenwärtige Zustand wird in /proc/acpi/processor/*/power angezeigt.

Sowohl Frequenzreduzierung als auch Taktaussetzen sind nur von Bedeutung, wenn der Prozessor etwas zu tun hat, da im Leerlauf ohnehin möglichst sparsame C-Zustände eingenommen werden.

Wenn die CPU jedoch beschäftigt wird, ist die Frequenzreduzierung die bessere Methode zum Energiesparen. Häufig ist der Prozessor nur teilweise ausgelastet. Dann genügt es, ihn mit niedriger Frequenz zu betreiben. Meistens ist man mit der dynamischen Frequenzanpassung durch einen Daemon (z.B. powersaved) bestens bedient. Im Batteriebetrieb oder wenn der Computer kühl bzw. leise sein soll, ist eine feste Einstellung auf eine niedrige Frequenz sinnvoll.

Throttling sollte nur als letztes Mittel verwendet werden, wenn man zum Beispiel trotz Auslastung des Systems die Laufzeit des Akkus soweit wie möglich verlängern möchte. Manche Systeme laufen allerdings nicht mehr rund, wenn sie zu stark gedrosselt werden. Die Aussetzung des CPU-Taktes bringt nichts, wenn die CPU ohnehin wenig zu tun hat.

Auch die Steuerung dieser Techniken obliegt unter SUSE LINUX dem powersave Daemon. Die dazu nötige Konfiguration wird in einem eigenen Abschnitt (siehe Abschnitt 16.5, „Das powersave-Paket“) vorgestellt.

16.3.3. ACPI-Tools

Es gibt eine Reihe von mehr oder weniger umfangreichen ACPI-Werkzeugen. Darunter reine Informationstools, die Batteriezustand, Temperatur usw. anzeigen (acpi, klaptopdaemon, wmacpimon etc.). Andere vereinfachen den Zugriff auf die Strukturen unter /proc/acpi oder helfen Veränderungen zu beobachten (akpi, acpiw, gtkacpiw). Des Weiteren gibt es noch Werkzeuge zum Bearbeiten der ACPI-Tabellen im BIOS (Paket pmtools).

16.3.4. Mögliche Probleme und Lösungen

Es gibt zwei unterschiedliche Gruppen von Problemen. Einerseits können natürlich Fehler im ACPI-Code des Kernels enthalten sein, die nicht rechtzeitig bemerkt wurden. Dann wird es jedoch eine Lösung zum Download geben. Unangenehmer und leider auch häufiger sind Probleme im BIOS eines Computers. Es kommt leider sogar vor, dass Abweichungen von der ACPI-Spezifikation im BIOS eingebaut werden, um Fehler der ACPI-Implementierung in anderen sehr verbreiteten Betriebssystemen zu umgehen. Es gibt auch Hardware, bei der gravierende Fehler in der ACPI-Implementierung bekannt sind und die deshalb in einer Blacklist vermerkt sind, damit der Linuxkernel ACPI dort nicht verwendet.

Bei Problemen sollte zunächst ein BIOS-Update vorgenommen werden. Falls das System überhaupt nicht bootet, versuchen Sie mit einem der folgenden Boot-Parameter, Abhilfe zu schaffen:

pci=noacpi

Kein ACPI zur Konfiguration der PCI-Geräte verwenden.

acpi=oldboot

Nur einfache Ressourcenkonfiguration durchführen, sonst ACPI nicht verwenden.

acpi=off

Kein ACPI verwenden.

[Warning]Probleme beim Booten ohne ACPI

Manche Rechner der neueren Generation, insbesondere SMP-Systeme und AMD64-Systeme benötigen ACPI für eine korrekte Hardwarekonfiguration. Ein Abschalten von ACPI kann zu Problemen führen.

Bitte überwachen Sie die Bootmeldungen des Systems. Verwenden Sie dafür nach dem Booten den Befehl dmesg | grep -2i acpi (oder auch alle Meldungen, denn das Problem muss ja nicht an ACPI hängen). Wenn ein Fehler beim Parsen einer ACPI-Tabelle auftritt, gibt es zumindest für die wichtigste Tabelle, die DSDT, die Möglichkeit, dem System eine verbesserte Version unterzuschieben. Dann wird die fehlerhafte DSDT des BIOS ignoriert. Das Vorgehen wird unter Abschnitt 16.5.4, „Mögliche Probleme und deren Lösungen“ näher beschrieben.

Es gibt bei der Kernelkonfiguration einen Schalter, um Debug-Meldungen von ACPI zu aktivieren. Wenn man einen Kernel mit ACPI-Debugging kompiliert und installiert hat, kann man Experten, die einen Fehler suchen, mit detaillierter Information unterstützen.

Auf alle Fälle ist es bei BIOS- oder Hardwareproblemen immer eine gute Idee, sich an die Hersteller des Gerätes zu wenden. Gerade wenn diese bei Linux nicht immer weiterhelfen, sollte man eventuelle Problem an Sie herantragen. Erst wenn die Hersteller merken, dass genug ihrer Kunden Linux verwenden, werden sie es ernst nehmen.

16.3.4.1. Weitere Informationen

Weitere Dokumentation und Hilfe zum Thema ACPI finden Sie unter:


SUSE LINUX Administrationshandbuch 9.3