Подтвердить что ты не робот

Профилирование производительности в Linux

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

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

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

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

4b9b3361

Ответ 3

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

Вы можете рассмотреть возможность изучения:

Ответ 4

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

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

Ответ 5

Скомпилируйте с -pg, запустите программу, а затем используйте gprof

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

Подробнее см. man gprof.

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 10

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

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