User Tools

Site Tools


flame_graph

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
flame_graph [2026/05/13 08:12] – created msvoelkerflame_graph [2026/05/13 08:32] (current) – [CPU Performance Counter] msvoelker
Line 4: Line 4:
  
 Der Graph zeigt Namen von Funktionen in Kästchen übereinander an, wenn die untere die obere aufgerufen hat. Über die Breite der Kästchen zeigt der Graph, wie viel Zeit die Funktion eingenommen hat. Durch Klicken auf ein Kästchen lässt sich in dem Graph zoomen. Der Graph zeigt Namen von Funktionen in Kästchen übereinander an, wenn die untere die obere aufgerufen hat. Über die Breite der Kästchen zeigt der Graph, wie viel Zeit die Funktion eingenommen hat. Durch Klicken auf ein Kästchen lässt sich in dem Graph zoomen.
 +
 +Brendan Gregg beschreibt Flame Graphs ausführlich auf seiner Webseite: [[https://www.brendangregg.com/flamegraphs.html]].
  
 ===== Erstellen ===== ===== Erstellen =====
Line 27: Line 29:
 </code> </code>
  
-Der Aufruf nutzt den CPU Performance Counter ''cpu_clk_unhalted.thread_p'', misst für 10 Sekunden und schreibt die Daten im Binärformat in die Datei ''cksum.pmc''.+Der Aufruf nutzt den CPU Performance Counter ''cpu_clk_unhalted.thread_p'', misst für 10 Sekunden und schreibt die Daten im Binärformat in die Datei ''cksum.pmc''. Welche CPU Performance Counter verwendet werden muss, hängt von der CPU ab, siehe [[#cpu_performance_counter]].
  
 Nach der Messung müssen die Daten aufbereitet werden. Nach der Messung müssen die Daten aufbereitet werden.
Line 47: Line 49:
  
 {{ ::csum.graph.svg }} {{ ::csum.graph.svg }}
 +
 +===== CPU Performance Counter =====
 +
 +Die Namen des relevanten Performance Counter unterscheidert sich je nach CPU-Hersteller.
 +
 +  * AMD: ''ls_not_halted_cyc''
 +  * Intel: ''cpu_clk_unhalted.thread_p''
 +  * ARM: ''CPU_CYCLES''
 +
 +Die Auflistung stammt von Olivier Cochard-Labbé, der die auf seiner Webseite zeigt: [[https://bsdrp.net/documentation/technical_docs/performance#pmcstat]].
 +
 +Nicht jede CPU bietet die gleiche Menge an Performance Counter. Eine Liste der verfügbaren Performance Counter lässt sich mit pmcstat ausgeben.
 +
 +<code>
 +kldload -n hwpmc
 +pmcstat -L
 +...
 +br_misp_retired.taken
 +cpu_clk_thread_unhalted.one_thread_active
 +cpu_clk_thread_unhalted.ref_xclk
 +cpu_clk_thread_unhalted.ref_xclk_any
 +cpu_clk_unhalted.one_thread_active
 +cpu_clk_unhalted.ref_tsc
 +cpu_clk_unhalted.ref_xclk
 +cpu_clk_unhalted.ref_xclk_any
 +cpu_clk_unhalted.thread
 +cpu_clk_unhalted.thread_any
 +cpu_clk_unhalted.thread_p
 +cpu_clk_unhalted.thread_p_any
 +cycle_activity.cycles_l1d_pending
 +...
 +</code>
 +
 +===== Skript =====
  
 Das folgende Skript erstellt ein Flame Graph zu der Ausführung von iperf3. Es lässt die ersten 5 Sekunden aus, um die Effekte beim Start einer Verbindung außen vor zu lassen. Das folgende Skript erstellt ein Flame Graph zu der Ausführung von iperf3. Es lässt die ersten 5 Sekunden aus, um die Effekte beim Start einer Verbindung außen vor zu lassen.
flame_graph.1778659955.txt.gz · Last modified: by msvoelker