Recopila datos de rendimiento

El servicio nativo Watchdog registra datos de rendimiento de E/S desde la etapa de inicialización temprana durante el arranque del sistema. El servicio nativo vuelca los datos de rendimiento recopilados en el informe de errores. Los proveedores pueden consultar el servicio nativo a través de dumpsys para volcar los datos recopilados o iniciar una sesión de recopilación personalizada para la depuración.

Frecuencia de recopilación de datos

La frecuencia de la recopilación de datos de rendimiento varía según el tipo de compilación.

  • En las compilaciones userdebug o eng, Watchdog recopila datos de rendimiento una vez por segundo durante el inicio del sistema y una vez por minuto después de que se completa el inicio.
  • En las compilaciones del usuario, Watchdog recopila datos de rendimiento una vez cada 20 segundos durante el inicio del sistema y una vez cada dos (2) minutos después de que se completa el inicio.

Eventos de recopilación de datos

El registro de perfil basado en muestras se realiza durante varios eventos del sistema (como el inicio del sistema, la activación del sistema y el cambio de usuario) y durante la ventana de los últimos N minutos.

  • Eventos de los últimos N minutos antes de la generación del informe de errores: Se generan durante una ventana continua de 30 minutos.
  • Eventos de tiempo de arranque: Se generan después del arranque.
  • Eventos de cambio de usuario: Se generan después de que se inicia un cambio de usuario.
  • Eventos de recopilación personalizados: Pueden especificar el período de sondeo y la duración máxima, y se pueden filtrar por paquetes.

Volcar datos de rendimiento

Cuando se captura un bugreport, el servicio nativo de Watchdog vuelca los datos de rendimiento recopilados en el informe de errores. Los proveedores pueden consultar el servicio nativo a través del siguiente comando dumpsys para volcar los datos de rendimiento recopilados. Consulta la sección Cómo comprender el informe de datos de rendimiento para obtener detalles sobre el informe.

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default > /tmp/carwatchdog_dump.txt

Recopila datos de rendimiento para la depuración

Los proveedores pueden usar el servicio nativo Watchdog para recopilar datos de rendimiento personalizados con fines de depuración. Por ejemplo, para comprender el uso de E/S de una app o un servicio, los proveedores pueden realizar una recopilación de datos de rendimiento personalizada que genere un perfil del uso de E/S de una lista específica de paquetes o de todo el sistema.

Inicia una sesión de recopilación personalizada

A continuación, se muestra el comando para iniciar una sesión de recopilación de datos de rendimiento personalizados:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --start_perf [--interval <seconds>] [--max_duration <seconds>] [--filter_packages <package_name>,<package_name>,...]
  • --start_perf Inicia una sesión personalizada de recopilación de datos de rendimiento.
  • --interval <seconds> Especifica el intervalo de generación de perfiles. De forma predeterminada, el intervalo es de 30 segundos.
  • --max_duration <seconds> Especifica la duración máxima de la sesión de recopilación de datos de rendimiento personalizados. Si la sesión no se detiene manualmente, se detendrá y se descartarán los datos recopilados después de este período. De forma predeterminada, la duración máxima es de 30 minutos.
  • --filter_packages <package_name>,<package_name>... Especifica una lista de nombres de paquetes separados por comas para generar el perfil. Cuando se proporcionan, la recopilación de datos de rendimiento se limita a estos paquetes. De lo contrario, la recopilación de datos de rendimiento se realiza para todos los paquetes del sistema.

Por ejemplo, el siguiente comando inicia una recopilación de datos de rendimiento personalizada con un intervalo de generación de perfiles de 10 segundos, una duración máxima de recopilación de 1 hora y limita la generación de perfiles a los paquetes com.google.android.car.kitchensink y 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

Detener y volcar la sesión de recopilación personalizada

Después de registrar el uso de E/S de una app o un servicio de interés, los proveedores deben detener la sesión de recopilación de datos de rendimiento personalizados para volcar los datos recopilados. Este comando detiene la recopilación de datos de rendimiento personalizados y vuelca los datos recopilados en /tmp/carwatchdog_dump.txt:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --stop-perf > /tmp/carwatchdog_custom_dump.txt

Ayuda de Dumpsys

Para obtener ayuda con dumpsys, haz lo siguiente:

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

Volcado en formato .proto

De manera opcional, los datos de dumpsys se pueden volcar en formato .proto:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --proto

Información sobre el informe de datos de rendimiento

Para obtener más información, consulta el siguiente informe de datos de rendimiento de muestra:

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%

Cuando se captura un bugreport, se ejecuta un comando dumpsys de Watchdog sin argumentos o se detiene una sesión de recopilación personalizada, el servicio nativo de Watchdog genera un informe de datos de rendimiento similar al anterior.

