パフォーマンス データの収集

ウォッチドッグ ネイティブ サービスは、システム起動時の初期初期以降の I/O パフォーマンス データを記録します。ネイティブ サービスは、収集されたパフォーマンス データをバグ レポートにダンプします。ベンダーは、dumpsys 経由でネイティブ サービスにクエリを実行して、収集されたデータをダンプするか、デバッグ用のカスタム収集セッションを開始できます。

データ収集頻度

パフォーマンス データ収集の頻度はビルド タイプによって異なります。

  • userdebug または eng ビルドでは、Watchdog はシステム起動中は 1 秒ごとに 1 回、起動完了後は 1 分ごとにパフォーマンス データを収集します。
  • ユーザー ビルドの場合、Watchdog はシステムの起動中は 20 秒に 1 回、起動完了後は 2 分に 1 回パフォーマンス データを収集します。

パフォーマンスデータをダンプする

バグレポートがキャプチャされると、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 seconds 、最大収集期間1 hourでカスタム パフォーマンス データ収集を開始し、プロファイリングをcom.google.android.car.kitchensinkcom.google.android.apps.mapsに制限します。 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

ダンプシスのヘルプ

$ adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --help

パフォーマンス データ レポートを理解する

以下にパフォーマンス データ レポートのサンプルを示します。

$ adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default

------------------------------
WatchdogPerfService report:
------------------------------
Boot-time collection information:
==========================
Event interval: 1 second

Periodic collection information:
=========================
Event interval: 60 seconds
--------------------------------
Boot-time I/O performance report:
============================
Collection duration: 1637609138 seconds
Number of collections: 12

Collection 0: <Fri Jan  7 19:53:53 2022 GMT>
===================================
CPU I/O wait time/percent: 18 / 0.63%
Number of I/O blocked processes/percent: 0 / 0.00%

Top N 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 Writes:
-------------
Android User ID, Package Name, Foreground Bytes, Foreground Bytes %, Foreground Fsync, Foreground Fsync %, Background Bytes, Background Bytes %, Background Fsync, Background Fsync %
0, root, 53248, 100.00%, 1, 100.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.59%
        kworker/7:2+events, 1, 50.00%
        kworker/4:2+events, 1, 50.00%
0, system, 2, 7.14%
        ais_server, 2, 100.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, system, 48, 53.33%
        ais_server, 13, 27.08%
        audiod, 10, 20.83%
0, root, 41, 45.56%
        init, 39, 95.12%
        ueventd, 1, 2.44%
0, media, 1, 1.11%
        init.qti.media., 1, 100.00%
Number of major page faults since last collection: 90
Percentage of change in major page faults since last collection: 0.00%

Collection 1: <Fri Jan  7 19:53:54 2022 GMT>
===================================
 … Collection data …

Collection 2: <Fri Jan  7 19:53:55 2022 GMT>
===================================
 … Collection data …
 … Repeated collection data until boot-complete …

-----------------------------------------
Last N minutes I/O performance report:
================================
Collection duration: 10797 seconds
Number of collections: 181

Collection 0: <Tue Jan 11 19:43:05 2022 GMT>
====================================
CPU I/O wait time/percent: 18 / 0.04%
Number of I/O blocked processes/percent: 0 / 0.00%

Top N Writes:
-------------
Android User ID, Package Name, Foreground Bytes, Foreground Bytes %, Foreground Fsync, Foreground Fsync %, Background Bytes, Background Bytes %, Background Fsync, Background Fsync %
0, system, 33697792, 92.41%, 0, 0.00%, 0, 0.00%, 0, 0.00%
0, gps, 2420736, 6.64%, 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, 1, 0.19%
        crtc_commit:244, 1, 100.00%

バグレポートをキャプチャするとき、引数なしで Watchdog dumpsys コマンドを実行するとき、またはカスタム収集セッションを停止するとき、Watchdog ネイティブ サービスは上記のレポートと同様のパフォーマンス データ レポートをダンプします。

レポートには、システムの起動中とレポート生成前の最後の N 分間に収集されたデータが含まれます。

  • Boot-time collection information 。ブート時のパフォーマンス データ収集セッションに関する情報を提供します。
  • Periodic collection information 。ブート完了後に開始される定期的なパフォーマンス収集セッションに関する情報を提供します。
  • Boot-time I/O performance report 。システムの起動時に収集されたパフォーマンス データが含まれます。このデータはシステムがシャットダウンするまでメモリ内に保持されるため、すべてのレポートにダンプされます。
  • Last N minutes I/O performance report 。レポート生成前の最後の N 分間に (定期収集セッションによって) 収集されたパフォーマンス データが含まれます。
  • Collection duration 。パフォーマンス データ収集の合計期間。
  • Number of collections 。 1 つのレポートで報告されるコレクションの総数。

レポートで報告される各コレクションには、以下のセクションのすべてまたは一部が含まれる場合があります。各コレクションで報告される統計は、瞬間的な統計 (たとえば、システム起動以降に集計されていない統計) を除き、最後の収集以降の差分です。

  • CPU I/O wait time/percent 。絶対 CPU 時間と、最後の収集以降の I/O 操作によるコンテキストの切り替えまたは待機に費やされた合計 CPU 時間の割合。
  • Number of I/O blocked processes/percent 。最後の収集以降、I/O を待機してブロックされたプロセスの合計数と、I/O を待機してブロックされたプロセスの割合。
  • Top N Reads 。前回の収集以降、ディスクからほとんどのデータを読み取った上位 N 個のパッケージ。
    • 各行には、ユーザー ID、パッケージ名、フォアグラウンド モードとバックグラウンド モードで読み取られた合計バイト数、システム内のすべてのフォアグラウンド モードとバックグラウンド モードの読み取りのバイト数の割合、フォアグラウンド モードとバックグラウンド モードで行われた fsync 呼び出しの合計数が含まれます。システム内で行われたすべてのフォアグラウンド モードとバックグラウンド モードの fsync コールにわたる fsync コールの割合。
  • Top N Writes 。前回の収集以降、ほとんどのデータをディスクに書き込んだ上位 N 個のパッケージ。
    • 各行には、 Top N Readsのフィールドと同様のフィールドが含まれています。
  • Top NI/O waiting UIDs 。 I/O 待機タスクが最も多い上位 N 個のパッケージ。
    • 最上位の各行には、ユーザー ID、パッケージ名、I/O を待機しているパッケージが所有するタスクの数と割合が含まれます。
    • 内部レベルの行には、パッケージが所有する最上位プロセスの I/O 待機情報が含まれます。
  • Top N major page faults 。前回の収集以降、最も重大なページ フォールトが発生した上位 N 個のパッケージ。
    • 最上位の各行には、ユーザー ID、パッケージ名、パッケージに起因するメジャー ページ フォールトの数と割合が含まれます。
    • 内部レベルの行には、パッケージが所有する最上位プロセスのメジャー ページ フォールト情報が含まれます。
  • Number of major page faults since last collection
  • Percentage of change in major page faults since last collection