O serviço nativo do Watchdog registra dados de desempenho de E/S desde a inicialização inicial durante a inicialização do sistema. O serviço nativo descarta os dados de desempenho coletados no relatório de bugs. Os fornecedores podem consultar o serviço nativo por dumpsys para despejar os dados coletados ou iniciar uma sessão de coleta personalizada para depuração.
Frequência da 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 um (1) segundo durante a inicialização do sistema e uma vez a cada um (1) minuto após a inicialização.
- Em builds de usuário, o Watchdog coleta dados de desempenho a cada 20 segundos durante a inicialização do sistema e a cada dois (2) minutos após a conclusão da 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 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:é possível especificar o período de pesquisa, a duração máxima e fazer a filtragem por pacotes.
Despejo de dados de performance
Quando um bugreport é capturado, o serviço nativo do Watchdog descarta os dados de desempenho coletados no bugreport. Os fornecedores podem consultar o serviço nativo usando o comando dumpsys abaixo para fazer o dump dos dados de desempenho coletados. Consulte a seção Como entender o relatório de dados de performance para saber mais.
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 do Watchdog para coletar dados de desempenho personalizados 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 coleta personalizada
Confira abaixo o comando para iniciar uma sessão de coleta de dados de desempenho personalizada:
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 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 de coleta de dados de desempenho personalizados. 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 gerar o perfil. Quando fornecidos, a coleta de dados de performance é limitada a esses pacotes. Caso contrário, a coleta de dados de desempenho é 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 segundos, duração máxima
da 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 despejar a sessão de coleta personalizada
Depois de gravar o uso de E/S de um app ou serviço de interesse, os fornecedores precisam interromper a
sessão de coleta de dados de desempenho personalizados para descartar os dados coletados. Esse comando interrompe a
coleta de dados de desempenho personalizados e descarta 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 de dumpsys podem ser armazenados 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 exemplo de relatório de dados de performance a seguir:
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 bugreport, executar um comando dumpsys do Watchdog sem argumentos ou interromper uma sessão de coleta personalizada, o serviço nativo do Watchdog descarta 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 de coleta de ativação | Fornece informações sobre a sessão de coleta de dados de desempenho de ativação quando o sistema é ativado após a suspensão. |
Informações de coleta de dados de troca de usuário | Fornece informações sobre a sessão de coleta de dados de desempenho da troca de usuário quando há uma troca de usuário. |
Informações de coleta periódica | Fornece informações sobre a sessão periódica de coleta de desempenho que começa após a conclusão da inicialização. |
Relatório de performance no momento da inicialização | Contém dados de desempenho coletados durante a inicialização do sistema. Esses dados persistem na memória até o desligamento do sistema, de modo que são armazenados em todos os relatórios. |
Relatório de desempenho de ativação | Contém dados de performance coletados durante a ativação. Esses dados são persistentes na memória até o desligamento do sistema. Por isso, eles são armazenados em todos os relatórios. |
Relatório de desempenho da troca de usuário | Contém dados de performance coletados durante a troca do usuário. Esses dados persistem na memória até o desligamento do sistema, de modo que são armazenados em todos os relatórios. |
Relatório de desempenho de E/S dos últimos N minutos | Contém dados de performance 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 coleta 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/porcentagem de espera de E/S da CPU | Tempo absoluto da CPU e porcentagem do tempo total da CPU gasto em alternância de contexto ou 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 inatividade da CPU | Tempo total de CPU gasto em inatividade. |
Tempo de espera de E/S da CPU | Tempo total que a CPU gastou aguardando operações de E/S. |
Número de trocas de contexto | Número de mudanças de CPU de um processo ou linha de execução para outro. |
Número de processos/porcentagem de E/S bloqueados | Número total de processos bloqueados aguardando E/S e porcentagem de processos bloqueados aguardando E/S desde a última coleta. |
Tempos de CPU dos N principais |
Os N principais pacotes que consumiram mais tempo de CPU desde a última coleta:
|
Principais leituras de E/S de armazenamento N |
Os N pacotes principais que leram mais 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 |
Principais gravações de E/S de armazenamento N | Os N pacotes principais que gravaram mais dados no disco desde a última coleta. Cada linha contém campos semelhantes aos das N principais leituras. |
Principais UIDs N de entrada/saída em espera | Os N pacotes principais com a maioria das tarefas de E/S em espera.
|
Principais N falhas de página | Os N principais pacotes com as falhas de página mais importantes desde a última coleta. |