LINUX.ORG.RU

[oprofile] [callgrind] Профилирование приложений


0

1

Дорогой ЛОР, совсем беда с профилированием си кода под Линукс.

Oprofile прекрасная тулзень, но она считает лишь чистое время проведённое внутри функции. В результате он мне выдаёт, что 70% времени потрачено в вызовах ядра линукса, 15% в вызовах операций над базой, а в каждой библиотеке логики приложения жалкие доли процента. И самая затратная по времени функция memcpy. А мне бы хотелось, чтобы было как в callgrind, время проведённое внутри функции приплюсовывалось к функции её вызвавшей. Может кто осилил все флаги этого профайлера и там можно сделать что-то похожее?

И чтобы два раза не вставать, совсем не получается профилировать мой продукт при помощи callgrind. Видимо напоролся на 12309. Падение производительности в 30-50 раз ещё можно пережить. Но система становится абсолютно неотзывчивой после запуска профилируемого теста через valgrind. Там происходит просто огромное количество операций над базой. А в top видно, что загрузка процессора/памяти не превышает 5%. Но линукс практически зависает. Ввод одного символа в консоли происходит раз в 20-30 минут, top обновляется так же часто.

Все остальные тулзы для профилирования что я пробовал совсем не умеют многопроцессные/многопоточные приложения.

Может кто сталкивался с похожим и победил?

Понятно, что именно выборка/запись в базу ресурсоёмки, я как понимаю, тебе надо отпрофилировать логику. Может поставить «заглушки» на операции с базой и профилироваться так?

DELIRIUM ☆☆☆☆☆
()

Я не осилил OProfile при профилировании. Зато пока читал про callgrind, наткнулся на KCachegrind, gui для него (ну и, видимо, для cachegrind'а тоже). А в его описании упоминание утилиты op2calltree, которая преобразует выхлоп OProfile в нечто, читаемое KCachegrind'ом.

Ещё мне пригодилось -pg у gcc, но оно мне не понравилось как раз тем, что считало время и вызовы только в самой программе. Получалось что-то около 0.15 сек при реальном времени около 10 минут, всё остальное время было в библиотеках и в вывод gprof не попало.

-fprofile-arcs -ftest-coverage — ещё один удобный инструмент gcc — считает сколько раз выполнена та или иная строчка. Оверхед у pg и coverage небольшой, я на глаз не заметил.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.