Perf – Ein Leistungsüberwachungs- und Analysetool für Linux

Wenn wir über Leistung in der Informatik sprechen, beziehen wir uns auf die Beziehung zwischen unseren Ressourcen und den Aufgaben, die sie uns ermöglichen, innerhalb eines bestimmten Zeitraums zu erledigen.

Perf- A Performance Monitoring and Analysis Tool for Linux

In einem Tag des erbitterten Wettbewerbs zwischen Unternehmen ist es wichtig, dass wir lernen, wie wir das Beste aus unseren Ressourcen machen können. Die Verschwendung von Hardware- oder Software-Ressourcen oder das mangelnde Wissen darüber, wie man sie effizienter nutzen kann, führt letztendlich zu einem Verlust, den wir uns einfach nicht leisten können, wenn wir an der Spitze unseres Spiels sein wollen.

Gleichzeitig müssen wir darauf achten, unsere Ressourcen nicht an eine Grenze zu bringen, an der der dauerhafte Einsatz irreparable Schäden verursacht.

In diesem Artikel werden wir Ihnen ein relativ neues Leistungsanalysetool vorstellen und Tipps geben, die Sie verwenden können, um Ihre Linux-Systeme, einschließlich Hardware und Anwendungen, zu überwachen. Dies wird Ihnen helfen sicherzustellen, dass sie so funktionieren, dass Sie die gewünschten Ergebnisse erzielen, ohne Ressourcen oder Ihre eigene Energie zu verschwenden.

Vorstellung und Installation von Perf unter Linux

Linux bietet unter anderem ein Leistungsüberwachungs- und -analysentool namens bequem perf. Was unterscheidet perf von anderen bekannten Tools, mit denen Sie bereits vertraut sind?

Die Antwort ist, dass perf Zugang zur Performance Monitoring Unit in der CPU bietet und uns somit ermöglicht, das Verhalten der Hardware und ihrer zugehörigen Ereignisse genau zu betrachten.

Es kann auch Softwareereignisse überwachen und Berichte erstellen aus den gesammelten Daten.

Sie können perf in RPM-basierten Distributionen mit installieren:

# yum update && yum install perf     [CentOS / RHEL / Fedora]
# dnf update && dnf install perf     [Fedora 23+ releases]

In Debian und Derivaten:

# sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

Wenn uname -r im obigen Befehl zusätzliche Zeichenfolgen neben der tatsächlichen Version zurückgibt (3.2.0-23-generic in meinem Fall), müssen Sie möglicherweise linux-tools-3.2.0-23 eingeben, anstatt die Ausgabe von uname zu verwenden.

Es ist auch wichtig zu beachten, dass perf unvollständige Ergebnisse liefert, wenn es in einem Gast über VirtualBox oder VMWare ausgeführt wird, da sie keinen Zugriff auf Hardwarezähler wie andere Virtualisierungstechnologien (wie KVM oder XEN) ermöglichen.

Zusätzlich ist zu beachten, dass einige perf-Befehle standardmäßig auf root beschränkt sein können, was (bis zum Neustart des Systems) deaktiviert werden kann, indem man:

# echo 0 > /proc/sys/kernel/perf_event_paranoid

Wenn Sie den paranoid-Modus dauerhaft deaktivieren möchten, aktualisieren Sie die folgende Einstellung in der Datei /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Unterbefehle

Nach der Installation von perf können Sie in der Handbuchseite eine Liste der verfügbaren Unterbefehle finden (Unterbefehle können als spezielle Optionen betrachtet werden, die ein bestimmtes Fenster ins System öffnen). Für beste und umfassendere Ergebnisse verwenden Sie perf entweder als root oder über sudo.

Perf-Liste

perf list (ohne Optionen) gibt alle symbolischen Ereignistypen zurück (lange Liste). Wenn Sie die Liste der in einer bestimmten Kategorie verfügbaren Ereignisse anzeigen möchten, verwenden Sie perf list gefolgt vom Kategorienamen ([hw|sw|cache|tracepoint|pmu|event_glob]), wie zum Beispiel:

Anzeige der Liste der vordefinierten Softwareereignisse in Linux:

# perf list sw 
List Software Pre-defined Events in Linux

Perf-Statistik

perf stat führt ein Befehl aus und sammelt während der Ausführung dieses Befehls Leistungsstatistiken von Linux. Was passiert in unserem System, wenn wir dd ausführen?

# perf stat dd if=/dev/zero of=test.iso bs=10M count=1
Collects Performance Statistics of Linux Command

