Raccogli i dati sulle prestazioni

Il servizio nativo di watchdog registra i dati sulle prestazioni di I/O sin dall'inizio durante l'avvio del sistema. Il servizio nativo scarica i dati sulle prestazioni raccolti nella segnalazione di bug. I fornitori possono interrogare il servizio nativo tramite dumpsys per eseguire il dump dei dati raccolti o avviare una sessione di raccolta personalizzata per il debug.

Frequenza di raccolta dati

La frequenza della raccolta dei dati sulle prestazioni varia in base al tipo di build.

  • Nelle build userdebug o eng, Watchdog raccoglie i dati sulle prestazioni una volta ogni (1) secondo durante l'avvio del sistema e una volta ogni (1) minuto dopo il completamento dell'avvio.
  • Nelle build degli utenti, Watchdog raccoglie i dati sulle prestazioni una volta ogni 20 secondi durante l'avvio del sistema e una volta ogni due (2) minuti dopo il completamento dell'avvio.

Scarica i dati sulle prestazioni

Quando viene acquisita una segnalazione di bug, il servizio nativo di Watchdog scarica i dati sulle prestazioni raccolti nella segnalazione di bug. I fornitori possono interrogare il servizio nativo tramite il comando dumpsys riportato di seguito per eseguire il dump dei dati sulle prestazioni raccolti. Consulta la sezione Informazioni sul report sui dati sul rendimento per i dettagli sul report.

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

Raccogliere dati sulle prestazioni per il debug

I fornitori possono utilizzare il servizio nativo Watchdog per raccogliere dati personalizzati sulle prestazioni a scopo di debug. Ad esempio, per comprendere l'utilizzo I/O di un'app o di un servizio, i fornitori possono eseguire una raccolta dati personalizzata sulle prestazioni che profila l'utilizzo I/O di un elenco specifico di pacchetti o dell'intero sistema.

Avvia la sessione di raccolta personalizzata

Di seguito è riportato il comando per avviare una sessione di raccolta dati sulle prestazioni personalizzata:

$ adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --start_perf [--interval <seconds>] [--max_duration <seconds>] [--filter_packages <package_name>,<package_name>,...]
  • --start_perf . Avvia una sessione di raccolta dati sulle prestazioni personalizzata.
  • --interval <seconds> . Specifica l'intervallo di profilazione. Per impostazione predefinita, l'intervallo è di 30 secondi.
  • --max_duration <seconds> . Specifica la durata massima della sessione di raccolta dei dati sulle prestazioni personalizzate. Se la sessione non viene interrotta manualmente, la sessione verrà interrotta e i dati raccolti verranno eliminati dopo tale periodo. Per impostazione predefinita, la durata massima è 30 minuti.
  • --filter_packages <package_name>,<package_name>,... . Specifica un elenco separato da virgole di nomi di pacchetti da profilare. Quando fornita, la raccolta dei dati sulle prestazioni è limitata a questi pacchetti. Altrimenti, la raccolta dei dati sulle prestazioni viene eseguita per tutti i pacchetti nel sistema.

Ad esempio, il comando seguente avvia una raccolta dati personalizzata sulle prestazioni con un intervallo di profilazione di 10 seconds , una durata massima di raccolta di 1 hour e limita la profilazione a com.google.android.car.kitchensink e com.google.android.apps.maps pacchetti 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

Arresta e scarica la sessione di raccolta personalizzata

Dopo aver registrato l'utilizzo I/O di un'app o di un servizio di interesse, i fornitori devono interrompere la sessione di raccolta dei dati sulle prestazioni personalizzate per eseguire il dump dei dati raccolti.

Il comando seguente interrompe la raccolta dei dati sulle prestazioni personalizzate e scarica i dati raccolti in /tmp/carwatchdog_dump.txt :

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

Aiuto Dumpsys

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

Comprendere il rapporto sui dati sul rendimento

Di seguito è riportato un esempio di rapporto sui dati sulle prestazioni:

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

Quando si acquisisce una segnalazione di bug, si esegue un comando dumpsys di Watchdog senza argomenti o si interrompe una sessione di raccolta personalizzata, il servizio nativo di Watchdog scarica un report sui dati sulle prestazioni simile al report precedente.

Il report contiene i dati raccolti durante l'avvio del sistema e gli ultimi N minuti prima della generazione del report.

  • Boot-time collection information . Fornisce informazioni sulla sessione di raccolta dei dati sulle prestazioni all'avvio.
  • Periodic collection information . Fornisce informazioni sulla sessione periodica di raccolta delle prestazioni che inizia dopo il completamento dell'avvio.
  • Boot-time I/O performance report . Contiene i dati sulle prestazioni raccolti durante l'avvio del sistema. Questi dati sono persistenti in memoria fino all'arresto del sistema, quindi i dati vengono scaricati su tutti i report.
  • Last N minutes I/O performance report . Contiene i dati sulle prestazioni raccolti (dalla sessione di raccolta periodica) negli ultimi N minuti prima della generazione del report.
  • Collection duration . Durata totale della raccolta dei dati sulle prestazioni.
  • Number of collections . Numero totale di raccolte riportate in un singolo report.

Ciascuna raccolta riportata nel rapporto può contenere tutte o alcune delle sezioni seguenti. Le statistiche riportate in ciascuna raccolta rappresentano il delta dall'ultima raccolta, ad eccezione delle statistiche che sono istantanee (ad esempio, non aggregate dall'avvio del sistema).

  • CPU I/O wait time/percent . Tempo CPU assoluto e percentuale del tempo CPU totale impiegato nel cambio di contesto o nell'attesa dovuta a operazioni di I/O dall'ultima raccolta.
  • Number of I/O blocked processes/percent . Numero totale di processi bloccati in attesa di I/O e percentuale di processi bloccati in attesa di I/O dall'ultima raccolta.
  • Top N Reads . I primi N pacchetti che leggono la maggior parte dei dati dal disco dall'ultima raccolta.
    • Ogni riga contiene l'ID utente, il nome del pacchetto, il numero totale di byte letti in modalità primo piano rispetto alla modalità background, la percentuale di byte tra tutte le letture in modalità primo piano rispetto alla modalità background nel sistema, il numero totale di chiamate fsync effettuate in modalità primo piano rispetto alla modalità background, e percentuale di chiamate fsync tra tutte le chiamate fsync in modalità primo piano e in modalità background effettuate nel sistema.
  • Top N Writes . I primi N pacchetti che hanno scritto la maggior parte dei dati su disco dall'ultima raccolta.
    • Ogni riga contiene campi simili a quelli di Top N Reads .
  • Top NI/O waiting UIDs . I primi N pacchetti con il maggior numero di attività di I/O in attesa.
    • Ogni riga di livello superiore contiene l'ID utente, i nomi dei pacchetti, il numero e la percentuale di attività possedute dal pacchetto in attesa di I/O.
    • Le righe di livello interno contengono le informazioni di attesa I/O per i processi principali posseduti dal pacchetto.
  • Top N major page faults . I primi N pacchetti con i maggiori errori di pagina dall'ultima raccolta.
    • Ogni riga di livello superiore contiene l'ID utente, i nomi dei pacchetti, il numero e la percentuale dei principali errori di pagina attribuiti al pacchetto.
    • Le righe di livello interno contengono le informazioni principali sugli errori di pagina per i processi principali posseduti dal pacchetto.
  • Number of major page faults since last collection .
  • Percentage of change in major page faults since last collection .