LINUX.ORG.RU

Ищу C профайлер с хорошей детализацией.

 , ,


2

4

Сабж. Я попробовал gperftools, но выхлоп меня несколько смущает: я получаю смесь информации о самопальных и библиотечных функциях. В целом это лучше, чем ничего, но не помогает выяснить, откуда хвосты растут.

Пример: gsl_histogram_pdf_free по статистике жрёт 10% ресурсов. Проблема в том, что я вообще не использую эту функцию, никак, она даже подключаться не должна. Я нашёл тот участок кода, который так себя странно ведёт, но больше информации выжать не удалось.

★★★★★

Говорят - lttng торт, но это не точно.

На самом деле - убедись для начала, что у тебя корректно окружение для запуска повторяемых бенчмарков. Например - по максимуму исключи работу остальных процессов в системе.

onhydro
()

я использую perf (который linux kernel performance). но у меня musl, под ним некоторые профилировщики вообще не работают. там нет счётчиков. там, где есть счётчики (например, glibc), можно использовать gprof.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

какой смысл разработчику использовать musl? а что если address sanitizer понадобится или эти счётчики? или софт из p9?

mittorn ★★★★★
()
Ответ на: комментарий от Iron_Bug

я использую perf

Сказать «я использую perf», всё равно что сказать «я использую какие-то тулзы». Потому что в perf куча всяких инструментов, с различной степенью полезности в различных обстоятельствах.

i-rinat ★★★★★
()

Если замедление программы в 10-20 раз не проблема, то проще всего взять callgrind (это в составе Valgrind). Для просмотра достаточно удобно использовать kcachegrind.

Если замедлять программу неудобно, то сбор данных с помощью perf record, а затем преобразование в flamegraph: https://github.com/brendangregg/FlameGraph.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

ну, по perf есть маны. я их тут пересказывать не планировала. кому нужно - почитают, я думаю.

полезность его в том, что он работает на любом дистре и с любыми библиотеками. профилирует нагрузку на cpu вполне сносно.

Iron_Bug ★★★★★
()
Ответ на: комментарий от mittorn

ну, у меня на машине такая сборка. на серверах другая. какая разница? мне musl нравится, меня всё устраивает.

Iron_Bug ★★★★★
()

Надо пилить свой инструментальный

С тебя фронт/визуализатор на QML, с меня бек на сишечке (все кроме контекст свитч) :)

Stil ★★★★★
()
Ответ на: комментарий от Iron_Bug

ну, по perf есть маны

Вот ман по perf, полностью:

PERF(1)                     General Commands Manual                    PERF(1)

NAME
       perf - performance analysis tools for Linux

SYNOPSIS
       perf [--version] [--help] COMMAND [ARGS]

DESCRIPTION
       Performance  counters  for  Linux  are are a new kernel-based subsystem
       that provide a framework for all things performance analysis.  It  cov‐
       ers  hardware level (CPU/PMU, Performance Monitoring Unit) features and
       software features (software counters, tracepoints) as well.

       Each version of the perf tools may depend on new  kernel  features,  so
       you must install a different version for each kernel version.  The perf
       command will automatically run the correct version for the running ker‐
       nel version.

SEE ALSO
       perf_version(1)

                                  4 July 2010                          PERF(1)

я их тут пересказывать не планировала. кому нужно - почитают, я думаю.

Но сказать что-нибудь хотелось, да? Всё-таки надо что-то конкретное давать, а не просто понтами кидаться.

i-rinat ★★★★★
()
Ответ на: комментарий от backbone

Уже много лет как вызывают зависть коллег.)

Коллеги на Windows, что ли? Там Intel VTune есть. Я ещё как-то пользовался GlowCode, он попроще.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Но сказать что-нибудь хотелось, да?

да нет. не хотелось как раз.

внезапно! perf --help

кто бы мог подумать, что обычный help содержит полное(полное, Карл) описание всех опций. но спросить что-нибудь хотелось, да?

и для простого профилирования record и report хватит за глаза.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

внезапно! perf --help

Это (внезапно!) не «ман по perf».

но спросить что-нибудь хотелось, да?

Мне — нет, я уже в курсе нужных опций. И в курсе, что информации в perf --help недостаточно, если хочешь действительно внятные результаты получать.

и для простого профилирования record и report хватит за глаза.

