收集效能資料

系統啟動期間,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.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%

擷取錯誤報告時,如果執行 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 個套件:

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

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

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

前 N 個儲存空間 I/O 寫入數 自上次收集以來,前 N 名將資料寫入磁碟的前 N 名套件。每一行包含與「前 N 名讀取」相似的欄位。
前 N I/O 等待 UID

I/O 等待工作最多的前 N 個套件。

  • 每一層頂層行都包含使用者 ID、套件名稱、數量,以及套件中等待 I/O 的工作百分比。
  • 內部層級的程式碼行包含 I/O 等待資訊,用於套件擁有的頂層程序。
前 N 大主要頁面錯誤 自上次集合以來,網頁錯誤最多的前 N 個套件。