ウォッチドッグ ネイティブ サービスは、システム起動時の early-init 以降の I/O パフォーマンス データを記録します。ネイティブ サービスは、収集したパフォーマンス データをバグレポートにダンプします。ベンダーは、dumpsys を介してネイティブ サービスにクエリを実行し、収集したデータをダンプするか、カスタム コレクション セッションを開始してデバッグできます。
データの収集頻度
パフォーマンス データの収集頻度は、ビルドタイプによって異なります。
- userdebug ビルドまたは eng ビルドでは、ウォッチドッグはシステム起動中に 1 秒に 1 回、起動完了後に 1 分に 1 回パフォーマンス データを収集します。
- ユーザービルドでは、ウォッチドッグはシステムの起動中に 20 秒に 1 回、起動が完了してから 2 分に 1 回、パフォーマンス データを収集します。
データ収集イベント
サンプルベースのプロファイリングは、さまざまなシステム イベント(システムの起動、システムの復帰、ユーザーの切り替えなど)中に、直近の N 分間に実行されます。
- バグレポート生成前の直近 N 分間のイベント: 30 分のローリング ウィンドウ内に生成されます。
- 起動時イベント: 起動後に生成されます。
- ユーザー切り替えイベント: ユーザー切り替えが開始された後に生成されます。
- カスタム コレクション イベント: ポーリング期間と最大期間を指定できます。パッケージでフィルタすることもできます。
パフォーマンス データをダンプする
バグレポートがキャプチャされると、ウォッチドッグ ネイティブ サービスは収集したパフォーマンス データをバグレポートにダンプします。ベンダーは、以下の dumpsys コマンドを使用してネイティブ サービスにクエリを実行し、収集したパフォーマンス データをダンプできます。このレポートについて詳しくは、パフォーマンス レポートについてのセクションをご覧ください。
adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default > /tmp/carwatchdog_dump.txt
パフォーマンス データを収集してデバッグする
ベンダーは、ウォッチドッグ ネイティブ サービスを使用して、デバッグ目的のパフォーマンス データのカスタム収集を行えます。たとえば、ベンダーはアプリやサービスの 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 形式にダンプする
必要に応じて、dumpsys データを proto 形式でダンプできます。
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%
バグレポートをキャプチャするとき、引数を指定せずにウォッチドッグ dumpsys コマンドを実行したとき、またはカスタム コレクション セッションを停止したとき、ウォッチドッグ ネイティブ サービスは、上記のレポートと同様のパフォーマンス データ レポートをダンプします。
このレポートには、システムの起動時に収集されたデータとレポート生成前の最後の N 分間に収集されたデータが含まれています。
アイテム | 説明 |
---|---|
起動時の収集情報 | 起動時のパフォーマンス データ収集セッションに関する情報を提供します。 |
ウェイクアップ収集情報 | システムが一時停止から復帰したときのウェイクアップ パフォーマンス データ収集セッションに関する情報を提供します。 |
ユーザースイッチの収集情報 | ユーザー スイッチがある場合に、ユーザー スイッチのパフォーマンス データ収集セッションに関する情報を提供します。 |
定期的な収集情報 | 起動完了後に開始する定期的なパフォーマンス収集セッションに関する情報を提供します。 |
起動時パフォーマンス レポート | システム起動時に収集されたパフォーマンス データが含まれます。このデータはシステムがシャットダウンするまでメモリ内に保持されるため、すべてのレポートにダンプされます。 |
ウェイクアップ パフォーマンス レポート | ウェイクアップ中に収集されたパフォーマンス データが含まれます。このデータは、システムがシャットダウンするまでメモリ内に保持されるため、すべてのレポートにダンプされます。 |
ユーザー切り替えのパフォーマンス レポート | ユーザーの切り替え時に収集されたパフォーマンス データが含まれます。このデータはシステムがシャットダウンするまでメモリ内に保持されるため、すべてのレポートにダンプされます。 |
直近 N 分間の I/O パフォーマンス レポート | レポート生成前の直近の N 分間に(定期的な収集セッションによって)収集されたパフォーマンス データが含まれます。 |
収集期間 | パフォーマンス データの収集の合計時間。 |
コレクションの数 | 1 つのレポートでレポートされるコレクションの合計数。 |
レポートで報告される各コレクションには、以下のセクションのすべてまたは一部が含まれる場合があります。各コレクションで報告される統計情報は、瞬間的な統計情報(たとえば、システムの起動時から集計されていない統計情報)を除く、前回の収集からの差分です。
アイテム | 説明 |
---|---|
CPU I/O 待機時間/割合 | 絶対 CPU 時間と、最後の収集以降に 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、パッケージ名、フォアグラウンド モードとバックグラウンド モードでの読み取りの合計バイト数、システムにおけるすべてのフォアグラウンド モードとバックグラウンド モードでの読み取りバイト数の割合、フォアグラウンド モードとバックグラウンド モードで行われた |
上位 N 件のストレージ I/O 書き込み | 前回の収集以降に、最も多くのデータをディスクに書き込んだ上位 N 個のパッケージ。各行には、上位 N 個の読み取りに類似したフィールドが含まれています。 |
上位 N 個の I/O 待機中の UID | I/O 待機タスクが最も多い上位 N 個のパッケージ。
|
上位 N 件の重大なページ フォールト | 前回の収集以降に、重大なページ フォールトが発生した上位 N 個のパッケージ。 |