ウォッチドッグ ネイティブ サービスは、システム起動中に 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 待機時間 / パーセント | 前回の収集以降に I/O オペレーションのためにコンテキストの切り替えや待機に費やされた絶対的な合計 CPU 時間と合計 CPU 時間の割合。 |
合計 CPU 時間 | 合計 CPU 時間(ミリ秒) |
合計アイドル CPU 時間 | アイドル状態に費やした合計 CPU 時間。 |
CPU I/O 待機時間 | CPU が I/O 操作の待機に費やした合計時間。 |
コンテキスト切り替えの数 | CPU が 1 つのプロセスやスレッドから別のプロセスやスレッドに切り替える数。 |
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 個のパッケージ。 |