Colete dados de desempenho

O serviço nativo 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 de bug. Os fornecedores podem consultar o serviço nativo por meio de 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 construção.

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

Despejar dados de desempenho

Quando um relatório de bug é capturado, o serviço nativo Watchdog despeja os dados de desempenho coletados no relatório de bug. Os fornecedores podem consultar o serviço nativo por meio do comando dumpsys abaixo para despejar os dados de desempenho coletados. Consulte a seção Entendendo o relatório de dados de desempenho para obter detalhes sobre o relatório.

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

Colete dados de desempenho para depuração

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

Iniciar sessão de coleta personalizada

Abaixo é mostrado 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 desempenho.
  • --interval <seconds> . Especifica o intervalo de criação de perfil. Por padrão, o intervalo é de 30 segundos.
  • --max_duration <seconds> . Especifica a duração máxima da sessão personalizada de coleta de dados de desempenho. Se a sessão não for interrompida manualmente, a sessão 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írgula de nomes de pacotes para perfilar. Quando fornecido, a coleta de dados de desempenho fica limitada a esses pacotes. Caso contrário, a coleta de dados de desempenho será feita para todos os pacotes do sistema.

Por exemplo, o comando abaixo inicia uma coleta de dados de desempenho personalizada com um intervalo de criação de perfil de 10 seconds , duração máxima da coleta de 1 hour e limita a criação de perfil a com.google.android.car.kitchensink e com.google.android.apps.maps Pacotes 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 descartar sessão de coleta personalizada

Depois de registrar o uso de E/S de um aplicativo ou serviço de interesse, os fornecedores devem interromper a sessão personalizada de coleta de dados de desempenho para despejar os dados coletados.

O comando a seguir interrompe a coleta de dados de desempenho personalizados 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

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

Entenda o relatório de dados de desempenho

Abaixo é mostrado um exemplo de relatório de dados de desempenho:

$ 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%

Ao capturar um relatório de bug, executar um comando dumpsys do Watchdog sem quaisquer argumentos ou interromper uma sessão de coleta personalizada, o serviço nativo do 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 os últimos N minutos antes da geração do relatório.

  • Boot-time collection information . Fornece informações sobre a sessão de coleta de dados de desempenho no momento da inicialização.
  • Periodic collection information . Fornece informações sobre a sessão periódica de coleta de desempenho que inicia após a conclusão da inicialização.
  • Boot-time I/O performance report . Contém dados de desempenho coletados durante a inicialização do sistema. Esses dados são persistentes na memória até o encerramento do sistema, portanto, os dados são despejados em todos os relatórios.
  • Last N minutes I/O performance report . 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.
  • Collection duration . Duração total da coleta de dados de desempenho.
  • Number of collections . Número total de coletas informadas em um único relatório.

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

  • CPU I/O wait time/percent . Tempo absoluto de CPU e porcentagem do tempo total de CPU gasto na alternância de contexto ou na espera devido a operações de E/S desde a última coleta.
  • Number of I/O blocked processes/percent . Número total de processos bloqueados aguardando E/S e percentual de processos bloqueados aguardando E/S desde a última coleta.
  • Top N Reads . Os N principais pacotes que leem a maioria 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 versus 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 no modo de primeiro plano versus modo de segundo plano, e porcentagem de chamadas fsync em todas as chamadas fsync no modo de primeiro plano versus chamadas fsync no modo de segundo plano feitas no sistema.
  • Top N Writes . Os N principais pacotes que gravaram a maioria dos dados no disco desde a última coleta.
    • Cada linha contém campos semelhantes aos de Top N Reads .
  • Top NI/O waiting UIDs . Os N principais pacotes com mais tarefas em espera de E/S.
    • Cada linha de nível superior contém o ID do usuário, nomes de pacotes, número e porcentagem de tarefas pertencentes ao pacote aguardando 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.
  • Top N major page faults . Os N principais pacotes com as maiores falhas de página desde a última coleção.
    • Cada linha de nível superior contém o ID do usuário, nomes de pacotes, número e porcentagem das principais falhas de página atribuídas ao pacote.
    • As linhas de nível interno contêm as principais informações sobre falhas de página dos principais processos pertencentes ao pacote.
  • Number of major page faults since last collection .
  • Percentage of change in major page faults since last collection .