Coletar dados de performance

O serviço nativo de watchdog registra dados de desempenho de E/S desde a inicialização inicial durante a inicialização do sistema. O serviço nativo despeja os dados de desempenho coletados no relatório do bug. Os fornecedores podem consultar o serviço nativo via dumpsys para despejar os dados coletados ou iniciar uma sessão de coleta personalizada para depuração.

Frequência de coleta de dados

A frequência da coleta de dados de desempenho varia de acordo com o tipo de build.

  • Em builds userdebug ou eng, o Watchdog coleta dados de desempenho uma vez a cada (1) segundo durante a inicialização do sistema e uma vez a cada (1) minuto após a inicialização.
  • Nos builds do usuário, o Watchdog coleta dados de desempenho uma vez a cada 20 segundos durante a inicialização do sistema e a cada 2 (dois) minutos após a inicialização.

Eventos de coleta de dados

A criação de perfil baseada em amostra é realizada durante vários eventos do sistema (como inicialização do sistema, ativação do sistema e troca de usuário) e durante os últimos N minutos.

  • Eventos dos últimos N minutos antes da geração do relatório do bug:gerados durante uma janela contínua de 30 minutos.
  • Eventos de tempo de inicialização:gerados após a inicialização.
  • Eventos de troca de usuário:gerados após o início de uma troca de usuário.
  • Eventos de coleta personalizados:pode especificar o período de pesquisa, a duração máxima e filtrar por pacotes.

Despejar dados de desempenho

Quando um relatório de bug é capturado, o serviço nativo de watchdog despeja os dados de desempenho coletados no relatório do bug. Os fornecedores podem consultar o serviço nativo usando o comando dumpsys abaixo para despejar os dados de desempenho coletados. Consulte a seção Noções básicas sobre o relatório de dados de desempenho para saber detalhes sobre o relatório.

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

Coletar dados de desempenho para depuração

Os fornecedores podem usar o serviço nativo Watchdog para personalizar a coleta de dados de performance para fins de depuração. Por exemplo, para entender o uso de E/S de um app ou serviço, os fornecedores podem realizar uma coleta de dados de desempenho personalizada que cria um perfil do uso de E/S de uma lista específica de pacotes ou de todo o sistema.

Iniciar sessão de coleção personalizada

Confira abaixo o comando para iniciar uma sessão personalizada de coleta de dados de desempenho:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --start_perf [--interval <seconds>] [--max_duration <seconds>] [--filter_packages <package_name>,<package_name>,...]
  • --start_perf Inicia uma sessão personalizada de coleta de dados de performance.
  • --interval <seconds> Especifica o intervalo da criação de perfil. Por padrão, o intervalo é de 30 segundos.
  • --max_duration <seconds> Especifica a duração máxima da sessão de coleta de dados de desempenho personalizada. Se a sessão não for interrompida manualmente, ela será interrompida, e os dados coletados serão descartados após esse período. Por padrão, a duração máxima é de 30 minutos.
  • --filter_packages <package_name>,<package_name>... Especifica uma lista separada por vírgulas de nomes de pacotes para o perfil. Quando fornecido, a coleta de dados de desempenho é limitada a estes pacotes. Caso contrário, a coleta de dados de desempenho será feita para todos os pacotes no sistema.

Por exemplo, o comando abaixo inicia uma coleta de dados de desempenho personalizada com um intervalo de criação de perfil de 10 segundos, duração máxima de coleta de 1 hora e limita a criação de perfil aos pacotes com.google.android.car.kitchensink e 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

Parar e fazer o despejo de sessão de coleta personalizada

Depois de registrar o uso de E/S de um app ou serviço de interesse, os fornecedores precisam interromper a sessão personalizada de coleta de dados de desempenho para despejar os dados coletados. Esse comando interrompe a coleta de dados de desempenho personalizado e despeja os dados coletados em /tmp/carwatchdog_dump.txt:

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

Ajuda do Dumpsys

Para receber ajuda com o dumpsys:

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

Despejar no formato proto

Opcionalmente, os dados dumpsys podem ser despejados no formato proto:

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

Entender o relatório de dados de performance

Para saber mais, consulte o seguinte exemplo de relatório de dados de performance:

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%

Ao capturar um relatório de bug, executar um comando Watchdog dumpsys sem nenhum argumento ou interromper uma sessão de coleta personalizada, o serviço nativo Watchdog despeja um relatório de dados de desempenho semelhante ao relatório acima.

