Linux-perf-Befehl
perf ist eine Sammlung von Werkzeugen zur Leistungsanalyse von Linux-Systemen, deren vollständiger Name Performance Event Counters lautet. Es basiert auf dem perf_events-Subsystem des Linux-Kernels und kann Funktionen zur Leistungsanalyse sowohl auf Hardware- als auch auf Softwareebene bereitstellen.
Die Hauptfunktionen von perf umfassen:
- CPU-Leistungsanalyse
- Verfolgung von Funktionsaufrufen
- Hardware-Ereignisstatistiken
- Software-Ereignisüberwachung
- Systemaufruf-Tracing
perf Grundsyntax
Das grundlegende Syntaxformat des Befehls perf ist:
perf [--version] [--help] COMMAND [ARGS]
Zu den gängigen Unterbefehlen gehören:
stat: Statistiken der Performance-Counterrecord: Leistungsdaten aufzeichnenreport: Aufgezeichnete Daten analysierentop: Echtzeit-Leistungsüberwachunglist⟦⟧: Verfügbare Ereignisse auflistenannotate: Quellcode-Analyse
Detaillierte Erklärung häufiger perf-Unterbefehle
perf stat
Zählt verschiedene Hardware- und Software-Ereignisse während der Befehlsausführung.
perf stat [options] command [command-options]
Gängige Optionen:
-e: Gibt das zu überwachende Ereignis an-p: Überwacht die angegebene Prozess-ID-a: Überwacht CPUs-r: Wiederholt den Lauf und zeigt den Durchschnitt an-d: Zeigt detailliertere Ereignisse an
Beispiel:
Beispiel
perf stat ls
# Einen angegebenen Prozess überwachen
perf stat -p 1234
# Bestimmte Ereignisse überwachen
perf stat -e cycles,instructions,cache-misses ls
perf record
Leistungsdaten in eine Datei aufzeichnen (Standard: perf.data).
perf record [options] command [command-options]
Gängige Optionen:
-g: Aufrufgraph aufzeichnen-F: Abtastfrequenz (Hz)-p: Für einen angegebenen Prozess aufzeichnen-o: Ausgabedatei angeben-e: Die aufzuzeichnenden Ereignisse angeben
Beispiel:
Beispiel
perf record ls
# Prozess 1234 mit 99Hz-Frequenz aufzeichnen
perf record -F 99 -p 1234 -g
perf report
Die von perf record aufgezeichneten Daten analysieren.
perf report [options]
Gängige Optionen:
-i: Eingabedatei angeben-n: Sample-Anzahl anzeigen--stdio: Textmodus-Ausgabe-g: Aufrufgraph anzeigen-s: Nach dem angegebenen Feld sortieren
Beispiel:
Beispiel
perf report
# Die angegebene Datei analysieren und im Textmodus ausgeben
perf report -i perf.data.old --stdio
perf top
Zeigt die ressourcenintensivsten Funktionen im System in Echtzeit an.
perf top [options]
Gängige Optionen:
-e: Überwachungsereignis angeben-p: Einen angegebenen Prozess überwachen-K: Kernel-Symbole ausblenden-U: Userspace-Symbole ausblenden-g: Aufrufgraph anzeigen
Beispiel:
Beispiel
perf top
# Ein bestimmtes Ereignis überwachen
perf top -e cache-misses
perf list
Alle überwachbaren Ereignisse auflisten.
perf list [hw|sw|cache|tracepoint|pmu|event_glob]
Beispiel:
Beispiel
perf list
# Hardware-Cache-Ereignisse auflisten
perf list cache
perf Ereignistypen
perf kann mehrere Arten von Ereignissen überwachen:
| Ereignistyp | Beschreibung | Beispiel |
|---|---|---|
| Hardware | CPU-Hardware-Ereignisse | cycles, instructions |
| Software | Kernel-Software-Ereignisse | context-switches, page-faults |
| Cache | Cache-bezogene Ereignisse | cache-references, cache-misses |
| Tracepoints | Statische Kernel-Tracepoints | syscalls, block, sched |
| PMU | Prozessorspezifische Ereignisse | (herstellerspezifisch) |
| 断点 | Breakpoint-Ereignisse | mem:[:access] |
perf Praktische Anwendungsbeispiele
1. Leistungsengpässe von Programmen analysieren
Beispiel
perf record -g ./my_program
# Die Ergebnisse analysieren
perf report -g
2. CPU-Hotspot-Funktionen finden
perf top -p $(pidof my_program)
3. Leistungsunterschiede zwischen zwei Läufen vergleichen
Beispiel
perf record -o perf.data.1 ./my_program input1
# Zweiter Lauf
perf record -o perf.data.2 ./my_program input2
# Die Unterschiede vergleichen
perf diff perf.data.1 perf.data.2
4. Systemaufrufe analysieren
Beispiel
perf list 'syscalls:*'
# Den open-Systemaufruf verfolgen
perf stat -e 'syscalls:sys_enter_open' -a sleep 10
Tipps zur Verwendung von perf
-
Overhead reduzieren: Bei lang laufenden Performance-Analysen die Abtastfrequenz angemessen reduzieren (z. B. -F 99)
-
Symbolauflösung: Stellen Sie sicher, dass Debug-Symbole verfügbar sind; Sie können Debug-Pakete installieren oder das Programm mit -g kompilieren
-
Flame-Graph-Generierung: Kombinieren Sie es mit dem FlameGraph-Tool, um intuitive Performance-Analyse-Diagramme zu erzeugen
-
Multi-Core-Analyse: Verwenden Sie die Option -a, um alle CPUs zu überwachen, oder verwenden Sie -C, um bestimmte CPUs anzugeben
-
Trennung von Benutzer- und Kernelspace: Verwenden Sie die Optionen -k und -u, um Kernel- bzw. Benutzerbereich zu analysieren
Fehlerbehebung
-
Berechtigungsprobleme:
echo -1 > /proc/sys/kernel/perf_event_paranoid
oder führen Sie perf mit sudo aus
-
Fehlende Symbolinformationen:
- Stellen Sie sicher, dass das Programm mit der Option -g kompiliert wurde
- Debug-Symbol-Pakete installieren
-
Sampling-Daten zu groß:
- Sampling-Frequenz reduzieren
- Sampling-Zeit verkürzen
- --no-call-graph verwenden, um Call-Graph-Informationen zu reduzieren
-
High-Level-Sprachen wie Java/Python können nicht geparst werden:
- Erfordert sprachspezifische Unterstützung des perf-Tools
- Erwägen Sie die Verwendung sprachspezifischer Analysewerkzeuge
Weiterführende Lernressourcen
-
Offizielle Dokumentation: Das Verzeichnis tools/perf/Documentation im Linux-Kernel-Quellcode
-
Buchempfehlungen:
- 《Systems Performance: Enterprise and the Cloud》
- Systemleistung: Enterprise und die Cloud
-
Online-Ressourcen:
- Brendan Greggs Blog und Toolset
- perf-tools-Toolset
-
Verwandte Tools:
- FlameGraph: Leistungsdaten visualisieren
- bpftrace: Flexibleres dynamisches Tracing
Durch die Beherrschung des perf-Befehls können Sie die Leistungsmerkmale von Linux-Systemen tiefgehend analysieren, Leistungsengpässe schnell lokalisieren und Anwendungen sowie Systemkonfigurationen optimieren.
Andere Erweiterungen
Linux-Befehlsreferenz