子系统追踪点:电源¶
电源追踪系统捕获与内核内电源转换相关的事件。从大体上讲,有三个主要子标题
电源状态切换:报告与挂起(S-状态)、cpuidle(C-状态)和 cpufreq(P-状态)相关的事件
系统时钟相关变更
电源域相关变更和转换
本文档描述了每个追踪点的含义以及它们为何有用。
参见 include/trace/events/power.h 获取事件定义。
1. 电源状态切换事件¶
1.1 追踪 API¶
一个“cpu”事件类收集与 CPU 相关的事件:cpuidle 和 cpufreq。
cpu_idle "state=%lu cpu_id=%lu"
cpu_frequency "state=%lu cpu_id=%lu"
cpu_frequency_limits "min=%lu max=%lu cpu_id=%lu"
挂起事件用于指示系统进入和退出挂起模式
machine_suspend "state=%lu"
注意:state 的值“-1”或“4294967295”表示退出当前状态,例如,trace_cpu_idle(4, smp_processor_id()) 表示系统进入空闲状态 4,而 trace_cpu_idle(PWR_EVENT_EXIT, smp_processor_id()) 表示系统退出之前的空闲状态。
追踪中具有“state=4294967295”的事件对于使用它来检测当前状态结束的用户空间工具非常重要,从而可以正确绘制状态图并计算准确的统计数据等。
2. 时钟事件¶
时钟事件用于时钟使能/禁用以及时钟频率变更。
clock_enable "%s state=%lu cpu_id=%lu"
clock_disable "%s state=%lu cpu_id=%lu"
clock_set_rate "%s state=%lu cpu_id=%lu"
第一个参数给出时钟名称(例如“gpio1_iclk”)。第二个参数是 '1' 表示使能,'0' 表示禁用,对于 set_rate 则是目标时钟频率。
3. 电源域事件¶
电源域事件用于电源域转换
power_domain_target "%s state=%lu cpu_id=%lu"
第一个参数给出电源域名称(例如“mpu_pwrdm”)。第二个参数是电源域目标状态。
4. PM QoS 事件¶
PM QoS 事件用于 QoS 添加/更新/删除请求,以及目标/标志更新。
pm_qos_update_target "action=%s prev_value=%d curr_value=%d"
pm_qos_update_flags "action=%s prev_value=0x%x curr_value=0x%x"
第一个参数给出 QoS 操作名称(例如“ADD_REQ”)。第二个参数是之前的 QoS 值。第三个参数是要更新的当前 QoS 值。
还有用于设备 PM QoS 添加/更新/删除请求的事件。
dev_pm_qos_add_request "device=%s type=%s new_value=%d"
dev_pm_qos_update_request "device=%s type=%s new_value=%d"
dev_pm_qos_remove_request "device=%s type=%s new_value=%d"
第一个参数给出尝试添加/更新/删除 QoS 请求的设备名称。第二个参数给出请求类型(例如“DEV_PM_QOS_RESUME_LATENCY”)。第三个参数是要添加/更新/删除的值。
此外,还有用于 CPU 延迟 QoS 添加/更新/删除请求的事件。
pm_qos_add_request "value=%d"
pm_qos_update_request "value=%d"
pm_qos_remove_request "value=%d"
该参数是要添加/更新/删除的值。