O relatório contém dados coletados durante a inicialização do sistema e nos últimos N minutos antes da geração do relatório.

Nome Descrição
Informações de coleta no momento da inicialização Fornece informações sobre a sessão de coleta de dados de desempenho no tempo de inicialização.
Informações sobre a coleta de horários de despertar Fornece informações sobre a sessão de coleta de dados de desempenho de ativação quando o sistema é reativado da suspensão.
Informações de coleta de troca de usuário Fornece informações sobre a sessão de coleta de dados de desempenho do interruptor do usuário quando há uma.
Informações de coleta periódicas Fornece informações sobre a sessão periódica de coleta de desempenho que é iniciada após a conclusão da inicialização.
Relatório de desempenho do tempo de inicialização Contém dados de desempenho coletados durante a inicialização do sistema. Esses dados persistem na memória até o encerramento do sistema. Portanto, os dados são descartados em todos os relatórios.
Relatório de desempenho de ativação Contém dados de desempenho coletados durante a ativação. Esses dados permanecem na memória até o encerramento do sistema. Portanto, eles são despejados em todos os relatórios.
Relatório de performance de troca de usuário Contém dados de performance coletados durante a troca do usuário. Esses dados persistem na memória até o encerramento do sistema. Portanto, os dados são descartados em todos os relatórios.
Relatório de desempenho de E/S dos últimos N minutos Contém dados de desempenho coletados (pela sessão de coleta periódica) durante os últimos N minutos antes da geração do relatório.
Duração da coleta Duração total da coleta de dados de performance.
Número de coleções Número total de coleções informadas em um único relatório.

Cada coleção informada no relatório pode conter todas ou algumas das seções abaixo. As estatísticas informadas em cada coleção são o delta desde a última coleta, exceto as estatísticas instantâneas (por exemplo, não agregadas desde a inicialização do sistema).

Nome Descrição
Tempo de espera/porcentagem de E/S da CPU Tempo de CPU absoluto e porcentagem do tempo total de CPU gasto na alternância de contexto ou em espera devido a operações de E/S desde a última coleta.
Tempo total de CPU Tempo total de CPU em milissegundos.
Tempo total de CPU ociosa Tempo total de CPU gasto em inatividade.
Tempo de espera de E/S da CPU Tempo total de CPU gasto aguardando operações de E/S.
Número de trocas de contexto Número de alternâncias de CPU de um processo ou linha de execução para outro.
Número de processos/porcentagem bloqueados de E/S Número total de processos bloqueados aguardando E/S e porcentagem de processos bloqueados aguardando E/S desde a última coleta.
Principais tempos de CPU do N

Principais pacotes N que consumiram mais tempo de CPU desde a última coleção:

  • Cada linha de nível superior contém o ID do usuário, o nome do pacote, o tempo de CPU, a porcentagem do tempo total de CPU e os ciclos da CPU.
  • As linhas de nível interno contêm o comando, o tempo de CPU, a porcentagem do tempo de CPU do UID e os ciclos de CPU.
Principais leituras de E/S de armazenamento N

Top N pacotes que leem a maior parte dos dados do disco desde a última coleta.

Cada linha contém o ID do usuário, nome do pacote, número total de bytes lidos no modo de primeiro plano em comparação com o modo de segundo plano, porcentagem de bytes em todas as leituras do modo de primeiro plano versus modo de segundo plano no sistema, número total de chamadas fsync feitas nesse modo versus modo em segundo plano e porcentagem de chamadas fsync em todas as chamadas fsync do modo de primeiro plano em comparação com o modo de segundo plano feitas no sistema.

Principais gravações de E/S de armazenamento N Top N pacotes que gravaram a maioria dos dados no disco desde a última coleta. Cada linha contém campos semelhantes aos das N principais leituras.
Principais UIDs em espera de N E/S

Principais N pacotes com mais tarefas em espera de E/S.

  • Cada linha de nível superior contém o ID do usuário, nomes de pacote, número e porcentagem de tarefas de propriedade do pacote que aguardam E/S.
  • As linhas de nível interno contêm as informações de espera de E/S para os principais processos pertencentes ao pacote.
Principais N falhas principais da página Principais N pacotes com o maior número de falhas de página graves desde a última coleção.