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 introdurre 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 fiamma 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.
I frame sono di forma rettangolare e hanno tutti 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 utilizza la CPU in modo intensivo eseguito durante l'esecuzione di una funzione definisce il tempo di CPU autonomo:
Pseudocodice della funzione Tempo CPU auto
(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 frame e allinearli a sinistra, mantenendo inalterate le sequenze di chiamate. Se vuoi, 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 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 gli stack di chiamate per
foo1
efoo2
sono stati conservati, anche se lo stack di chiamate che inizia confoo2
è ora accanto al frame perfoo1
.
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 assegnano un nome a 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 del tempo CPU autonomo per la funzione denominata nel frame.
Ad esempio, sotto il frame
foo1
, 1,5 unità sono vuote e 2,5 unità sono occupate 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, le larghezze dei frame diminuiscono perché il tempo di CPU totale di un chiamato non può mai essere superiore al tempo di CPU totale del chiamante. Questo comportamento è ciò che causa 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
- Mettere a fuoco il grafico a fiamme
- Confrontare i profili