Performante Code-Pfad-Analyse mit Flame-Graphen

Funktionsaufrufe lassen sich auf verschiedene Arten visualisieren. Ein Flame Graph ist eine besonders performante Variante, die nur Informationen zum Funktions-Stack erfasst und visuell aufbereitet.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 1 Min.
Von
  • Robert Lippert

Auch besonders umfangreiche Anwendungen lassen sich hinsichtlich ihrer Auswirkungen auf die CPU grafisch analysieren. Wo DTrace an seine Grenzen stößt, kann ein Flame Graph dafür sorgen, dass sich wichtige Informationen noch überblicken lassen. Brendan Gregg setzt sich im DTrace-Blog mit verschiedenen Möglichkeiten zur Auswertung von Daten aus besonders großen Umgebungen auseinander. Für die Analyse relevanter Code-Pfade hat er solche Flame Graphs für eine geeignete visuelle Aufbereitung gesampelter Stack-Traces identifiziert.

Der Flame Graph visualisiert die Auswirkungen einer MySQL auf die CPU.

(Bild: Brendan Gregg auf dtrace.org)

Zur Abbildung:

  • Jede Box repräsentiert eine Funktion im Stack.
  • Die y-Achse gibt die Stack-Tiefe an. Unterhalb von Funktionen stehen deren Eltern-Funktionen.
  • Die x-Achse gibt die Anzahl der Samples wieder, nicht das Verstreichen der Zeit.
  • Die Breite der Boxen zeigt an, wie viel CPU-Zeit eine Funktion verbraucht hat (sei es, weil sie langsam ist, oder nur besonders häufig aufgerufen wurde).

Diese Art der Darstellung biete sich dann an, wenn eine hohe Anzahl gesampelter Stack-Daten aufgenommen wurde und das Tracing der Funktionsaufrufe für zeitlich geordnete Visualisierungen (wie Call-Graphen nach Art von Neelakanth Nadgir) zu aufwändig wäre. Damit biete sich ein Flame Graph vor allem für eine Quantifizierung der Code-Pfade an – anstelle die Funktionen zu verfolgen, genüge es, den Funktions-Stack zu samplen. (rl)