Advanced Configuration and Power Interface

Industriestandard für Energieverwaltung in Desktop-Computern, Notebooks und Servern
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 25. Oktober 2006 um 20:00 Uhr durch 87.160.174.67 (Diskussion) (Weblinks). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Das Advanced Configuration and Power Interface (ACPI) ist ein offener Industriestandard für Energieverwaltung in Desktop-Computern, Notebooks und Servern. Er wird federführend von den Firmen Hewlett-Packard, Intel, Microsoft, Phoenix und Toshiba entwickelt und stellt Schnittstellen zur Hardwareerkennung, Gerätekonfiguration und zum Energiemanagement zur Verfügung. Die Kontrolle über das Energiemanagement liegt dabei anders als beim älteren APM-Standard komplett beim Betriebssystem, das einen besseren Überblick über den momentanen Leistungsbedarf und die Sparmöglichkeiten in einem Rechner hat, als das hardwareorientierte BIOS. Mit ACPI ist das BIOS des Rechners nur noch für die Details der Kommunikation mit der Hardware verantwortlich, die Kontrolle liegt aber beim Betriebssystem. Gegenüber APM werden weiter gehende Möglichkeiten zum Energiesparen angeboten.

ACPI 1.0 wurde 1996 veröffentlicht. Mit der Version 2.0 wurde Unterstützung für 64-Bit-Architekturen hinzugefügt. Die aktuelle Version 3.0 vom 2. September 2004 wurde um die Unterstützung für PCI-Express und Serial ATA sowie erweiterte SMP-Fähigkeiten ergänzt und auf Grund von Erfahrungen aus der Praxis mit den Implementationen an einigen Stellen klarer gefasst.

Von Intel existiert eine ACPI-Referenzimplementation mit Namen ACPICA (ACPI Component Architecture), die in leicht angepasster Form unter anderem im Linux-Kernel und den BSD-Derivaten verwendet wird. Die ACPICA implementiert betriebssystemunabhängige Teile der ACPI-Software, hier vor allem den AML-Interpreter, der die von der Hardware bereitgestellten ACPI-Tabellen (siehe unten) parst.

ACPI funktioniert nicht auf älterer Hardware. Für volle ACPI-Unterstützung müssen sowohl die Hauptplatine mit ihrem Chipsatz, Timer und BIOS als auch das Betriebssystem und teilweise auch die CPU ACPI-fähig sein. Des Weiteren wird ein Netzteil nach ATX 2.01 oder neuer benötigt.

Die Hardware kann über den System Control Interrupt (SCI) bestimmte Ereignisse an das Betriebssystem signalisieren. Dazu können beispielsweise das Umschalten von Batterie- auf Netzstromversorgung oder das Aufwachen aus dem Standby gehören.

Systembeschreibungs-Tabellen

BIOS und Chipsatz stellen eine Reihe von Tabellen zur Verfügung, die das System und seine Komponenten beschreiben oder Routinen anbieten, die das Betriebssystem aufrufen kann. Sie sind teilweise in Form eines speziellen Bytecodes, der ACPI Machine Language (AML), hinterlegt. Sie können mit einem Compiler und einem Disassembler zwischen dieser maschinenlesbaren Form und der menschenlesbaren ACPI Source Language (ASL) übersetzt werden. Die benötigten Softwarewerkzeuge werden kostenlos zum Download von Intel oder Microsoft angeboten, so dass es für Menschen mit ASL-Kenntnissen möglich ist, fehlerhafte Tabellen, hier vor allem die so genannte DSDT (Differentiated System Description Table) selbst zu reparieren. Fehlerhafte Tabellen führen besonders unter alternativen Betriebssystem wie Linux oder xBSD zu Problemen, da einige Hauptplatinenhersteller ihre Tabellen nur unter Microsoft Windows testen. Die Microsoft-ACPI-Implementation ist dafür bekannt, an einigen Stellen nicht zeichengetreu den Standard zu befolgen, so dass eventuelle Probleme den Herstellern nicht auffallen. Die zwei häufigsten Fehler sind, dass die Tabellen davon ausgehen, dass die Hauptplatine in jedem Fall nur unter Microsoft Windows laufen wird oder sie in bestimmten Funktionen keinen Wert zurückgeben (impliziter Return). Die ACPI-Implementationen der freien Betriebssysteme müssen um diese Fehler herumarbeiten.

Folgende Tabellen existieren:

  • RSDP (Root System Description Pointer)
  • RSDT (Root System Description Table)
  • DSDT (Differentiated System Description Table)
  • XSDT (Extended System Description Table)
  • FADT (Fixed ACPI Description Table)
  • FACS (Firmware ACPI Control Structure)
  • SBST (Smart Battery Table)
  • ECDT (Embedded Controller Boot Resources Table)
  • SRAT (System Resource Affinity Table)
  • SLIT (System Locality Distance Information Table)

