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:

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.

    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

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

    Immagine dettagliata del grafico a fiamme.

    Tieni presente che gli stack di chiamate per foo1 e foo2 sono stati conservati, anche se lo stack di chiamate che inizia con foo2 è ora accanto al frame per foo1.

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 di main, il frame di foo2 è un terzo della larghezza del frame di main.
  • 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 da bar. Pertanto, il tempo di CPU autonomo di foo1 è 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 chiama bar e il tempo di CPU totale di foo1 è 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