Skip to main content
Qualcomm® Linux 提供多个电源管理子系统: CPUIdle、运行时 PM、热限频、系统挂起、稳压器和时钟, 必须协同配置这些子系统,才能在 ARM64 平台上实现最优功耗。本页介绍每个子系统及其关键配置和运行时控制。

CPUIdle 状态与调速器

CPUIdle 在 CPU 没有可运行任务时管理空闲状态的选择。在 Qualcomm 平台上,空闲状态在设备树中定义,并通过 PSCI(电源状态协调接口)固件传递给 Linux。

空闲状态层级

Qualcomm ARM64 SoC 通常为每个 CPU 提供三个由 PSCI 支持的空闲状态: 表:典型的 Qualcomm PSCI 空闲状态 确切的 PSCI 状态标识符和驻留时间值在 SoC DTSI 中每个 CPU 节点下定义。可如下查看:

在运行时检查空闲状态

CPUIdle 调速器

表:CPUIdle 调速器

PM QoS 延迟约束

驱动和用户空间可以通过注册延迟约束来阻止 CPU 进入深度空闲状态。通过 sysfs 设置每 CPU 约束:
所需的 Kconfig:

外设的运行时 PM

运行时 PM 允许各个外设设备在系统运行时进入低功耗状态。在 Qualcomm SoC 上,电源域由 RPMh 硬件资源管理器通过 qcom-rpmhpd 驱动进行管理。

在驱动中启用运行时 PM

设置自动挂起延迟以防止快速的电源循环:

监控运行时 PM 状态

替换以下内容:
  • <device> 替换为 /sys/bus/platform/devices/ 中的平台设备名称。

Qualcomm 电源域

RPMh 电源域由 qcom-rpmhpd 驱动注册。检查已注册的电源域:
所需的 Kconfig:

热限频

Linux 热管理框架监控温度传感器,并在越过触发点(trip point)时采取冷却措施。Qualcomm SoC 通过 TSENS(温度传感器)硬件暴露热区(thermal zone),冷却设备则以 CPU 频率上限和 CPU 热插拔的形式实现。

检查热区

热管理调速器

表:热管理调速器
所需的 Kconfig:

系统挂起(S2RAM)

系统挂起会关闭大部分 SoC 子系统的电源,同时让 DRAM 保持自刷新状态。在 Qualcomm 平台上,挂起路径在 EL3 发出 PSCI SYSTEM_SUSPEND 调用,RPMh 硬件时序器按依赖顺序关闭电压轨。

触发并验证挂起

识别挂起阻碍者

处于活动状态的唤醒源会阻止系统挂起。识别它们:

调试挂起失败

启用按设备的挂起和恢复跟踪:
所需的 Kconfig:

稳压器与时钟管理

减少不必要的常开稳压器和未使用的时钟消费者,可以显著降低静态功耗。

稳压器状态

检查所有稳压器及其使能状态:
从可选外设(例如并非所有单板都配备的 MIPI-CSI 传感器)的 DT 绑定中移除 regulator-always-on,以允许运行时电源门控。仅对关键电压轨保留该属性:

时钟树

Qualcomm 时钟控制器(GCC、CAMCC、DISPCC 等)由 clk-qcom 驱动系列管理。检查已启用的时钟:
在驱动中使用 devm_clk_get_enabled()(自内核 v5.20 起可用)来获取、启用时钟,并在设备解绑或运行时挂起时自动释放:

功耗分析工具

powertop

powertop 识别功耗大户,报告空闲状态驻留情况,并显示每个进程的唤醒事件速率:
需要关注的关键指标:
  • C 状态驻留:系统空闲时,深度空闲状态(C2/C3)的驻留时间占比应超过 80%。
  • 每秒唤醒次数(Wakeups/s):任何单一来源每秒超过 50 次唤醒都值得调查。

pm_debug debugfs

使用 ftrace 进行 cpuidle 跟踪