Grafici a fiamme
Cloud Profiler mostra i dati di profilazione utilizzando Flame Graphs. A differenza di alberi e grafici, i grafici a fiamma utilizzano in modo efficiente lo spazio sullo schermo rappresentando una grande quantità di informazioni in un formato compatto e leggibile.
Per presentare i grafici a fiamme, questa pagina illustra come convertire un albero in un grafico a fiamme e riassume le caratteristiche principali di questi grafici.
Creazione di un grafico a fiamme
Per creare un grafico a fiamme da un albero, completa i passaggi illustrati nel diagramma seguente:
Rimuovi dall'albero le frecce che indicano le chiamate di funzione.
Sostituisci ogni nodo ad albero con un frame.
Le cornici hanno una forma rettangolare e tutte le cornici hanno la stessa altezza. Nell'esempio di questa pagina, il tempo di CPU totale utilizzato dalla funzione denominata nel frame determina la larghezza del frame.
Lo pseudocodice di ciascuna funzione è descritto nella tabella seguente. Il lavoro che richiede un uso intensivo della CPU durante l'esecuzione di una funzione definisce il tempo di CPU autonomo:
Pseudocodice della funzione tempo di CPU autonomo
(secondi)tempo di CPU totale
(secondi)func main(): foo1() foo2() // CPU intensive work // for 2 seconds
2 4 + 3 + 2 = 9 func foo1(): bar() // CPU intensive work // for 1.5 seconds
1,5 2,5 + 1,5 = 4 func foo2(): bar() // CPU intensive work // for 0.5 seconds
0,5 2,5 + 0,5 = 3 func bar(): // CPU intensive work // for 2.5 seconds
2,5 2,5 Il passaggio successivo consiste nel rimuovere lo spazio verticale tra i fotogrammi e allinea a sinistra i frame, conservando le sequenze di chiamata. Se vuoi, puoi definire una combinazione di colori e colorare le cornici in base alla definizione. Ad esempio, puoi colorare i frame in base al pacchetto, al tempo della CPU totale, al tempo della CPU autonomo o a una misura diversa.
Dopo aver rimosso gli spazi bianchi in eccesso e aver colorato i frame in base al tempo CPU auto, il grafico a forma di fiamma ora viene visualizzato come segue:
Tieni presente che le chiamate si sovrappongono per
foo1
efoo2
sono state conservate, anche se lo stack di chiamate che inizia confoo2
viene adesso accanto al frame difoo1
.
Riepilogo
Questo semplice esempio illustra quanto segue:
- I grafici a fiamma sono una rappresentazione compatta di un albero e puoi ricreare un impilamento delle chiamate tracciando i frame dall'alto verso il basso.
- I frame chiamano una funzione e la larghezza del frame è la misura relativa
del tempo di CPU totale della funzione.
In questo esempio, poiché il tempo totale della CPU di
foo2
è un terzo del tempo totale della CPU dimain
, il frame difoo2
è un terzo della larghezza del frame dimain
. - La larghezza dello spazio vuoto sotto un frame è la misura relativa di
il tempo di CPU autonomo per la funzione denominata nel frame.
Ad esempio, sotto il frame
foo1
, 1,5 unità sono vuote e 2,5 unità sono occupati dabar
. Pertanto, il tempo di CPU autonomo difoo1
è equale al 37,5% del tempo di CPU totale, ovvero 1,5 secondi. Man mano che segui uno stack di chiamate, la larghezza dei frame diminuisce poiché Il tempo di CPU totale di un chiamante non può mai essere superiore al tempo di CPU totale del chiamante. È questo il comportamento che determina la forma della fiamma.
Nell'esempio,
foo1
chiamabar
e il tempo di CPU totale difoo1
è definito come il tempo di CPU totale dibar
più il tempo di CPU autonomo difoo1
. Pertanto, il tempo di CPU totale dibar
non può essere superiore al tempo di CPU totale difoo1
.
Passaggi successivi
- Seleziona i profili da analizzare
- Interagire con il grafico a fiamme
- Filtrare il grafico a fiamme
- Metti a fuoco il grafico a fiamme
- Confrontare i profili