系統啟動期間,Watchdog 原生服務會記錄 I/O 效能資料。原生服務會將收集到的效能資料傾印到錯誤報告中。供應商可以透過 dumpsys 查詢原生服務,藉此傾印所收集的資料,或是啟動自訂收集工作階段進行偵錯。
資料收集頻率
效能資料收集的頻率因建構類型而異。
- 在使用者偵錯版本或 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 分鐘的最近 N 分鐘收集到的效能資料 (依定期收集工作階段)。 |
收集時間長度 | 效能資料收集作業的總時間長度。 |
集合數量 | 單一報表回報的集合總數。 |
報表中列出的每個集合可能包含以下全部或部分資料。每個集合回報的統計資料都是自上次收集以來的差異值 (例如系統啟動後不匯總的統計資料)。
產品 | 說明 |
---|---|
CPU I/O 等待時間/百分比 | 自上次收集以來,因 I/O 作業而耗費的絕對 CPU 作業時間與 CPU 作業時間在背景切換或等待的總 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、套件名稱、在前景模式與背景模式下讀取的位元組總數、系統中所有前景模式與背景模式讀取的位元組百分比、在前景模式與背景模式下進行的 |
前 N 個儲存空間 I/O 寫入數 | 自上次收集以來,前 N 名將資料寫入磁碟的前 N 名套件。每一行包含與「前 N 名讀取」相似的欄位。 |
前 N I/O 等待 UID | I/O 等待工作最多的前 N 個套件。
|
前 N 大主要頁面錯誤 | 自上次集合以來,網頁錯誤最多的前 N 個套件。 |