O serviço nativo do Watchdog registra dados de performance de E/S desde o início da inicialização durante a inicialização do sistema. O serviço nativo despeja os dados de performance coletados no relatório de bugs. Os fornecedores podem consultar o serviço nativo usando o 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 performance varia de acordo com o tipo de build.
- Em builds userdebug ou eng, o Watchdog coleta dados de performance uma vez a cada segundo (1) durante a inicialização do sistema e uma vez a cada minuto (1) após a conclusão da inicialização.
- Em builds de usuário, o Watchdog coleta dados de performance 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.
Eventos de coleta de dados
A criação de perfil com base em amostras é realizada durante vários eventos do sistema (como inicialização, ativação e troca de usuário) e durante a janela dos últimos N minutos.
- Eventos dos últimos N minutos antes da geração do relatório de bugs: 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: é possível especificar o período de pesquisa, a duração máxima e filtrar por pacotes.
Despejar dados de performance
Quando um relatório de bugs é capturado, o serviço nativo do Watchdog despeja os dados de performance coletados no relatório de bugs. Os fornecedores podem consultar o serviço nativo usando o comando dumpsys abaixo para despejar os dados de performance coletados. Consulte a seção sobre Sobre o relatório de dados de performance para mais detalhes.
adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default > /tmp/carwatchdog_dump.txtColetar dados de performance para depuração
Os fornecedores podem usar o serviço nativo do Watchdog para coletar dados de performance 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 performance 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 performance personalizada:
adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --start_perf [--interval <seconds>] [--max_duration <seconds>] [--filter_packages <package_name>,<package_name>,...]--start_perfinicia uma sessão de coleta de dados de performance personalizada.--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 performance personalizada. Se a sessão não for interrompida manualmente, ela será interrompida e os dados coletados serão descartados após essa duração. Por padrão, a duração máxima é de 30 minutos.--filter_packages <package_name>,<package_name>...especifica uma lista de nomes de pacotes separados por vírgulas para criar um perfil. Quando fornecida, a coleta de dados de performance é limitada a esses pacotes. Caso contrário, a coleta de dados de performance será feita para todos os pacotes no sistema.
Por exemplo, o comando abaixo inicia uma coleta de dados de performance 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 pacentes
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.mapsParar 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 performance personalizada para despejar os dados coletados. Esse comando interrompe a coleta de dados de performance personalizada e despeja os dados coletados em /tmp/carwatchdog_dump.txt:
adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --stop-perf > /tmp/carwatchdog_custom_dump.txtAjuda do Dumpsys
Para receber ajuda do dumpsys:
adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --helpDespejar no formato proto
Opcionalmente, os dados do dumpsys podem ser despejados no formato proto:
adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --protoSobre o relatório de dados de performance
Para saber mais, consulte o exemplo de relatório de dados de performance abaixo:
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 bugs, executar um comando dumpsys do Watchdog sem argumentos ou interromper uma sessão de coleta personalizada, o serviço nativo do Watchdog despeja um relatório de dados de performance semelhante ao 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.
| Item | Descrição |
|---|---|
| Informações de coleta de tempo de inicialização | Fornece informações sobre a sessão de coleta de dados de performance de tempo de inicialização. |
| Informações de coleta de ativação | Fornece informações sobre a sessão de coleta de dados de performance de ativação quando o sistema é ativado da suspensão. |
| Informações de coleta de troca de usuário | Fornece informações sobre a sessão de coleta de dados de performance de troca de usuário quando há uma troca de usuário. |
| Informações de coleta periódica | Fornece informações sobre a sessão de coleta de performance periódica que começa após a conclusão da inicialização. |
| Relatório de performance de tempo de inicialização | Contém dados de performance coletados durante a inicialização do sistema. Esses dados persistem na memória até o desligamento do sistema, então os dados são despejados em todos os relatórios. |
| Relatório de performance 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, então os dados 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 de usuário. Esses dados persistem na memória até o desligamento do sistema, então os dados são despejados em todos os relatórios. |
| Relatório de performance 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 coletas | Número total de coletas informadas em um único relatório. |
Cada coleta 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).
| Item | Descrição |
|---|---|
| Tempo/porcentagem de espera de E/S da CPU | Tempo absoluto da CPU e porcentagem do tempo total da CPU gasto na troca de contexto ou na 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 inativo | Tempo total de CPU gasto em inatividade. |
| Tempo de espera de E/S da CPU | Tempo total que a CPU passou esperando operações de E/S. |
| Número de trocas de contexto | Número de trocas de CPU de um processo ou linha de execução para outro. |
| Número/porcentagem de processos bloqueados de E/S | Número total de processos bloqueados esperando E/S e a porcentagem de processos bloqueados esperando E/S desde a última coleta. |
| Principais tempos de CPU N |
Principais pacotes N que consumiram mais tempo de CPU desde a última coleta:
|
| Principais leituras de E/S de armazenamento N |
Principais pacotes N que leram mais dados do disco desde a última coleta. Cada linha contém o ID do usuário, o nome do pacote, o número total de bytes lidos no modo em primeiro plano
em comparação com o modo em segundo plano, a porcentagem de bytes em todas as leituras do modo em primeiro plano em comparação com o
modo em segundo plano no sistema, o número total de chamadas |
| Principais gravações de E/S de armazenamento N | Principais pacotes N que gravaram mais dados no disco desde a última coleta. Cada linha contém campos semelhantes aos das principais leituras N. |
| Principais UIDs de espera de E/S N | Principais pacotes N com as tarefas de espera de E/S mais importantes.
|
| Principais falhas de página N | Principais pacotes N com as falhas de página mais importantes desde a última coleta. |