How Linux Uses ACPI for Power Management

The Linux operating system manages modern hardware power consumption primarily through the Advanced Configuration and Power Interface (ACPI), an open industry standard that abstracts platform hardware. This article examines how the Linux kernel discovers hardware capabilities via ACPI tables, implements the ACPI Component Architecture (ACPICA), regulates processor performance and sleep states, handles thermal constraints, and translates firmware-level power events into actionable system behaviors.

Firmware Initialization and ACPI Tables

The interaction begins at boot when the platform firmware (UEFI or BIOS) presents a set of ACPI tables in system memory to the Linux kernel. The most critical tables include:

Linux parses these tables using ACPICA (ACPI Component Architecture), an OS-independent reference implementation maintained by Intel and built directly into the kernel. The ACPICA interpreter evaluates the AML byte code, creating a hierarchical namespace representing devices, power resources, thermal zones, and control methods.

CPU Power Management

Linux links ACPI definitions directly to its CPU power subsystems:

Processor Sleep States (C-States)

The cpuidle subsystem queries ACPI _CST (C-State) objects to discover platform idle modes. When a CPU core has no threads to execute, cpuidle selects an appropriate low-power C-state (ranging from C1 to deeper states like C6/C10). Deeper states save more power by powering down execution units and caches, but incur higher wake-up latencies.

Processor Performance States (P-States and CPPC)

For active workloads, the Linux cpufreq subsystem manages processor operating frequencies and voltages:

System Sleep and Suspensions (S-States)

Linux exposes ACPI-defined system sleep states to userspace via /sys/power/state:

Device Power Management (D-States)

Individual devices within the ACPI tree define power resources and methods (_PS0 through _PS3) to manage device states from D0 (fully on) to D3cold (completely unpowered). The Linux Runtime Power Management (Runtime PM) framework monitors device utilization. When a device (such as a PCIe controller, storage drive, or network card) becomes idle, the kernel executes its ACPI power transition methods to cut power automatically, restoring it instantaneously when the device is accessed again.

Thermal Management and Event Handling

ACPI provides dynamic event reporting and thermal management capabilities through interrupts: