收集成效資料

由 Watchdog 原生服務記錄自啟動期間,且會記錄 I/O 效能資料 系統開機原生服務會在 錯誤報告。供應商可以透過 dumpsys 查詢原生服務,以便轉儲所收集的資料,或啟動自訂收集工作階段進行偵錯。

資料收集頻率

成效資料收集頻率會因版本類型而異。

  • 在 userdebug 或 eng 版本中,Watchdog 會在系統啟動期間每隔一 (1) 秒收集一次成效資料,並在啟動完成後每隔一 (1) 分鐘收集一次。
  • 在使用者版本中,Watchdog 會在系統啟動期間每 20 秒收集一次效能資料,並在啟動完成後每兩 (2) 分鐘收集一次資料。

資料收集事件

系統會在不同的系統事件 (例如系統開機、 系統喚醒、使用者切換) 以及最後 N 分鐘期間。

  • 產生錯誤報告前的最後 N 分鐘事件:在 30 分鐘的滾動視窗期間產生。
  • 啟動時間事件:啟動後產生。
  • 使用者切換事件:在使用者切換啟動後產生。
  • 自訂收集事件:可指定輪詢週期、最長時間,並可依套件篩選。

傾印效能資料

擷取錯誤報告時,Watchdog 原生服務會傾印 錯誤報告中的效能資料。供應商可以透過 來轉儲收集到的效能資料。詳情請見 「瞭解成效 資料報表,以進一步瞭解此報表。

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default > /tmp/carwatchdog_dump.txt

收集成效資料以進行偵錯

供應商可以使用 Watchdog 原生服務,自訂收集效能資料以進行偵錯。舉例來說,如要瞭解應用程式或服務的 I/O 用量,供應商可以執行自訂效能資料收集作業,以便分析特定套件清單或整個系統的 I/O 用量。

開始自訂收集工作階段

以下顯示的是啟動自訂效能資料收集作業的指令 工作階段:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --start_perf [--interval <seconds>] [--max_duration <seconds>] [--filter_packages <package_name>,<package_name>,...]
  • --start_perf 啟動自訂效能資料收集工作階段。
  • --interval <seconds> 指定剖析間隔。預設值為 30 秒。
  • --max_duration <seconds> 指定自訂成效資料收集工作階段的最大時間長度。如果工作階段未停止 系統就會停止工作階段,並捨棄收集到的資料 結束之後根據預設,最長時間為 30 分鐘。
  • --filter_packages <package_name>,<package_name>... 指定要剖析的套件名稱清單 (以半形逗號分隔)。提供這些資料後,系統只會收集這些套件的成效資料。否則,系統會收集系統中所有套件的效能資料。

舉例來說,下列指令會啟動自訂效能資料收集作業 剖析時間間隔為 10 秒,最大集合 持續 1 小時,並將剖析資料限制為 com.google.android.car.kitchensinkcom.google.android.apps.maps 個套件。

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --start_perf --interval 10 --max_duration 3600 --filter_packages com.google.android.car.kitchensink,com.google.android.apps.maps

停止並轉儲自訂集合工作階段

記錄感興趣的應用程式或服務的 I/O 使用情形後,供應商應停止 自訂效能資料收集工作階段,以轉儲收集到的資料。這個指令會停止自訂成效資料收集作業,並將收集到的資料轉儲至 /tmp/carwatchdog_dump.txt

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --stop-perf > /tmp/carwatchdog_custom_dump.txt

Dumpsys 說明

如何取得 dumpsys 說明:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --help

轉儲為 Proto 格式

您也可以選擇以 proto 格式傾印 dumpsys 資料:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --proto

瞭解成效資料報表

詳情請參閱以下成效資料報表範例:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default

---------------------------------
WatchdogPerfService report:
---------------------------------
Boot-time collection information:
=================================
Event polling interval: 1 second

Wake-up collection information:
===============================
Event polling interval: 1 second

User-switch collection information:
===================================
Event polling interval: 1 second

Periodic collection information:
================================
Event polling interval: 60 seconds
---------------------------------------------------------------------------
Boot-time performance report:
=================================
No collection recorded
---------------------------------------------------------------------------
Wake-up performance report:
===========================
No collection recorded
---------------------------------------------------------------------------
User-switch events performance report:
======================================
No collection recorded
---------------------------------------------------------------------------
Last N minutes performance report:
======================================
Collection duration: 10800 seconds
Number of collections: 181