El informe contiene datos recopilados durante el inicio del sistema y los últimos N minutos antes de la generación del informe.

Artículo Descripción
Información de recopilación durante el inicio Proporciona información sobre la sesión de recopilación de datos de rendimiento del tiempo de inicio.
Información de recopilación de activación Proporciona información sobre la sesión de recopilación de datos de rendimiento de activación cuando el sistema se activa desde la suspensión.
Información de recopilación del cambio de usuario Proporciona información sobre la sesión de recopilación de datos de rendimiento del cambio de usuario cuando hay un cambio de usuario.
Información de recopilación periódica Proporciona información sobre la sesión de recopilación de rendimiento periódica que comienza después de que se completa el inicio.
Informe de rendimiento del tiempo de arranque Contiene datos de rendimiento recopilados durante el inicio del sistema. Estos datos persisten en la memoria hasta que se apaga el sistema, por lo que se vuelcan en todos los informes.
Informe de rendimiento de activación Contiene los datos de rendimiento recopilados durante la activación. Estos datos persisten en la memoria hasta que se apaga el sistema, por lo que se vuelcan en todos los informes.
Informe de rendimiento del cambio de usuario Contiene los datos de rendimiento recopilados durante el cambio de usuario. Estos datos persisten en la memoria hasta que se apaga el sistema, por lo que se vuelcan en todos los informes.
Informe de rendimiento de E/S de los últimos N minutos Contiene los datos de rendimiento recopilados (por la sesión de recopilación periódica) durante los últimos N minutos antes de la generación del informe.
Duración de la recopilación Es la duración total de la recopilación de datos de rendimiento.
Cantidad de colecciones Es la cantidad total de colecciones que se informan en un solo informe.

Cada colección que se incluye en el informe puede contener todas o algunas de las siguientes secciones. Las estadísticas que se registran en cada recopilación son el delta desde la última recopilación, excepto las estadísticas que son instantáneas (por ejemplo, no se agregan desde el inicio del sistema).

Artículo Descripción
Tiempo o porcentaje de espera de E/S de CPU Tiempo de CPU absoluto y porcentaje del tiempo total de CPU dedicado al cambio de contexto o a la espera debido a operaciones de E/S desde la última recopilación.
Tiempo de CPU total Es el tiempo total de CPU en milisegundos.
Tiempo de CPU total en inactividad Tiempo total de CPU en inactividad.
Tiempo de espera de E/S de CPU Es el tiempo total que la CPU dedicó a esperar operaciones de E/S.
Cantidad de cambios de contexto Cantidad de cambios de CPU de un proceso o subproceso a otro.
Cantidad de procesos bloqueados por E/S/porcentaje Cantidad total de procesos bloqueados que esperan E/S y el porcentaje de procesos bloqueados que esperan E/S desde la última recopilación.
Tiempos de CPU de los N principales

Los N paquetes principales que consumieron la mayor cantidad de tiempo de CPU desde la última recopilación:

  • Cada línea de nivel superior contiene el ID del usuario, el nombre del paquete, el tiempo de CPU, el porcentaje del tiempo de CPU total y los ciclos de CPU.
  • Las líneas de nivel interno contienen el comando, el tiempo de CPU, el porcentaje del tiempo de CPU del UID y los ciclos de CPU.
Las N lecturas de E/S de almacenamiento principales

Son los N paquetes principales que leyeron la mayor cantidad de datos del disco desde la última recopilación.

Cada línea contiene el ID del usuario, el nombre del paquete, la cantidad total de bytes leídos en modo en primer plano en comparación con el modo en segundo plano, el porcentaje de bytes en todas las lecturas en modo en primer plano en comparación con el modo en segundo plano en el sistema, la cantidad total de llamadas a fsync realizadas en modo en primer plano en comparación con el modo en segundo plano y el porcentaje de llamadas a fsync en todas las llamadas a fsync realizadas en modo en primer plano en comparación con el modo en segundo plano en el sistema.

Top N Storage I/O Writes Son los N paquetes principales que escribieron la mayor cantidad de datos en el disco desde la última recopilación. Cada línea contiene campos similares a los de Top N Reads.
Los N UIDs con mayor tiempo de espera de E/S

Son los paquetes de Top N con la mayor cantidad de tareas de espera de E/S.

  • Cada línea de nivel superior contiene el ID de usuario, los nombres de los paquetes, la cantidad y el porcentaje de tareas que posee el paquete y que están en espera de E/S.
  • Las líneas de nivel interno contienen la información de espera de E/S para los procesos principales que posee el paquete.
Principales N fallas de página graves Son los N paquetes principales con la mayor cantidad de fallas de página graves desde la última recopilación.