CPUIdle 状态与调速器
CPUIdle 在 CPU 没有可运行任务时管理空闲状态的选择。在 Qualcomm 平台上,空闲状态在设备树中定义,并通过 PSCI(电源状态协调接口)固件传递给 Linux。空闲状态层级
Qualcomm ARM64 SoC 通常为每个 CPU 提供三个由 PSCI 支持的空闲状态: 表:典型的 Qualcomm PSCI 空闲状态
确切的 PSCI 状态标识符和驻留时间值在 SoC DTSI 中每个 CPU 节点下定义。可如下查看:
在运行时检查空闲状态
CPUIdle 调速器
表:CPUIdle 调速器PM QoS 延迟约束
驱动和用户空间可以通过注册延迟约束来阻止 CPU 进入深度空闲状态。通过 sysfs 设置每 CPU 约束:外设的运行时 PM
运行时 PM 允许各个外设设备在系统运行时进入低功耗状态。在 Qualcomm SoC 上,电源域由 RPMh 硬件资源管理器通过qcom-rpmhpd 驱动进行管理。
在驱动中启用运行时 PM
监控运行时 PM 状态
- 将
<device>替换为/sys/bus/platform/devices/中的平台设备名称。
Qualcomm 电源域
RPMh 电源域由qcom-rpmhpd 驱动注册。检查已注册的电源域:
热限频
Linux 热管理框架监控温度传感器,并在越过触发点(trip point)时采取冷却措施。Qualcomm SoC 通过 TSENS(温度传感器)硬件暴露热区(thermal zone),冷却设备则以 CPU 频率上限和 CPU 热插拔的形式实现。检查热区
热管理调速器
表:热管理调速器系统挂起(S2RAM)
系统挂起会关闭大部分 SoC 子系统的电源,同时让 DRAM 保持自刷新状态。在 Qualcomm 平台上,挂起路径在 EL3 发出 PSCISYSTEM_SUSPEND 调用,RPMh 硬件时序器按依赖顺序关闭电压轨。
触发并验证挂起
识别挂起阻碍者
处于活动状态的唤醒源会阻止系统挂起。识别它们:调试挂起失败
启用按设备的挂起和恢复跟踪:稳压器与时钟管理
减少不必要的常开稳压器和未使用的时钟消费者,可以显著降低静态功耗。稳压器状态
检查所有稳压器及其使能状态:regulator-always-on,以允许运行时电源门控。仅对关键电压轨保留该属性:
时钟树
Qualcomm 时钟控制器(GCC、CAMCC、DISPCC 等)由clk-qcom 驱动系列管理。检查已启用的时钟:
devm_clk_get_enabled()(自内核 v5.20 起可用)来获取、启用时钟,并在设备解绑或运行时挂起时自动释放:
功耗分析工具
powertop
powertop 识别功耗大户,报告空闲状态驻留情况,并显示每个进程的唤醒事件速率:
- C 状态驻留:系统空闲时,深度空闲状态(C2/C3)的驻留时间占比应超过 80%。
- 每秒唤醒次数(Wakeups/s):任何单一来源每秒超过 50 次唤醒都值得调查。