Collection 0: <Mon Oct  2 18:36:06 2023 GMT>
=============================================
Total CPU time (ms): 473210
Total CPU cycles: 39553152000
Total idle CPU time (ms)/percent: 435860 / 92.11%
CPU I/O wait time (ms)/percent: 0 / 0.00%
Number of context switches: 13723415093
Number of I/O blocked processes/percent: 0 / 0.00%

Top N CPU Times:
----------------
Android User ID, Package Name, CPU Time (ms), Percentage of total CPU time, CPU Cycles
    Command, CPU Time (ms), Percentage of UID's CPU Time, CPU Cycles
10, com.google.android.carassistant, 13357, 2.82%, 16409088000
    assistant:interactor, 13360, 100.02%, 16409088000
0, system, 9097, 1.92%, 9640512000
    sensors@1.0-ser, 3790, 41.66%, 3773184000
    system_server, 2760, 30.34%, 3135936000
    com.android.car, 1150, 12.64%, 1099584000
    binder:621_4, 1000, 10.99%, 1281024000
    surfaceflinger, 230, 2.53%, 245376000
0, audioserver, 4383, 0.93%, 4597248000
    Main, 2690, 61.37%, 2980416000
    binder:916_2, 950, 21.67%, 925056000
    audioserver, 720, 16.43%, 691776000
0, root, 4357, 0.92%, 3727872000
    irq/311-iam2068, 2630, 60.36%, 2471616000
    irq/26-90b6400., 370, 8.49%, 561024000
    kworker/u16:4-bwmon_wq, 290, 6.66%, 48960000
    kworker/u16:1-memlat_wq, 270, 6.20%, 0
    ipcdaemon, 220, 5.05%, 218304000
10, com.google.android.apps.geo.automotive.adas, 1509, 0.32%, 1756416000
    adas:publishing, 1490, 98.74%, 1735680000
    as:clientparams, 10, 0.66%, 20736000
0, com.android.vending, 796, 0.17%, 765504000
    android.vending, 790, 99.25%, 765504000
0, shared:com.google.uid.shared, 581, 0.12%, 481152000
    google.android.gms, 340, 58.52%, 237312000
    .gms.persistent, 190, 32.70%, 184512000
    process.gservices, 50, 8.61%, 59328000
0, gps, 507, 0.11%, 659136000
    binder:920_2, 500, 98.62%, 659136000
10, com.android.vending, 489, 0.10%, 372288000
    android.vending, 480, 98.16%, 372288000
0, shared:android.uid.systemui, 438, 0.09%, 449856000
    android.systemui, 440, 100.46%, 449856000

Top N Storage I/O Reads:
-------------
Android User ID, Package Name, Foreground Bytes, Foreground Bytes %, Foreground Fsync, Foreground Fsync %, Background Bytes, Background Bytes %, Background Fsync, Background Fsync %
0, root, 56123392, 81.95%, 1, 100.00%, 0, 0.00%, 0, 0.00%
0, system, 12333056, 18.01%, 0, 0.00%, 0, 0.00%, 0, 0.00%

Top N Storage I/O Writes:
-------------------------
Android User ID, Package Name, Foreground Bytes, Foreground Bytes %, Foreground Fsync, Foreground Fsync %, Background Bytes, Background Bytes %, Background Fsync, Background Fsync %
0, com.android.vending, 0, 0.00%, 0, 0.00%, 520192, 46.35%, 20, 47.62%
10, com.android.vending, 0, 0.00%, 0, 0.00%, 520192, 46.35%, 20, 47.62%
10, shared:com.google.uid.shared, 0, 0.00%, 0, 0.00%, 45056, 4.01%, 0, 0.00%
0, shared:com.google.uid.shared, 0, 0.00%, 0, 0.00%, 36864, 3.28%, 2, 4.76%
0, logd, 24576, 40.00%, 0, 0.00%, 0, 0.00%, 0, 0.00%
0, root, 20480, 33.33%, 0, 0.00%, 0, 0.00%, 0, 0.00%
0, system, 16384, 26.67%, 0, 0.00%, 0, 0.00%, 0, 0.00%

Top N I/O waiting UIDs:
-----------------------
Android User ID, Package Name, Number of owned tasks waiting for I/O, Percentage of owned tasks waiting for I/O
    Command, Number of I/O waiting tasks, Percentage of UID's tasks waiting for I/O
0, root, 2, 0.39%
    dp_hdcp2p2, 1, 50.00%
    hdcp_2x, 1, 50.00%

