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“.
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/infoAllgemeine Information über ACPI
/proc/acpi/alarmHier lässt sich einstellen, wann das System aus einem Schlafzustand zurückkehrt. Momentan ist dieses Feature noch nicht hinreichend unterstützt.
/proc/acpi/sleepGibt 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/stateIst 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/buttonIn 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*/infoInformationen ü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*/throttlingHier 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*/limitWenn 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/*/temperatureDie 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_modeHier 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.
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.
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.
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.
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.
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).
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:
Kein ACPI zur Konfiguration der PCI-Geräte verwenden.
Nur einfache Ressourcenkonfiguration durchführen, sonst ACPI nicht verwenden.
Kein ACPI verwenden.
![]() | 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.
Weitere Dokumentation und Hilfe zum Thema ACPI finden Sie unter:
c't 2002, Heft 25: Schöne neue Welt (Dominik Brodowski, Oliver Diedrich)
http://www.cpqlinux.com/acpi-howto.html (etwas genaueres ACPI-HOWTO, enthält Patches der DSDT)
http://www.intel.com/technology/iapc/acpi/faq.htm (ACPI FAQ @Intel)
http://acpi.sourceforge.net/ (Das ACPI4Linux-Projekt bei Sourceforge)
http://www.poupinou.org/acpi/ (DSDT-Patches von Bruno Ducrot)