2010-03-23 2 views
36

Я использовал весь свой профилирование Linux с помощью gprof.Как профилировать многопоточное приложение C++ на Linux?

Однако, с моим многопоточным приложением, его вывод представляется непоследовательным.

Теперь я выкопал этот итог:

http://sam.zoy.org/writings/programming/gprof.html

Однако, это от очень давно, и в моем выходе дргоГо, оказывается мои дргиЙ перечисляют функцию, используемую неосновными нитями.

Итак, мои вопросы:

1) В 2010 году, я могу легко использовать дргоЕ в профиль многопоточных приложений Linux C++? (Ubuntu 9.10) 2) Какие еще инструменты следует изучать для профилирования?

+0

Я рекомендую использовать valgrind – sisis

+4

Желательно то, что не замедляет столько, сколько делает valgrind. – anon

+2

Пожалуйста, скажите мне альтернативы, но не альтернативы. Проверьте. – dmckee

ответ

9

Редактировать: добавлено еще answer на профилировщик бедных людей, в котором ИМХО лучше подходит для многопоточных приложений.

Посмотрите на oprofile. Накладные расходы на профилирование этого инструмента незначительны и он поддерживает многопоточные приложения --- пока вы не хотите разрешать конкуренцию mutex (что является очень важной частью профилирования многопоточных приложений)

+1

Zoom (загрузка на http://rotateright.com) основывается на oprofile и значительно облегчает понимание данных. – federal

+0

@federal Кажется, что вы должны быть пользователем root, чтобы установить Zoom + _ + – Alaya

5

Посмотрите на Valgrind.

+1

Valgrind + cachegrind –

+0

Проблема, которая привела меня к этой теме, - это странные различия в планировании Callgrind и тот факт, что она запускает все в одном потоке. Я пытаюсь найти узкие места из своих атомных операций и шпиндельных закладок. Одиночная нарезка всех убивает проблемы конкуренции и производительности, которые могут вызвать. Таким образом, Вальгринд, несмотря на мои пожелания об обратном, не всегда является профайлером выбора. –

5

Посмотрите на Zoom.

+0

Кажется, что если я не корень, я не могу его установить. – Alaya

6

Paul R сказал, что есть посмотрите на Zoom. Вы также можете использовать lsstack, который является низкотехнологичным, но неожиданно эффективным, compared to gprof.

Добавлено: Поскольку вы уточнили, что используете OpenGL на 33 мс, моя предыдущая рекомендация стоит. Кроме того, то, что я лично делал в таких ситуациях, является эффективным и неинтуитивным. Просто запустите его с типичной или проблемной рабочей нагрузкой и просто остановите его, вручную, на своих дорожках, и посмотрите, что он делает и почему. Сделайте это несколько раз. Теперь, если это только иногда misbehaves, вы хотели бы остановить его только в то время, пока он плохо себя ведет. Это непросто, но я использовал прерывание будильника для правильной задержки. Например, если один кадр из 100 занимает более 33 мс, то в начале кадра установите таймер на 35 мс и в конце кадра отключите его. Таким образом, он будет прерываться только тогда, когда код занимает слишком много времени, и он покажет вам, почему. Конечно, один образец может пропустить код вины, но 20 образцов не пропустят его.

5

Посмотрите на poor man's profiler. Удивительно, но есть несколько других инструментов, которые для многопоточных приложений выполняют профилирование профилей и профилирование взаимного доступа, и PMP делает это, даже не требуя установки каких-либо (до тех пор, пока у вас есть gdb).

0

Вы можете случайно запустить pstack, чтобы узнать стек в данной точке. Например. 10 или 20 раз. Наиболее типичный стек, где приложение проводит большую часть времени (по опыту, мы можем предположить распределение Парето).

Вы можете объединить эти знания с трассирования или фермой (Solaris) для отслеживания системных вызовов, и ртара для печати памяти.

Если приложение работает по выделенной системе, у вас также есть sar, чтобы измерить процессор, память, ввод-вывод и т. Д., Чтобы профилировать общую систему.

+0

Проверить большинство проголосовавших сообщений от Mike Dunlavey https: // stackoverflow.com/users/23771/mike-dunlavey - где он доказал, что 5 выборок стека вызовов (gdb или pstack или ...) достаточно статистически. Кроме того, 400 сообщений в теге профилирования: https://stackoverflow.com/search?q=user:23771%20[profiling]%20is:answer – osgx

0

Поскольку вы не говоря уже о некоммерческих, я могу предложить компании Intel VTune. Это не бесплатно, но уровень детализации очень впечатляет (и накладные расходы незначительны).

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