Если у тебя одна небольшая функция, которая одна 50% времени CPU сжирает, то да. Но после того, как осознаёшь, что сортировать пузырьком массив в миллион элементов не стоило, результаты perf report уже не такие говорящие. Нужны детали, а их report не даёт.

Если тебе всегда хватало record и report, то просто код был отстойный.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)

oprofile ещё, если железо поддерживает нормальные евенты

sergej ★★★★★
()
Ответ на: комментарий от i-rinat

VTune когда-то и на лине был. и даже сейчас наверняка есть. но там как-то сложно было с бесплатной эксплуатацией: интел в какой-то момент прикрыл халяву. да и проприетарщина всё-таки. что я о нём помню: очень детальные отчёты. но жрёт дофига ресурсов. просто немеряно. ну, и тормозит работу софта. не всякий софт так можно тестировать.

Iron_Bug ★★★★★
()
Ответ на: комментарий от i-rinat

Если у тебя одна небольшая функция, которая одна 50% времени CPU сжирает, то да.

нет, у меня модуль в кернеле, весь стек TCP, криптография, хайлоад. perf прекрасно работает.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

очень детальные отчёты. но жрёт дофига ресурсов. просто немеряно. ну, и тормозит работу софта. не всякий софт так можно тестировать.

Документацию надо читать. :-D

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

нет. это не зависит от документации. скорее, от нагрузки. у меня тогда был софт, который очень бурно общался с железом. отладка в VTune была невозможна: железо не поддерживает задержки софта на приём через DMA. и да, он жрёт просто охрененное количество памяти сам по себе, кроме отлаживаемого софта. мелкий и некритичный к временным задержкам софт так отлаживать можно. крупный и риалтаймовый - увы.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

нет. это не зависит от документации. скорее, от нагрузки.

Как это можно такое заявлять без чтения даже базовой документации?

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

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

да и проприетарщина всё-таки.

И это говорит человек, пишущий проприетарщину. Где упомянутый тобой модуль ядра? Спрятан и закрыт?

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

теперь пишу код для внутреннего использования и его никуда не поставляют.

Если ПО является частной собственностью правообладателей и не удовлетворяет критериям свободного ПО, оно является проприетарным. А следовательно, ты пишешь проприетарщину.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Как это можно такое заявлять без чтения даже базовой документации?

а кто сказал, что я её не читала? фантазии, фантазии. но таки даже не на каждый вход и выход если ставить, если у тебя по DMA валит 250 метров в секунду, то не выгребает он. для быстрых приложений он не канает. также не канает он для телекома. проверено на практике. и память один фиг жрёт.

для маленьких и простых приложений он хорошо работает, как я и сказала. всякие юзерские приложения можно отлаживать.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

а кто сказал, что я её не читала?

Не вижу в ответах ключевых слов. Это и выдаёт. :-)

таки даже не на каждый вход и выход если ставить

Вот видишь, опять важных слов нет.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

опять фантазии. выдаёт, блин. я тут не в шпиона играю.

впрочем, для меня это неактуально: я уже несколько лет не юзаю проприетарщину. несколько - это уже много больше десяти. но если кто юзает - можно попробовать. конечно, если интел до сих пор разрешает опенсорцу юзать свои продукты бесплатно.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

опять фантазии. выдаёт, блин. я тут не в шпиона играю.

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

Ключевое слово: семплирующий профилировщик. Как perf. Он менее точный, но требует намного меньше ресурсов. И задержек почти не вносит.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

у меня с профилировщиками такая проблема - они показывают какую-нибудь служебную функцию типа «увеличение количества ссылок на единицу» и «уменьшение количества ссылок на единицу». Уходит на них 50% времени. И что с этим делать?

Einstok_Fair ★★☆
()
Ответ на: комментарий от Einstok_Fair

Уходит на них 50% времени. И что с этим делать?

Уменьшить число этих вызовов. Сомневаюсь, что они тебе там нужны.

i-rinat ★★★★★
()
Ответ на: комментарий от Einstok_Fair

Как ты лапками профайлер ипользуешь?

Я не понимаю, какой результат ты хочешь получить. Код не твой, вникать в него и менять ты не хочешь. Зачем профилировать?

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Зачем профилировать?

он тормозит! Интересно было - почему. Поскольку выяснить что можно сделать не удалось, пришлось код отложить (и с тех пор я к нему не возвращался).

Einstok_Fair ★★☆
()
Ответ на: комментарий от Einstok_Fair

Иногда нужно поменять алгоритм, чтобы делать меньше работы, а не пытаться делать её быстрее.

