Profiling mit perf, VTune und Sanitizern
Erstellen Sie mit perf und Intel VTune Profile und finden Sie Fehler mit AddressSanitizer.
Profiling mit perf, VTune und Sanitizern ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum ein Profil erstellen?
Die eigene Intuition zur Performance liegt meistens falsch. Erstellen Sie ein Profil, um die tatsächlichen Engpässe zu finden – und optimieren Sie dann.
Linux: perf
perf ist ein Sampling-Profiler mit geringem Overhead, der mit Linux ausgeliefert wird. Führen Sie ihn für jedes Binary aus, das mit Debug-Informationen erstellt wurde.
g++ -O2 -g main.cpp -o main
perf record ./main
perf reportperf stat
Gibt zusammenfassende Metriken für einen Lauf aus – Zyklen, Instruktionen, Cache-Verfehlungen und Fehlvorhersagen von Verzweigungen.
perf stat -e cycles,instructions,cache-misses,branch-misses ./mainFlame Graphs
Wandeln Sie perf-Daten in einen Flame Graph um, der zeigt, wo Zeit aufgewendet wird.
perf record -F 99 -g ./main
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svgmacOS: Instruments
Apple s Instruments bietet Zeitprofiling, die Analyse von Allokierungen und Leaks sowie weitere Funktionen. Es ist kostenlos mit Xcode verfügbar.
Windows: VTune Profiler
Intel VTune (für den persönlichen Gebrauch kostenlos) bietet eine detaillierte mikroarchitektonische Analyse – Pipeline-Stopps, Cache-Verfehlungen und Hotblocks. Plattformübergreifend.
Sanitizer finden Fehler
Sanitizer sind Laufzeitprüfer, die in clang und gcc integriert sind. Kompilieren Sie das Programm mit dem passenden Flag neu:
-fsanitize=address– AddressSanitizer für Speicherfehler-fsanitize=thread– ThreadSanitizer für Data Races-fsanitize=undefined– UB Sanitizer für vorzeichenbehafteten Overflow usw.-fsanitize=memory– MSan für das Lesen nicht initialisierter Daten
Beispiel für AddressSanitizer
Findet Pufferüberläufe, Use-after-Free und Double-Free-Fehler und gibt dabei Stacktraces aus.
g++ -fsanitize=address -g main.cpp
./a.out
# Output points exactly at the bugCompilezeit vs. Laufzeit
Statische Analysen (clang-tidy, cppcheck) finden Fehler, ohne das Programm auszuführen. Sanitizer finden Laufzeitfehler. Verwenden Sie beides – sie erkennen unterschiedliche Probleme.
Allokierungen profilieren
Heap-Allokierungen sind langsam. Verwenden Sie perf, Valgrind s massif oder Heaptrack, um häufige Allokierungsstellen zu finden und ihre Anzahl zu reduzieren.
Profile lesen
Konzentrieren Sie sich auf die wichtigsten Funktionen im Profil. Sehen Sie sich anschließend den Aufrufbaum an, um den Kontext zu verstehen. Einige Prozent an einzelnen Stellen sind die Optimierung normalerweise nicht wert.
Kontinuierliches Profiling
Für Produktionssysteme sammeln Sampling-Profiler wie Pyroscope oder Pixie kontinuierlich Daten mit geringem Overhead. So erkennen Sie Regressionen, bevor sie sich auf Benutzer auswirken.
Workflow
Die Optimierungsschleife:
- Messen Sie, um den Engpass zu identifizieren
- Stellen Sie eine Hypothese auf
- Ändern Sie genau eine Sache
- Messen Sie erneut
Ohne Messung raten Sie nur.
Schnelltest
Welches Compiler-Flag aktiviert AddressSanitizer?
Zusammenfassung
Erstellen Sie mit perf (Linux), Instruments (macOS) oder VTune (plattformübergreifend) Profile, um Engpässe zu finden. Verwenden Sie Sanitizer, um Speicher- und Threading-Fehler frühzeitig zu erkennen. Messen Sie, stellen Sie eine Hypothese auf, ändern Sie etwas und messen Sie erneut.
Häufig gestellte Fragen
Ist die Lektion „Profiling mit perf, VTune und Sanitizern“ kostenlos?
Ja — der vollständige Text von „Profiling mit perf, VTune und Sanitizern“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Profiling mit perf, VTune und Sanitizern“?
Erstellen Sie mit perf und Intel VTune Profile und finden Sie Fehler mit AddressSanitizer. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Profiling mit perf, VTune und Sanitizern“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Cachefreundliche Datenlayouts
- Branch Prediction und Hot Loops
- Profiling mit perf, VTune und Sanitizern
- Microbenchmarking mit Google Benchmark