收集效果数据

看门狗本机服务记录系统启动期间早期初始化以来的 I/O 性能数据。本机服务将收集到的性能数据转储到错误报告中。供应商可以通过 dumpsys 查询本机服务,以转储收集的数据或启动自定义收集会话进行调试。

数据收集频率

性能数据收集的频率因构建类型而异。

  • 在 userdebug 或 eng 版本中,Watchdog 在系统启动期间每 (1) 秒收集一次性能数据,并在启动完成后每 (1) 分钟收集一次性能数据。
  • 在用户构建中,Watchdog 在系统启动期间每 20 秒收集一次性能数据,并在启动完成后每两 (2) 分钟收集一次性能数据。

转储性能数据

捕获错误报告后,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包。

$ 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 。单个报告中报告的集合总数。

报告中报告的每个集合可能包含以下全部或部分部分。每个集合中报告的统计信息是自上次收集以来的增量,但瞬时统计信息除外(例如,自系统启动以来未聚合)。

  • 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