GPU Runtime Suspend 调试与验证:从 sysfs 到 perf 分析
选题背景:在基于 NXP i.MX8MP 平台调试 GPU 时,常常需要确认 Vivante GPU2D/ Vivante GPU2D/\uGPU3D 是否已经进入 runtime suspend ,以降为一篇完整的验证和分析步骤,适合用于实战调试与面试表达。
一、什么是 Runtime Suspend?
Runtime PM (运行时电源管理),是 Linux 内核为了降低设备功耗,在设备空闲时自动进行 suspend 操作的机制。
它不同于 system suspend(全系统睡眠),而是对每个设备单独管控。
二、哪些条件才能让设备进入 suspend?
必须同时满足以下 5 大条件:
- 设备默认 power/control = auto
- 驱动已实现
.runtime_suspend()
/.runtime_resume()
- 已经挂载 power domain (genpd)
- usage = 0,表示没有 pm_runtime_get() 依赖
- 内核判定设备空闲,可以 suspend
三、实际操作步骤:GPU2D 为例
1.确认设备节点
/sys/devices/platform/38008000.gpu2d/power/
2.查看主要文件
cat control # 应为 auto
cat runtime_status # suspended / active / unsupported
cat runtime_usage # 一般应为 0
cat runtime_active_time # 指示处于 active 的累积时间
cat runtime_suspended_time # 累积 suspend 时间
3.输出示例
control = auto
runtime_status = suspended
runtime_usage = 0
runtime_active_time = 7
runtime_suspended_time = 2810976
表示 GPU2D 设备已成功 runtime suspend,系统在设备空闲时自动关闭电源。
四、通过 perf 确认 GPU 是否带来负载
执行指令:
perf top
如果有 GPU 相关函数或 power domain wakeup 相关标识,则设备应还处于 active 状态或预处理状态。
反之,如果 CPU 大量时间都处于 cpuidle_enter_state ,说明系统很空,GPU 没有活动分配 CPU 资源。
五、面试推荐答题解析
Q: 如何确认一个设备已经进入 runtime suspend?
A: 我会通过 /sys/devices/…/power/文件夹,查看 control 是否为 auto,以及 runtime_status 是否显示 suspended,同时进行 perf top 分析确认是否有该设备相关热点。如果未 suspend,可能是 usage 未释放,或驱动未实现 dev_pm_ops。
六、小结
通过本文一步步操作,我们成功验证了 GPU2D 已开启 runtime suspend,同时说明了如何通过 sysfs + perf 解析设备负载状态。
下一篇文章,我们将入手 Linux 内核以及 Vivante GPU 驱动的原始码,全面分析 runtime_suspend 是如何被调用、如何实现的。