2011-01-05 2 views
12

Мне было любопытно, есть ли у кого-либо предложения по библиотекам тестирования производительности и интерфейсам, которые будут создавать приятные графические диаграммы для C++ (например, как gcov создает данные о покрытии, и там есть интерфейсы для просмотра данных покрытия кода) , Будучи в состоянии производить диаграммы, как:Утилиты тестирования производительности для C++

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.

+0

http://stackoverflow.com/questions/4394606/beyond-stack-sampling-c-profilers, имеет интересный текущий список таких вещей ... – Nim

+0

Это будет во многом зависеть от того, какие ОС и ЦП вы используете что доступно ... вы больше ищете автоматическое тестирование или профилирование производительности? – AJG85

+0

Я думал скорее о автоматизированной установке тестирования регрессии, которая будет особенно ориентирована на показатели производительности. Было бы здорово использовать cppunit, но это не требуется, и меня будет интересовать какой-либо жгут проводов для тестирования производительности. Профилирование будет шагом, который мы предпримем после того, как наши регрессионные тесты заметят некоторый большой вред во время выполнения или что-то подобное. –

ответ

4

Некоторые предложения:

  • googletest C++ структура способна производить JUnit-совместимые отчеты.
  • Hudson может использоваться для запуска ваших тестов. Это требует только того, чтобы ваше приложение C++ можно запускать как консольное приложение.
  • Hudson Performance Plugin может генерировать графические диаграммы из отчетов JUnit.
  • Есть много других plugins.
2

На linux вы можете попробовать инструмент valgrind toolkit. Valgrind включает инструмент callgrind, который может профилировать ваш код. KCacheGrind очень хорошо визуализирует вывод cachegrind.

+1

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

+0

@Kenny: Вы можете проанализировать вывод 'cg_diff', чтобы создать нужные графики. –

2

Некоторые, надеюсь, соответствующие заметки из моего опыта такого рода вещей в ответах here и here.

Нет причин, по которым ваша существующая установка CppUnit в сочетании с чем-то вроде scoped_timer (см. Вторую часть) и немного постобработки на некоторые диаграммы, возможно, не должны удовлетворять вашим потребностям. Хотя я считаю, что CppUnit включает в себя плагин («Clocker»?), Который будет выходить из unittest раз, я не думаю, что это действительно полезно для такого рода тестирования производительности на практике, потому что вы неизменно теряете время, просто часть каждого теста и не весь код установки.

1

Существуют две системы тестирования производительности, которые могут вам помочь.

Оба они вдохновлены рамках тестирования Google и обеспечивает интерфейс для поддержки тестирования производительности, так что легко транспортировать свой оригинальный 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()) в ее рамках тестирования производительности.

Смежные вопросы