Утилиты тестирования производительности для С++
Мне было любопытно, есть ли у кого-нибудь предложения для библиотек тестирования производительности и интерфейсов, которые будут создавать приятные графические диаграммы для С++ (например, как gcov создает данные о покрытии, и там есть интерфейсы для просмотра данных покрытия кода). Возможность создавать такие диаграммы, как:
http://download.eclipse.org/eclipse/downloads/drops/S-3.7M4-201012081300/performance/performance.php?fp_type=0
будет довольно гладким. Мы используем cppunit прямо сейчас для модульного тестирования, поэтому, возможно, есть что-то, что интегрируется с этим.
Дополнительная информация: мы собираем Linux (мы используем Ubuntu Lucid/Maverick) на компьютерах Intel x86-64.
Ответы
Ответ 1
Некоторые предложения:
- googletest Среда С++ может создавать отчеты, совместимые с JUnit.
- Hudson можно использовать для запуска ваших тестов. Это требует только того, что ваше приложение на С++ можно запустить как консольное приложение.
- Hudson Performance Plugin может генерировать графические диаграммы из отчетов JUnit.
- Есть много других plugins.
Ответ 2
В Linux вы можете попробовать инструментарий valgrind. Valgrind включает инструмент callgrind, который может профилировать ваш код. KCacheGrind очень хорошо визуализирует вывод cachegrind.
Ответ 3
Некоторые, надеюсь, соответствующие заметки из моего опыта такого рода вещей в ответах здесь и здесь.
Нет причин, по которым ваша существующая установка CppUnit в сочетании с чем-то вроде scoped_timer
(см. вторую часть) и небольшая постобработка некоторых диаграмм, возможно, не должны удовлетворять вашим потребностям. Хотя я считаю, что CppUnit включает в себя плагин ( "Clocker"?), Который будет выходить из unittest раз, я не думаю, что на самом деле это полезно для такого рода тестирования производительности на практике, потому что вы неизменно теряете время, просто часть каждого теста и не весь установочный код.
Ответ 4
Вам могут помочь две системы тестирования производительности.
Оба они вдохновлены платформой Google Test и обеспечивают интерфейс для поддержки тестирования производительности, поэтому его легко переносить исходный googletest на Hayai или SkyPat.
SkyPat объединяет модульные тесты и perf_evnet. Он расширяет концепцию Google Test и предоставляет интерфейс для доступа к PMU. perf_event дает SkyPat точные подсчеты циклов, которые полезны для инструментов, чувствительных к дисперсии времени, таких как компиляторы. SkyPat также может профилировать кусок кода событиями PMU (экв: циклы, инструкции, ссылка на кеш, пропустить кеш и т.д.).
Hayai поддерживает несколько методов измерения производительности для разных ОС (Windows: QueryPerformanceCounter()
, Linux: gethrtime()
, Apple (OSX, iOS): mach_absolute_time()
) в свою инфраструктуру тестирования производительности.