系統啟動期間,Watchdog 原生服務會記錄 I/O 效能資料。原生服務會將收集到的效能資料轉儲至錯誤報告中。供應商可以透過 dumpsys 查詢原生服務,以便轉儲所收集的資料,或啟動自訂收集工作階段進行偵錯。
資料收集頻率
成效資料收集頻率會因版本類型而異。
- 在 userdebug 或 eng 版本中,Watchdog 會在系統啟動期間每隔 1 秒收集一次成效資料,並在啟動完成後每隔 1 分鐘收集一次。
- 在使用者建構中,Watchdog 會在系統開機期間每 20 秒收集一次效能資料,並在啟動完成後每兩 (2) 分鐘收集一次效能資料。
資料收集事件
系統會在各種系統事件 (例如系統啟動、系統喚醒和使用者切換) 和最後 N 分鐘的期間,執行以樣本為基礎的剖析。
- 產生錯誤報告前的最後 N 分鐘事件:在 30 分鐘的滾動週期內產生。
- 啟動時間事件:啟動後產生。
- 使用者切換事件:在使用者切換啟動後產生。
- 自訂收集事件:可指定輪詢週期、最長時間,並可依套件篩選。
傾印效能資料
擷取錯誤報告時,Watchdog 原生服務會將收集到的效能資料轉儲至錯誤報告中。供應商可以透過下列 dumpsys 指令查詢原生服務,以便轉儲所收集到的效能資料。如要進一步瞭解這份報表,請參閱「瞭解成效資料報表」一節。
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.kitchensink
和 com.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%
擷取錯誤報告時,如果執行 Watchdog dumpsys 指令且不含任何引數,或停止自訂收集工作階段,Watchdog 原生服務會傾印與上述報表類似的效能資料報告。
這份報表包含系統啟動期間和產生報表前最後 N 分鐘所收集的資料。
產品 | 說明 |
---|---|
開機收集資訊 | 提供啟動期間效能資料收集工作階段的相關資訊。 |
喚醒字詞收集資訊 | 系統從休眠狀態喚醒時,提供喚醒效能資料收集工作階段的相關資訊。 |
使用者切換收集資訊 | 提供使用者在切換使用者切換時效能資料收集工作階段的資訊。 |
定期資料收集資訊 | 提供在開機完成後開始的定期效能收集工作階段相關資訊。 |
啟動時效能報表 | 包含系統啟動期間收集到的效能資料。這類資料會持續保留在記憶體中,直到系統關機為止,因此資料會轉儲至所有報表。 |
喚醒功能成效報表 | 包含喚醒期間收集到的效能資料。這類資料會持續在記憶體內,直到系統關閉為止,因此資料都會傾印在所有報表中。 |
使用者切換成效報表 | 包含在使用者切換期間收集的效能資料。這類資料會持續保留在記憶體中,直到系統關機為止,因此資料會轉儲至所有報表。 |
最近 N 分鐘的 I/O 效能報表 | 包含報表產生前 N 分鐘內 (透過定期收集工作階段) 收集到的成效資料。 |
收集時間長度 | 收集成效資料的總時間。 |
集合數量 | 單一報表中回報的集合總數。 |
報表中列出的每個集合可能包含下列所有或部分部分。每個收集作業中回報的統計資料,是自上次收集作業以來的差異值,但統計資料是即時的例外 (例如,系統啟動後未匯總的資料)。
產品 | 說明 |
---|---|
CPU I/O 等待時間/百分比 | 自上次收集以來,在內容切換或因 I/O 作業而等待時,所花費的 CPU 時間絕對值和百分比。 |
CPU 總執行時間 | CPU 總時間,以毫秒為單位。 |
CPU 閒置時間總計 | 閒置時 CPU 耗費的總時間。 |
CPU I/O 等待時間 | CPU 等待 I/O 作業的總時間。 |
情境切換次數 | 從一個程序或執行緒切換到另一個程序或執行緒的 CPU 切換次數。 |
I/O 封鎖程序數量/百分比 | 等待 I/O 而遭到封鎖的程序總數,以及自上次收集以來,等待 I/O 而遭到封鎖的程序百分比。 |
前 N 大 CPU 時間 |
自上次收集資料以來,耗用 CPU 時間最多的前 N 個套件:
|
前 N 大儲存空間 I/O 讀取作業 |
自上次收集以來,從磁碟讀取最多資料的前 N 個套件。 每行包含使用者 ID、套件名稱、前景模式與背景模式讀取的位元組總數、系統中所有前景模式與背景模式讀取的位元組百分比、前景模式與背景模式發出的 |
儲存空間 I/O 寫入作業的前 N 項 | 自上次收集以來,寫入磁碟的資料量最多的前 N 個套件。每個資料列都包含類似於 Top N Reads 的欄位。 |
前 N 個等待 I/O 的 UID | 等待 I/O 作業次數最多的前 N 個套件。
|
前 N 大主要頁面錯誤 | 自上次收集資料以來,有最多主要頁面錯誤的 N 個套件。 |