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:

Creazione di un grafico a fiamme.

  1. Rimuovi dall'albero le frecce che indicano le chiamate di funzione.

  2. 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

  3. 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:

    Immagine dettagliata del grafico a fiamme.

    Nota che gli stack di chiamate per foo1 e foo2 sono stati conservati, anche se lo stack di chiamate che inizia con foo2 si trova ora accanto al frame per foo1.

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 di main, il frame per foo2 è un terzo della larghezza del frame per main.
  • 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 da bar. Di conseguenza, il tempo di CPU autonomo di foo1 è 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 chiama bar e il tempo di CPU totale di foo1 viene definito come il tempo di CPU totale di bar più il tempo di CPU autonomo di foo1. Pertanto, il tempo di CPU totale di bar non può essere superiore al tempo di CPU totale di foo1.

Passaggi successivi