Top N major page faults:
------------------------
Android User ID, Package Name, Number of major page faults, Percentage of total major page faults
    Command, Number of major page faults, Percentage of UID's major page faults
0, com.android.vending, 104, 48.83%
    android.vending, 104, 100.00%
10, com.android.vending, 104, 48.83%
    android.vending, 104, 100.00%
0, shared:com.google.uid.shared, 4, 1.88%
    .gms.persistent, 4, 100.00%
10, shared:com.google.uid.shared, 1, 0.47%
    .gms.persistent, 1, 100.00%
Number of major page faults since last collection: 213
Percentage of change in major page faults since last collection: 0.00%

擷取 bugreport 時,如果在沒有任何引數的情況下執行 Watchdog dumpsys 指令,或停止自訂收集工作階段,Watchdog 原生服務會轉儲與上述報表類似的效能資料報表。

這份報表包含系統啟動期間和產生報表前最後 N 分鐘所收集的資料。

產品 說明
開機收集資訊 提供啟動期間效能資料收集工作階段的相關資訊。
喚醒字詞收集資訊 系統從休眠狀態喚醒時,提供喚醒效能資料收集工作階段的相關資訊。
使用者切換收集資訊 提供使用者切換鈕效能資料收集工作階段的資訊 (在這類工作階段時) 也就是使用者切換
定期資料收集資訊 提供從貼文開始的定期成效資料收集會議相關資訊 開機完成。
啟動時間成效報表 包含系統開機期間收集的效能資料。這項資料會保留在記憶體中 直到系統關閉為止,因此資料都會傾印在所有報表中。
喚醒功能成效報表 包含喚醒期間收集的效能資料。這類資料會持續保留在記憶體中,直到系統關機為止,因此會顯示在所有報表中。
使用者切換成效報表 包含使用者切換期間收集的效能資料。這類資料會持續保留在記憶體中,直到系統關機為止,因此資料會轉儲至所有報表。
過去 N 分鐘的 I/O 成效報表 包含報表產生前 N 分鐘內 (透過定期收集工作階段) 收集到的成效資料。
收集資料的時間長度 收集成效資料的總時間。
集合數量 單一報表回報的集合總數。

報表列出的每個集合可能包含下列全部或部分資料 專區。每個收集作業中回報的統計資料,是自上次收集作業以來的差異值,但統計資料是即時的例外 (例如,系統啟動後未匯總的資料)。

產品 說明
CPU I/O 等待時間/百分比 環境切換或 CPU 作業總時間的絕對 CPU 作業時間與百分比 等待自上次收集以來的 I/O 作業產生。
CPU 總執行時間 CPU 總作業時間,以毫秒為單位。
閒置 CPU 作業時間總計 閒置時 CPU 耗費的總時間。
CPU I/O 等待時間 CPU 等待 I/O 作業的總時間。
內容切換鈕數量 從某個程序或執行緒切換至另一個程序或執行緒的 CPU 數量。
I/O 封鎖程序數量/百分比 遭到封鎖的程序總數,正在等待 I/O 作業及遭封鎖的程序百分比 等待自上次收集以來的 I/O 作業
前 N 大 CPU 時間

自上次集合以來,CPU 作業時間最長的 N 個套件:

  • 每一第一行都包含使用者 ID、套件名稱、CPU 作業時間、佔總數的百分比 CPU 作業時間和 CPU 週期
  • 內層行包含指令、CPU 時間、UID CPU 時間百分比和 CPU 週期。
前 N 個儲存空間 I/O 讀取數

自上次收集以來,從磁碟讀取最多資料的前 N 個套件。

每行包含使用者 ID、套件名稱、前景模式與背景模式讀取的總位元組數、系統中所有前景模式與背景模式讀取的位元組百分比、前景模式與背景模式發出的 fsync 呼叫總數,以及系統中所有前景模式與背景模式 fsync 呼叫的百分比。

前 N 個儲存空間 I/O 寫入數 自上次收集以來,寫入磁碟的資料量最多的前 N 個套件。每個資料列都包含類似於 Top N Reads 的欄位。
前 N I/O 等待 UID

等待 I/O 作業次數最多的前 N 個套件。

  • 每一層第一行都包含使用者 ID、套件名稱、編號和 套件擁有等待 I/O 的工作比例。
  • 內部層級行包含套件所擁有的頂層程序的 I/O 等待資訊。
前 N 個主要網頁錯誤 自上次集合以來,網頁錯誤最多的前 N 個套件。