2009-12-09 2 views
12

Каковы наилучшие инструменты для профилирования приложений C/C++ на * nix?Профилирование производительности в Linux

(Я надеюсь профилировать сервер, представляющий собой смешанный (блокирующий) файл IO, epoll для сети и fork()/execv() для некоторого тяжелого подъема, но общая помощь и более общие инструменты - все это также оценивается.)

Можете ли вы получить большое системное изображение ОЗУ, ЦП, сети и диска в одном обзоре и просверлить его?

Было много разговоров о kernel lists о таких вещах, как perf timechart, но пока я еще не нашел ничего в Ubuntu.

ответ

5

Я рекомендую принимать stackshots, для которых pstack является полезным.Вот еще информация:

  1. Comments on gprof.

  2. How stackshots work.

  3. A blow-by-blow example.

  4. A very short explanation.

Если йо Вы хотите потратить деньги, Zoom выглядит довольно неплохим инструментом.

+0

спасибо, pstack выглядит как очень способный пробоотборник – Will

1

Compile с -pg, запустите программу, а затем использовать дргоЕ

Компиляция (и связь) с -pg добавляет профилирования кода и профилирование библиотеки в исполняемый файл, который затем создает файл под названием gmon.out, что содержит информацию о времени. gprof отображает графики вызовов и их (абсолютные и относительные) тайминги.

Для получения более подробной информации см. man gprof.

+0

Проблема с gprof заключается в том, что он не работает на многопоточности и имеет трудное время с динамическими libs. –

1

Если вы можете принять ваше заявление в FREEBSD, OS X или Solaris вы можете использовать DTrace, хотя DTrace является инструментом аналитика ориентированный - то есть, что вам нужно диск его - читать: скрипт. Ничто другое не может дать вам уровень детализации, который вам нужен; Dtrace не может просто профилировать задержки вызовов функций в пользовательской зоне; он также может следовать за контекстом в ядре.

0

Ответ FOSS, как уже упоминалось, заключается в создании с -pg, а затем с помощью gprof для анализа вывода. Если это продукт/проект, который оправдывает забрасывание денег, у меня также возникнет соблазн использовать профилировщик IBM/Rationals Quantify, поскольку это упростит просмотр данных профилирования, развернется до уровня линии или просмотрит его в «10000ft уровня.

Конечно, может быть доступен просмотрщик gprof, который может делать то же самое, но я не знаю ни о каком.

1

oprofile может вас заинтересовать. Ubuntu должен иметь все необходимые вам пакеты.

2

Канонический пример полного инструмента профилирования системы (для Solaris, OS X, FreeBSD) - DTrace. Но он еще не полностью доступен в Linux (вы можете попробовать here, но сайт для меня сейчас не работает, и я сам не пробовал). Существует множество инструментов в различных состояниях полезности для полного профилирования системы и профилирования ядра в Linux.

Вы могли бы рассмотреть исследования:

1

Как уже упоминалось в принятом ответе, Zoom может делать некоторые удивительные вещи. Я использовал его для понимания поведения потоков вплоть до оптимизации сборки, сгенерированной компилятором.

2

Allinea MAP является профилировщиком для C++ и других родных языков в Linux. Он коммерчески поддерживается моим работодателем. Он имеет графический интерфейс и профилирование уровня исходного кода и профилирует код практически без замедления, что делает его очень точным, когда релевантность времени в других подсистемах - например, для ввода-вывода.

Callgrind был полезен и точен, но замедление было ~ 5x, поэтому я мог выполнять только небольшие прогоны. Он может фактически подсчитать количество раз, когда функция вызывается, что полезно для понимания асимптотического поведения.

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