Una volta raccolte più tracce utilizzando ProfilingManager, esplorarle
singolarmente per trovare problemi di prestazioni diventa impraticabile. L'analisi delle tracce collettive
ti consente di eseguire query simultaneamente su un set di dati di tracce per:
- Identifica le regressioni delle prestazioni più comuni.
- Calcola le distribuzioni statistiche (ad esempio, latenza P50, P90, P99).
- Trova pattern in più tracce.
- Trova le tracce anomale per comprendere ed eseguire il debug dei problemi di prestazioni.
Questa sezione mostra come utilizzare Perfetto Python Batch Trace Processor per analizzare le metriche di avvio in un insieme di tracce archiviate localmente e individuare le tracce anomale per un'analisi più approfondita.
Progettare la query
Il primo passaggio per eseguire un'analisi collettiva consiste nel creare una query PerfettoSQL.
In questa sezione, presentiamo una query di esempio che misura la latenza di avvio dell'app.
Nello specifico, puoi misurare la durata da activityStart al primo
frame generato (la prima occorrenza della sezione Choreographer#doFrame) per
misurare la latenza di avvio dell'app che rientra nel controllo dell'app. La figura 1 mostra
la sezione da interrogare.
CREATE OR REPLACE PERFETTO FUNCTION find_slices(pattern STRING) RETURNS
TABLE (name STRING, ts LONG, dur LONG) AS
SELECT name,ts,dur FROM slice WHERE name GLOB $pattern;
CREATE OR REPLACE PERFETTO FUNCTION generate_start_to_end_slices(startSlicePattern STRING, endSlicePattern STRING, inclusive BOOL) RETURNS
TABLE(name STRING, ts LONG, dur LONG) AS
SELECT name, ts, MIN(startToEndDur) as dur
FROM
(SELECT S.name as name, S.ts as ts, E.ts + IIF($inclusive, E.dur, 0) - S.ts as startToEndDur
FROM find_slices($startSlicePattern) as S CROSS JOIN find_slices($endSlicePattern) as E
WHERE startToEndDur > 0)
GROUP BY name, ts;
SELECT ts,name,dur from generate_start_to_end_slices('activityStart','*Choreographer#doFrame [0-9]*', true)
Puoi eseguire la query all'interno della UI di Perfetto e poi utilizzare i risultati della query per generare una traccia di debug (Figura 2) e visualizzarla all'interno della cronologia (Figura 3).
Configura l'ambiente Python
Installa Python sulla tua macchina locale e le librerie richieste:
pip install perfetto pandas plotly
Crea lo script di analisi delle tracce collettive
Il seguente script di esempio esegue la query in più tracce utilizzando BatchTraceProcessor di Perfetto per Python.
from perfetto.batch_trace_processor import BatchTraceProcessor
import glob
import plotly.express as px
traces = glob.glob('*.perfetto-trace')
if __name__ == '__main__':
with BatchTraceProcessor(traces) as btp:
query = """
CREATE OR REPLACE PERFETTO FUNCTION find_slices(pattern STRING) RETURNS
TABLE (name STRING, ts LONG, dur LONG) AS
SELECT name,ts,dur FROM slice WHERE name GLOB $pattern;
CREATE OR REPLACE PERFETTO FUNCTION generate_start_to_end_slices(startSlicePattern STRING, endSlicePattern STRING, inclusive BOOL) RETURNS
TABLE(name STRING, ts LONG, dur LONG) AS
SELECT name, ts, MIN(startToEndDur) as dur
FROM
(SELECT S.name as name, S.ts as ts, E.ts + IIF($inclusive, E.dur, 0) - S.ts as startToEndDur
FROM find_slices($startSlicePattern) as S CROSS JOIN find_slices($endSlicePattern) as E
WHERE startToEndDur > 0)
GROUP BY name, ts;
SELECT ts,name,dur / 1000000 as dur_ms from generate_start_to_end_slices('activityStart','*Choreographer#doFrame [0-9]*', true)
"""
df = btp.query_and_flatten(query)
violin = px.violin(df, x='dur_ms', hover_data='_path', title='startup time', points='all')
violin.show()
Comprendere lo script
Quando esegui lo script Python, vengono eseguite le seguenti azioni:
- Lo script esegue la ricerca nella directory locale di tutte le tracce Perfetto con suffisso
.perfetto-tracee le utilizza come tracce di origine per l'analisi. - Esegue una query di traccia collettiva che calcola il sottoinsieme del tempo di avvio
corrispondente al tempo dalla sezione di traccia
activityStartal primo frame generato dalla tua app. - Traccia la latenza in millisecondi utilizzando un grafico a violino per visualizzare la distribuzione dei tempi di avvio.
Interpretare i risultati
Dopo aver eseguito lo script, viene generato un grafico. In questo caso, il grafico mostra una distribuzione bimodale con due picchi distinti (Figura 4).
Poi, trova la differenza tra le due popolazioni. In questo modo puoi esaminare le singole tracce in modo più dettagliato. In questo esempio, il grafico è configurato in modo che quando passi il mouse sopra i punti dati (latenze), puoi identificare i nomi dei file di traccia. Puoi quindi aprire una delle tracce che fanno parte del gruppo con latenza elevata.
Quando apri una traccia dal gruppo con latenza elevata (Figura 5), troverai una
sezione aggiuntiva denominata MyFlaggedFeature in esecuzione durante l'avvio (Figura 6).
Al contrario, la selezione di una traccia dalla popolazione a latenza inferiore (il picco più a sinistra)
conferma l'assenza della stessa sezione (Figura 7). Questo confronto
indica che un flag di funzionalità specifico, attivato per un sottoinsieme di utenti, attiva
la regressione.
Questo esempio mostra uno dei tanti modi in cui puoi utilizzare l'analisi delle tracce collettiva. Altri casi d'uso includono l'estrazione di statistiche dal campo per valutare l'impatto, il rilevamento di regressioni e altro ancora.