perf (auch perf_events) ist das offizielle Performance-Analyse-Werkzeug des Linux-Kernels. Es nutzt die Hardware-Leistungszähler der CPU (PMU) und Kernel-Tracepoints, um zu messen, wo ein Programm Zeit verbringt — vom einfachen Event-Zählen bis zur detaillierten Aufruf-Analyse mit Call-Graphen.
Die wichtigsten Unterbefehle
perf list # verfügbare Events auflisten
perf stat ./programm # Events zählen (Zyklen, Instructions, Cache-Misses)
perf record ./programm # Sampling: Samples in perf.data schreiben
perf report # gesammelte Daten analysieren
perf top # Live-Ansicht wie top, nach CPU-Anteil sortiert
Praxis-Beispiele
perf statzeigt standardmäßig Zyklen, Instructions, Cache-Misses und Branch-Misses; mit-ewählt man eigene Events:perf stat -e cycles,instructions,cache-misses ./programm- Sampling mit Call-Graph:
perf record -g ./programm—perf report --tuiöffnet danach die interaktive Hotspot-Ansicht - An einen laufenden Prozess anhängen:
perf top -p <PID>oderperf record -p <PID> - Sampling-Frequenz setzen:
perf record -F 99 ./programm(99 Hz, bewährt für Aufruf-Profile) - Mit
perf record -gundperf scriptlassen sich Flamegraphs erzeugen (perf script | flamegraph.pl) perf tracezeigt Systemaufrufe ähnlich wiestrace,perf schedanalysiert den Scheduler
Abgrenzung
Während strace-Befehle Systemaufrufe verfolgt und Valgrind-Befehle Speicherfehler finden, ist perf der Standard für CPU-Profile: Es misst die Hardware-Events direkt am Prozess und im Kernel, meist mit geringem Overhead.
Verwandte Grundlagen: ltrace-Befehle (Bibliotheksaufrufe), readelf-Befehle (ELF-Struktur).