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 stat zeigt standardmäßig Zyklen, Instructions, Cache-Misses und Branch-Misses; mit -e wählt man eigene Events: perf stat -e cycles,instructions,cache-misses ./programm
  • Sampling mit Call-Graph: perf record -g ./programmperf report --tui öffnet danach die interaktive Hotspot-Ansicht
  • An einen laufenden Prozess anhängen: perf top -p <PID> oder perf record -p <PID>
  • Sampling-Frequenz setzen: perf record -F 99 ./programm (99 Hz, bewährt für Aufruf-Profile)
  • Mit perf record -g und perf script lassen sich Flamegraphs erzeugen (perf script | flamegraph.pl)
  • perf trace zeigt Systemaufrufe ähnlich wie strace, perf sched analysiert 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).