Grafici a fiamme
Cloud Profiler mostra i dati di profilazione utilizzando Flame Graphs. Diversamente da alberi e grafici, i grafici a fiamme sfruttano in modo efficiente lo spazio dello schermo poiché rappresentano una grande quantità di informazioni in un formato compatto e leggibile.
Per introdurre i grafici a fiamme, questa pagina illustra come convertire un albero in un grafico a fiamme e riassume le funzionalità principali dei grafici a fiamme.
Creazione di un grafico a fiamme
Per creare un grafico a fiamme da un albero, completa i passaggi illustrati nel seguente diagramma:
Rimuovi dall'albero le frecce che indicano le chiamate di funzione.
Sostituisci ogni nodo dell'albero con un frame.
Le cornici sono di forma rettangolare e tutte hanno la stessa altezza. Nell'esempio in questa pagina, il tempo di CPU totale utilizzato dalla funzione denominata nel frame determina la larghezza del frame.
Lo pseudocodice per ciascuna funzione è descritto nella seguente tabella. Il lavoro che richiede molta CPU durante l'esecuzione di una funzione definisce il tempo di CPU autonomo:
Pseudocodice della funzione tempo CPU autonomo
(secondi)tempo 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 frame e allineare a sinistra i frame, mantenendo le sequenze di chiamata. Facoltativamente, puoi definire una combinazione di colori e colorare i frame in base alla definizione. Ad esempio, puoi colorare i frame in base al pacchetto, al tempo di CPU totale, al tempo di CPU autonomo o a una misura diversa.
Dopo aver rimosso gli spazi bianchi in eccesso e la colorazione dei frame in base al tempo di CPU autonoma, il grafico a fiamme ora appare come segue:
Nota che gli stack di chiamate per
foo1
efoo2
sono stati conservati, anche se lo stack di chiamate che inizia confoo2
si trova ora accanto al frame perfoo1
.
Riepilogo
Questo semplice esempio illustra quanto segue:
- I grafici a fiamme sono una rappresentazione compatta di un albero e puoi ricreare uno stack di chiamate tracciando i frame dall'alto verso il basso.
- I frame assegnano il nome a una funzione e la larghezza del frame è la misura relativa del tempo di CPU totale di tale funzione.
In questo esempio, poiché il tempo di CPU totale di
foo2
è un terzo del tempo di CPU totale dimain
, il frame perfoo2
è un terzo della larghezza del frame permain
. - La larghezza dello spazio vuoto sotto un frame è la misura relativa del tempo di CPU autonomo per la funzione indicata nel frame.
Ad esempio, sotto il frame
foo1
, sono presenti 1,5 unità vuote e 2,5 unità sono occupate dabar
. Di conseguenza, il tempo di CPU autonomo difoo1
è pari al 37,5% del tempo di CPU totale, ovvero 1,5 s. Man mano che segui uno stack di chiamate, la larghezza dei frame diminuisce perché il tempo di CPU totale di un chiamante non può mai superare il tempo di CPU totale del chiamante. È da questo comportamento che si crea la forma della fiamma.
Nell'esempio,
foo1
chiamabar
e il tempo di CPU totale difoo1
viene 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
- Selezionare i profili da analizzare
- Interagire con il grafico delle fiamme
- Filtrare il grafico a fiamme
- Concentrare il grafico a fiamme
- Confrontare i profili