Profilering med perf, VTune og sanitizere
Profiler programmer med perf og Intel VTune, og finn feil med AddressSanitizer.
Profilering med perf, VTune og sanitizere er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C++ Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C++ Academy inneholder totalt 4 leksjoner.
Hvorfor profilere
Intuisjon om ytelse er som regel feil. Profiler for å finne de faktiske flaskehalsene – optimaliser deretter.
Linux: perf
perf er en samplingsprofiler med lav overhead som følger med Linux. Kjør den på enhver binærfil som er bygget med feilsøkingsinformasjon.
g++ -O2 -g main.cpp -o main
perf record ./main
perf reportperf stat
Skriv ut sammendragsmålinger – sykler, instruksjoner, cache-miss og feilpredikerte brancher – for én kjøring.
perf stat -e cycles,instructions,cache-misses,branch-misses ./mainFlammegrafer
Konverter perf-data til en flammegraf som viser hvor tiden brukes.
perf record -F 99 -g ./main
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svgmacOS: Instruments
Apples Instruments tilbyr tidsprofilering, allokeringer, lekkasjer og mer. Følger gratis med Xcode.
Windows: VTune Profiler
Intel VTune, som er gratis til personlig bruk, tilbyr detaljert mikroarkitektonisk analyse – rørledningsstopp, cache-miss og hotte blokker. Plattformuavhengig.
Sanitizere fanger opp feil
Sanitizere er kjøretidskontrollere som er innebygd i clang og gcc. Kompiler på nytt med riktig flagg:
-fsanitize=address– AddressSanitizer for minnefeil-fsanitize=thread– ThreadSanitizer for datakappløp-fsanitize=undefined– UB Sanitizer for heltallsoverflyt med fortegn og lignende-fsanitize=memory– MSan for lesing av uinitialiserte verdier
Eksempel med AddressSanitizer
Fanger opp bufferoverskridelser, bruk etter frigjøring og dobbel frigjøring med stackspor.
g++ -fsanitize=address -g main.cpp
./a.out
# Output points exactly at the bugKompileringstid kontra kjøretid
Statisk analyse (clang-tidy, cppcheck) finner feil uten å kjøre programmet. Sanitizere finner kjøretidsfeil. Bruk begge deler – de fanger opp forskjellige problemer.
Profilering av allokeringer
Heap-allokeringer er trege. Bruk perf, Valgrinds massif eller Heaptrack for å finne hyppige allokeringssteder og redusere dem.
Lese profiler
Fokuser på de viktigste funksjonene i profilen. Slå deretter opp kalltreet for å forstå konteksten. Noen få prosent her og der er vanligvis ikke verdt å optimalisere.
Kontinuerlig profilering
I produksjon samler samplingsbaserte profilerere som Pyroscope eller Pixie inn data kontinuerlig med lav overhead. Fang opp regresjoner før de skader brukerne.
Arbeidsflyt
Optimaliseringssløyfen:
- Mål for å identifisere flaskehalsen
- Formuler en hypotese
- Endre én ting
- Mål på nytt
Uten målinger gjetter De.
Rask kontroll
Hvilket kompilatorflagg aktiverer AddressSanitizer?
Oppsummering
Profiler med perf (Linux), Instruments (macOS) eller VTune (plattformuavhengig) for å finne flaskehalser. Bruk sanitizere for å oppdage minne- og trådfeil tidlig. Mål, formuler en hypotese, endre, og mål på nytt.
Lær deg C++ med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 51
- Leksjoner
- 203
Ofte stilte spørsmål
Er leksjonen «Profilering med perf, VTune og sanitizere» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «Profilering med perf, VTune og sanitizere», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i C++ Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Profilering med perf, VTune og sanitizere»?
Profiler programmer med perf og Intel VTune, og finn feil med AddressSanitizer. Du øver på C++ Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med C++ Academy?
Ingen tidligere erfaring er nødvendig. C++ Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Profilering med perf, VTune og sanitizere»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne C++ Academy-leksjonen?
Ja. Alle C++ Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Cache-vennlige datastrukturer
- Grenprediksjon og varme løkker
- Profilering med perf, VTune og sanitizere
- Mikrobenchmarking med Google Benchmark