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:

Creazione di un grafico a fiamme.

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

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

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

    Immagine dettagliata del grafico a fiamme.

    Tieni presente che le chiamate si sovrappongono per foo1 e foo2 sono state conservate, anche se lo stack di chiamate che inizia con foo2 viene adesso accanto al frame di 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 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 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 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 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, 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 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