Flame-Diagramme

Cloud Profiler zeigt Profildaten in Form von Flame-Diagrammen an. Im Gegensatz zu Baumdiagrammen und Grafiken nutzen Flame-Diagramme den Bildschirmbereich effizient aus, da sie eine große Menge an Informationen in einem kompakten und lesbaren Format darstellen.

Zur Einführung in Flame-Diagramme wird auf dieser Seite veranschaulicht, wie ein Baumdiagramm in ein Flame-Diagramm umgewandelt wird. Außerdem werden die wichtigsten Merkmale von Flame-Diagrammen zusammengefasst.

Flame-Diagramm erstellen

Führen Sie die im folgenden Diagramm dargestellten Schritte aus, um ein Baumdiagramm in ein Flame-Diagramm umzuwandeln:

Flame-Diagramm erstellen

  1. Entfernen Sie die Pfeile, die auf Funktionsaufrufe hinweisen, aus dem Baumdiagramm.

  2. Ersetzen Sie jeden Baumknoten durch einen Frame.

    Frames haben eine rechteckige Form und immer die gleiche Höhe. Für das Beispiel auf dieser Seite wird die Frame-Breite durch die CPU-Gesamtzeit bestimmt, die von der im Frame genannten Funktion verwendet wird.

    Der Pseudocode für die einzelnen Funktionen wird in der folgenden Tabelle beschrieben. Die eigene CPU-Zeit wird durch die CPU-intensive Arbeit definiert, die während dem Ausführen einer Funktion aufgewendet wird:

    Pseudocode der Funktion Eigene CPU-Zeit ("self")
    (Sekunden)
    CPU-Gesamtzeit ("total")
    (Sekunden)
    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. Der nächste Schritt besteht darin, den vertikalen Abstand zwischen den Frames zu entfernen und die Frames linksbündig auszurichten, ohne die Aufrufsequenzen zu verändern. Optional können Sie ein Farbschema definieren und die Frames entsprechend der Definition farblich darstellen. Sie können Frames beispielsweise nach Paket, CPU-Gesamtzeit, eigene CPU-Zeit oder nach einem anderen Messwert farblich hervorheben.

    Nachdem die überschüssigen Leerräume entfernt und die Frames farblich nach der eigenen CPU-Zeit hervorgehoben wurden, sieht das Flame-Diagramm nun so aus:

    Detaillierte Darstellung des Flame-Diagramms

    Beachten Sie, dass die Aufrufstacks für foo1 und foo2 beibehalten wurden, obwohl der Aufrufstack, der mit foo2 beginnt, jetzt neben dem Frame für foo1 angezeigt wird.

Fazit

Mit diesem einfachen Beispiel wird Folgendes veranschaulicht:

  • Flame-Diagramme sind eine kompakte Darstellung eines Baumdiagramms. Aufrufstacks können neu erstellt werden. Hierzu folgen Sie den Frames von oben nach unten.
  • Frames benennen eine Funktion; die Frame-Breite ist das relative Maß für die CPU-Gesamtzeit dieser Funktion. In diesem Beispiel hat der Frame für foo2 ein Drittel der Breite des Frames für main, da die CPU-Gesamtzeit von foo2 ein Drittel der CPU-Gesamtzeit von main beträgt.
  • Die Breite des leeren Bereichs unter einem Frame ist das relative Maß für die eigene CPU-Zeit der im Frame genannten Funktion. Beispielsweise sind 1,5 Einheiten unter dem Frame foo1 leer und 2,5 Einheiten werden von bar belegt. Daher beträgt die eigene CPU-Zeit von foo1 37,5 % der CPU-Gesamtzeit bzw. 1,5 s.
  • Wenn Sie einem Aufrufstack folgen, nimmt die Breite der Frames ab, da die CPU-Gesamtzeit eines Aufgerufenen niemals mehr als die CPU-Gesamtzeit des Aufrufers betragen kann. Dieses Verhalten verursacht die Flammenform.

    Im Beispiel wird bar von foo1 aufgerufen und die CPU-Gesamtzeit von foo1 wird als die CPU-Gesamtzeit von bar plus die eigene CPU-Zeit von foo1 definiert. Daher kann die CPU-Gesamtzeit von bar nicht höher als die CPU-Gesamtzeit von foo1 sein.

Nächste Schritte