Powermanagement mit ACPI: Zustände

Die Möglichkeiten, unter Verwendung von ACPI Energie zu sparen, sind vielfältig.

Der gesamte Rechner kann sich in einem von vier Zuständen befinden, die in der ACPI-Spezifikation G0 bis G3 genannt werden. G0 entspricht dabei dem „aktiven“ Zustand, in dem mit dem Computer gearbeitet werden kann, und G3 ist „mechanisch abgeschaltet“, also ein Rechner mit gezogenem Stecker. Dazwischen liegt der Schlafzustand G1, in dem große Teile des Rechners abgeschaltet sind, aber aus dem dennoch in kurzer Zeit in den aktiven Zustand zurückgekehrt werden kann, und der „Soft-Off“-Zustand G2, der einem Computer auf ATX-Standby-Spannung entspricht.

Innerhalb von G1 kann das System unterschiedlich „tief“ schlafen (S1-S4). In den niedrigen Schlafzuständen wird mehr Systemkontext in den schnellen flüchtigen Speichern behalten, so dass das System schneller wieder benutzbar ist. Vor Eintritt in den S4-Zustand wird der Systemkontext auf eine Festplatte geschrieben und beim Aufwachen von dort wiederhergestellt. Bekannte Zustände sind hier Suspend to RAM (Suspend to memory) oder Suspend to disk (Hibernation).

Ruhezustände in der Übersicht
Ruhezustand Beschreibung
S0 System voll funktionsfähig. Alle Systeme sofort einsatzbereit.
S1 einfachster Schlafmodus; wenige Funktionen sind abgeschaltet. System durch zum Beispiel einfachen Tastendruck aufweckbar.
S2 erweiterter Schlafmodus. Weitere Komponenten sind abgeschaltet.
S3 Suspend to memory (Suspend to memory)
S4 Suspend to disk (Hibernation)
S5 System ist ausgeschaltet

Einzelne Geräte im System können sich in den Zuständen D0 (an) bis D3 (aus) befinden. Wieviel Energie in den beiden dazwischen liegenden Zuständen gespart wird und ob diese überhaupt für ein Gerät zur Verfügung stehen, liegt im Ermessen des Hardwareherstellers.

Prozessoren können sich innerhalb des G0-Zustands in verschiedenen Unterzuständen befinden. C0 ist dabei der „Arbeitszustand“. Jeder ACPI-fähige Prozessor beherrscht darüber hinaus den C1-Zustand, der aktiviert wird, wenn der Prozessor leerläuft. Dabei wird dem Prozessor die hlt-Instruktion gesendet . Sobald ein Interrupt anliegt, wacht er wieder auf. Besonders Mobilprozessoren kennen darüber hinaus noch die stärkeren Sparzustände C2, C3 oder noch höher, bei denen das Aufwachen zunehmend länger dauert (bei C3 meist bereits so viel, dass es sich nicht lohnt, diesen Zustand einzusteuern, da der Weg zurück nach C0 zuviel Zeit benötigt). In den C-Zuständen geht es zunächst nur um leerlaufende Prozessoren. Darüber hinaus können viele moderne CPUs bei wenig Arbeitsaufkommen in C0-Takt und Kernspannung mehrstufig drosseln. Von diesen „Performance States“ (P-States) kann es beliebig viele geben. Das Betriebssystem muss entscheiden, wie stark es den Prozessor bei niedrigem Arbeitsaufkommen drosselt, ohne dass eine Rückkehr zur höchsten Taktstufe P0 unangemessen lange dauert.

Tabellenbeschreibungen

RSDP (Root System Description Pointer)

RSDT (Root System Description Table)

DSDT (Differentiated System Description Table)

XSDT (Extended System Description Table)

FADT (Fixed ACPI Description Table)

FACS (Firmware ACPI Control Structure)

SBST (Smart Battery Table)

ECDT (Embedded Controller Boot Resources Table)

SRAT (System Resource Affinity Table)

Diese Tabelle wird von NUMA fähigen Betriebssystemen ausgelesen, um lokalen Threads (Aktivitätsträger) auch lokalen Speicher zuweisen zu können. Die Speicherzugriffszeit wird somit minimiert, die Systemperformance steigt. Eine eventuelle "Node Interleaving" Funktion, welche in einigen AMD Opteron BIOS Einstellungen zu finden sind, gehört bei NUMA fähigen Betriebssystemen abgeschaltet, SRAT selbstverständlich an.

SLIT (System Locality Distance Information Table)

Diese Tabelle gibt den Abstand der Nodes untereinander an. Das wird benötigt, um angeforderten Speicher auf dem nächsten (d.h. schnellsten) Node zu allokieren, falls der lokale Speicher zu klein ist.