0Pricing
C++ Academy · Урок

Профилирование с perf, vtune и санитайзерами

Профилируйте программы с помощью perf и Intel VTune и находите ошибки с помощью AddressSanitizer.

«Профилирование с perf, vtune и санитайзерами» — бесплатный урок C++ Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.

Зачем профилировать

Интуиция относительно производительности обычно ошибается. Выполните профилирование, чтобы найти настоящие узкие места, а затем оптимизируйте.

Linux: perf

perf — профилировщик сэмплирования с малыми накладными расходами, поставляемый вместе с Linux. Запускайте его для любого двоичного файла, собранного с отладочной информацией.

g++ -O2 -g main.cpp -o main
perf record ./main
perf report

perf stat

Выводит сводные показатели — такты, инструкции, промахи кэша и ошибки предсказания ветвлений — для одного запуска.

perf stat -e cycles,instructions,cache-misses,branch-misses ./main

Пламенные графики

Преобразуйте данные perf в пламенный график, показывающий, на что тратится время.

perf record -F 99 -g ./main
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg

macOS: Instruments

Instruments от Apple предоставляет профилирование времени, анализ выделений памяти, утечек и многое другое. Бесплатно поставляется с Xcode.

Windows: профилировщик VTune

Intel VTune (бесплатен для личного использования) предлагает подробный анализ микроархитектуры — остановки конвейера, промахи кэша и часто выполняемые блоки. Работает на разных платформах.

Санитайзеры обнаруживают ошибки

Санитайзеры — средства проверки во время выполнения, встроенные в clang и gcc. Перекомпилируйте программу с подходящим параметром:

  • -fsanitize=address — AddressSanitizer для ошибок работы с памятью
  • -fsanitize=thread — ThreadSanitizer для обнаружения состояний гонки
  • -fsanitize=undefined — санитайзер UB для знакового переполнения и других ошибок
  • -fsanitize=memory — MSan для обнаружения чтения неинициализированных данных

Пример AddressSanitizer

Обнаруживает переполнения буфера, использование после освобождения и повторное освобождение, выводя трассировки стека.

g++ -fsanitize=address -g main.cpp
./a.out
# Output points exactly at the bug

Во время компиляции и во время выполнения

Статический анализ (clang-tidy, cppcheck) находит ошибки без запуска программы. Санитайзеры находят ошибки во время выполнения. Используйте оба подхода — они обнаруживают разные проблемы.

Профилирование выделений памяти

Выделения памяти в куче выполняются медленно. Используйте perf, massif от Valgrind или Heaptrack, чтобы находить часто выполняемые места выделения и сокращать их количество.

Чтение профилей

Сосредоточьтесь на верхних функциях в профиле. Затем изучите дерево вызовов, чтобы понять контекст. Оптимизация различий в несколько процентов обычно не оправдана.

Непрерывное профилирование

В рабочей среде профилировщики на основе сэмплирования, такие как Pyroscope или Pixie, непрерывно собирают данные с малыми накладными расходами. Так можно обнаружить регрессии до того, как они навредят пользователям.

Рабочий процесс

Цикл оптимизации:

  1. Измерьте показатели, чтобы найти узкое место
  2. Сформулируйте гипотезу
  3. Измените что-то одно
  4. Измерьте снова

Без измерений вы гадаете.

Быстрая проверка

Какой параметр компилятора включает AddressSanitizer?

Итоги

Профилируйте с помощью perf (Linux), Instruments (macOS) или VTune (на разных платформах), чтобы находить узкие места. Используйте санитайзеры, чтобы на раннем этапе обнаруживать ошибки памяти и многопоточности. Измерьте, сформулируйте гипотезу, измените и измерьте снова.

Часто задаваемые вопросы

Урок «Профилирование с perf, vtune и санитайзерами» бесплатный?

Да — полный текст урока «Профилирование с perf, vtune и санитайзерами» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.

Чему я научусь в уроке «Профилирование с perf, vtune и санитайзерами»?

Профилируйте программы с помощью perf и Intel VTune и находите ошибки с помощью AddressSanitizer. Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C++ Academy?

Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Профилирование с perf, vtune и санитайзерами»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C++ Academy?

Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Структуры данных, эффективные для кэша
  2. Предсказание ветвлений и горячие циклы
  3. Профилирование с perf, vtune и санитайзерами
  4. Микротестирование с Google Benchmark
← Назад к C++ Academy