Die oben gezeigten Statistiken zeigen unter anderem:

  1. Die Ausführung des Befehls dd dauerte 21.812281 Millisekunden der CPU. Wenn wir diese Zahl durch den Wert „verstrichene Zeit in Sekunden“ unten (23.914596 Millisekunden) teilen, ergibt sich 0.912 (CPU-Auslastung).
  2. Während der Befehl ausgeführt wurde, deuten 15 Kontextwechsel (auch als Prozesswechsel bekannt) darauf hin, dass die CPUs 15 Mal von einem Prozess (oder Thread) zu einem anderen gewechselt wurden.
  3. 2 CPU-Migrationen sind das erwartete Ergebnis, wenn bei einer 2-Kern-CPU die Arbeitslast gleichmäßig auf die Anzahl der Kerne verteilt ist.
    In dieser Zeit (21,812281 Millisekunden) wurden insgesamt 62.025.623 CPU-Zyklen verbraucht, was geteilt durch 0,021812281 Sekunden 2,843 GHz ergibt.
  4. Wenn wir die Anzahl der Zyklen durch die Gesamtzahl der Befehle teilen, erhalten wir 4,9 Zyklen pro Befehl, was bedeutet, dass jeder Befehl durchschnittlich fast 5 CPU-Zyklen benötigte, um abgeschlossen zu werden. Wir können dies (zumindest teilweise) auf die Anzahl der Verzweigungen und Verzweigungsmisserfolge (siehe unten) zurückführen, die dazu führen, dass CPU-Zyklen verschwendet oder fehlgenutzt werden.
  5. Während der Ausführung des Befehls wurden insgesamt 3.552.630 Verzweigungen festgestellt. Dies ist die CPU-interne Darstellung von Entscheidungspunkten und Schleifen im Code. Je mehr Verzweigungen, desto geringer die Leistung. Um dies auszugleichen, versuchen alle modernen CPUs, den Fluss des Codes vorherzusagen. 51.348 Verzweigungsmisserfolge deuten darauf hin, dass die Vorhersagefunktion 1,45% der Zeit falsch lag.

Dasselbe Prinzip gilt für das Sammeln von Statistiken (oder anders ausgedrückt, das Profiling), während eine Anwendung ausgeführt wird. Starten Sie einfach die gewünschte Anwendung und schließen Sie sie nach einer angemessenen Zeit (die Ihnen überlassen bleibt), und perf wird die Statistiken auf dem Bildschirm anzeigen. Durch die Analyse dieser Statistiken können Sie potenzielle Probleme identifizieren.

Perf top

perf top ist ähnlich wie der top-Befehl, da es ein nahezu Echtzeit-Systemprofil anzeigt (auch bekannt als Live-Analyse).

Mit der Option -a werden alle bekannten Ereignistypen angezeigt, während die Option -e es Ihnen ermöglicht, eine spezifische Ereigniskategorie auszuwählen (wie von perf list zurückgegeben):

Zeigt alle Zyklusereignisse an.

perf top -a 

Zeigt alle mit der CPU-Uhr verbundenen Ereignisse an.

perf top -e cpu-clock 
Live Analysis of Linux Performance

Die erste Spalte in der obigen Ausgabe stellt den Prozentsatz der seit Beginn des Laufs genommenen Proben dar, gruppiert nach Funktionssymbol und gemeinsamem Objekt. Weitere Optionen sind in man perf-top verfügbar.

Perf record

perf record führt einen Befehl aus und speichert die statistischen Daten in einer Datei namens perf.data im aktuellen Arbeitsverzeichnis. Es läuft ähnlich wie perf stat.

Geben Sie perf record gefolgt von einem Befehl ein:

# perf record dd if=/dev/null of=test.iso bs=10M count=1
Record Command Statistical Data

Perf report

perf report formatiert die in perf.data gesammelten Daten in einen Leistungsbericht:

# sudo perf report
Perf Linux Performance Report

All diese Unterbefehle haben eine dedizierte Handbuchseite, die wie folgt aufgerufen werden kann:

# man perf-subcommand

wo Unterbefehl entweder auflisten, stat, top, aufzeichnen oder berichten ist. Dies sind die am häufigsten verwendeten Unterbefehle; andere sind in der Dokumentation aufgeführt (siehe den Abschnitt Zusammenfassung für den Link).

Zusammenfassung

In diesem Leitfaden haben wir Ihnen perf vorgestellt, ein Leistungsüberwachungs- und -analysetool für Linux. Wir ermutigen Sie nachdrücklich, sich mit seiner Dokumentation vertraut zu machen, die unter https://perf.wiki.kernel.org gepflegt wird.

Wenn Sie Anwendungen finden, die einen hohen Prozentsatz der Ressourcen verbrauchen, können Sie in Betracht ziehen, den Quellcode zu ändern oder andere Alternativen zu verwenden.

Wenn Sie Fragen zu diesem Artikel haben oder Vorschläge zur Verbesserung haben, sind wir ganz Ohr. Zögern Sie nicht, uns über das Kommentarformular unten zu erreichen.

Source:
https://www.tecmint.com/perf-performance-monitoring-and-analysis-tool-for-linux/