子系統跟蹤點: power

電源跟蹤系統捕獲核心中與電源轉換相關的事件。 廣義上講,主要有三個小標題

  • 電源狀態切換,報告與掛起(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"

注意:對於狀態來說,值‘-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"

該引數是要新增/更新/刪除的值。