Если это gui-приложение, «тормозить» означает задержки в ui-нити. Нужно вынести тяжёлую работу в фоновую нить, и тогда задержки станут меньше.

i-rinat ★★★★★
()
Ответ на: комментарий от Iron_Bug

С бесплатной эксплуатацией легко. На сайте при регистрации написать какой OpenSource продукт ты разрабатываешь и с большой вероятностью дадут лицензию. И на компилятор, и на профайлер, и на прочие их утилиты. Мне даже апдейты приходят.

a1batross ★★★★★
()
Ответ на: комментарий от backbone

Анонимус Выше отписал - Valgrind + Kcachegrind. Уже много лет как вызывают зависть коллег.)

Поддерживаю такую связку. Callgrind (из valgrind) + KСachegrind использовал много одно время. Мне очень понравилось.

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

Ну, и, конечно, само профилирование через callgrind искажает реальную картину.

И еще, профилирование может совсем не показывать реальную причину тормозов. Еще как может!

dave ★★★★★
()
Последнее исправление: dave (всего исправлений: 3)
Ответ на: комментарий от i-rinat

Если тебе всегда хватало record и report, то просто код был отстойный.

заметь, на это возражений не было )

x905 ★★★★★
()
Ответ на: комментарий от dave

Понятно, callgrind не идеален, но постоянно совершенствуется. :)

И еще, профилирование может совсем не показывать реальную причину тормозов. Еще как может! Блокировки и таймауты, наверное, к примеру, да.

backbone ★★★★★
()
Ответ на: комментарий от a1batross

Уже давно Intel System Studio (в котором есть и Vtune) можно использовать бесплатно даже для коммерческой разработки. Просто нужно обновлять БЕСПЛАТНУЮ лицензию каждые 90 дней.

Я так и использую.

zamazan4ik ★★
()

Поставь VTune и профилируй через него. Если процессор AMD, то жалкой альтернативой является CodeXL

zamazan4ik ★★
()
Последнее исправление: zamazan4ik (всего исправлений: 2)
Ответ на: комментарий от dave

проблема с Callgrind в том, что он ну оочень сильно замедляет работу программы. И то, что исполнение программы под валгриндом не совсем соответствует исполнению на разном процессоре. И если мы, например, хотим посмотреть, как там наша программа работает с кэшем процессора, то Callgrind тут не годится, пусть даже и имеет возможность кастомной настройки кэшей.

zamazan4ik ★★
()

Пример: gsl_histogram_pdf_free по статистике жрёт 10% ресурсов. Проблема в том, что я вообще не использую эту функцию, никак, она даже подключаться не должна.

вроде звучит как бага в коде, а не как проблемы с профайлером, нет? А если самому руками побектрейсить через  gdb -x --batch, та же картина?

Гугловому профайлеру можно указать явно, какие куски профилировать (если есть доступ к коду конечно). Это не поможет?

harvos
()
Ответ на: комментарий от zamazan4ik

Я не пробовал, просто прочёл это.

Sample Intel® VTune™ Amplifier for 30 days. You then have the option to convert to a paid license, which provides Priority Support for one year.

backbone ★★★★★
()
Ответ на: комментарий от x905

заметь, на это возражений не было )

Отсутствие возражений не означает согласия. :)

i-rinat ★★★★★
()
Ответ на: комментарий от zamazan4ik

И если мы, например, хотим посмотреть, как там наша программа работает с кэшем процессора, то Callgrind тут не годится, пусть даже и имеет возможность кастомной настройки кэшей.

cachegrind

i-rinat ★★★★★
()
Ответ на: комментарий от zamazan4ik

Просто нужно обновлять БЕСПЛАТНУЮ лицензию каждые 90 дней.

А, ясно, спс.

backbone ★★★★★
()
Ответ на: комментарий от backbone

Понятно, callgrind не идеален, но постоянно совершенствуется. :)

И еще, профилирование может совсем не показывать реальную причину тормозов. Еще как может! Блокировки и таймауты, наверное, к примеру, да.

Нет, тут проблема принципиальная, на уровне теории. И задача профилирования обычно состоит в том, чтобы найти истинные причины тормозов. То, что показывает профилировщик - это обычно симптомы, а не причина. Но бывает, что везет.

dave ★★★★★
()
Ответ на: комментарий от i-rinat

Cachegrind не может полностью эмулировать работу кэша современного процессора.

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