Linux-perf-Befehl

Linux 命令大全Linux-Befehlsreferenz


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-Counter
  • record: Leistungsdaten aufzeichnen
  • report: Aufgezeichnete Daten analysieren
  • top: Echtzeit-Leistungsüberwachung
  • list⟦⟧: Verfügbare Ereignisse auflisten
  • annotate: 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

# Zählt die Ausführung des Befehls ls
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

# Die Ausführung des Befehls ls aufzeichnen
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

# Die standardmäßige perf.data-Datei analysieren
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

# Systemleistung in Echtzeit überwachen
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

# Alle Ereignisse auflisten
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

# Programmausführung aufzeichnen
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

# Erster Lauf
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

# Verfügbare Systemaufruf-Tracepoints auflisten
perf list 'syscalls:*'

# Den open-Systemaufruf verfolgen
perf stat -e 'syscalls:sys_enter_open' -a sleep 10

Tipps zur Verwendung von perf

  1. Overhead reduzieren: Bei lang laufenden Performance-Analysen die Abtastfrequenz angemessen reduzieren (z. B. -F 99)

  2. Symbolauflösung: Stellen Sie sicher, dass Debug-Symbole verfügbar sind; Sie können Debug-Pakete installieren oder das Programm mit -g kompilieren

  3. Flame-Graph-Generierung: Kombinieren Sie es mit dem FlameGraph-Tool, um intuitive Performance-Analyse-Diagramme zu erzeugen

  4. Multi-Core-Analyse: Verwenden Sie die Option -a, um alle CPUs zu überwachen, oder verwenden Sie -C, um bestimmte CPUs anzugeben

  5. Trennung von Benutzer- und Kernelspace: Verwenden Sie die Optionen -k und -u, um Kernel- bzw. Benutzerbereich zu analysieren


Fehlerbehebung

  1. Berechtigungsprobleme:

    echo -1 > /proc/sys/kernel/perf_event_paranoid

    oder führen Sie perf mit sudo aus

  2. Fehlende Symbolinformationen:

    • Stellen Sie sicher, dass das Programm mit der Option -g kompiliert wurde
    • Debug-Symbol-Pakete installieren
  3. Sampling-Daten zu groß:

    • Sampling-Frequenz reduzieren
    • Sampling-Zeit verkürzen
    • --no-call-graph verwenden, um Call-Graph-Informationen zu reduzieren
  4. 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

  1. Offizielle Dokumentation: Das Verzeichnis tools/perf/Documentation im Linux-Kernel-Quellcode

  2. Buchempfehlungen:

    • 《Systems Performance: Enterprise and the Cloud》
    • Systemleistung: Enterprise und die Cloud
  3. Online-Ressourcen:

    • Brendan Greggs Blog und Toolset
    • perf-tools-Toolset
  4. 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.


Linux 命令大全Linux-Befehlsreferenz

Andere Erweiterungen