Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Инструменты разработчика _ Вопросы профилирования программ

Автор: Iron Bug 22.10.2010, 12:22

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

Вот у меня сейчас есть задача: есть прога (моя), которая активно работает с железом под вендой. И вот при тестировании выясняется, что после 10-20 часов непрерывной работы она иногда начинает жрать до 30-40% процессорного времени (вместо нормального 1%). Случается это редко, сидеть и ждать, когда произойдёт глюк, как-то несподручно, а логически предположить, почему такое происходит, я пока не могу, хотя усиленно думаю и просматриваю код... Есть ли что-то такое под венду, что сможет вести лог использования ресурсов процессом, причём желательно не постоянно, а только когда это использование начинает зашкаливать выше какого-то установленного лимита? Ну и чтобы интервал логирования был хотя бы раз так 10-100 в секунду, а длительность тестирования можно было бы задать несколькими днями.

Автор: Iron Bug 26.10.2010, 14:48

неужели никто не сталкивался с профилированием?

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

Автор: CodeHunter 26.10.2010, 15:43

Я под Windows юзаю вот это - http://software.intel.com/en-us/articles/intel-parallel-studio-home/
Можно проверить скок и кто использует проц или ядра проца + посмотреть что можно улучшить (в плане параллелизма)

Автор: Iron Bug 26.10.2010, 17:56

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

Автор: Iron Bug 29.10.2010, 21:24

Попробовала я Intel Parallel Studio. Хорошая штука, мне очень понравилась. Профилирует времена, затраченные на вызовы процедур, ищет узкие места в программе, всякие дедлоки. Много полезного, я ещё всё не пересмотрела там.
Правда, свой баг с пожиранием проца я так и не нашла: с замерами под IPS баг не проявляется, хоть тресни... Видать, чуть-чуть медленнее прога работает и этого достаточно, чтобы он не проявился. Гоняла двое суток подряд - ни единой ошибки и с процом всё нормально... а без слежки IPS он возникает :)

Автор: Алексей1153 29.10.2010, 21:28

Iron Bug, а ты сделай отладочные штампы времени (тиков) во всех функциях (да да, понимаю, но куда деваться, когда край? :) ) Считай разницу везде, и когда будет невероятно большая разница - выводи имя функции (или некую метку) в лог. Хоть станет ясно, где собака окопалась

Автор: Iron Bug 29.10.2010, 22:10

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

Автор: Алексей1153 29.10.2010, 22:17

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

Автор: Iron Bug 10.11.2010, 7:57

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

Автор: Алексей1153 12.11.2010, 7:26

Цитата(Iron Bug @ 10.11.2010, 9:57) *
Intel Thread Profiler

не подскажешь, какая версия посвежее и где качнуть ?

Автор: Iron Bug 12.11.2010, 8:43

у меня
Intel® VTune™ Performance Analyzer 9.1
Intel® Thread Profiler 3.1
качала с торрентов на rutracker'е.

Автор: Iron Bug 12.11.2010, 8:43

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

Автор: molchanoviv 12.11.2010, 8:53

А под линем оно работает?

Автор: Iron Bug 12.11.2010, 8:56

Цитата(molchanoviv @ 12.11.2010, 10:53) *
А под линем оно работает?

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

Автор: Алексей1153 12.11.2010, 9:28

то есть, в принципе, с интеловского родного сайта можно качать, только потом таблетку надо найти

Цитата(Iron Bug @ 12.11.2010, 10:43) *
производительность софтины вдвое. и, возможно, это не предел.

не перестарайся , а то будет быстрее кампутера работать :D


Автор: BRE 12.11.2010, 9:34

Цитата(Iron Bug @ 12.11.2010, 8:56) *
да. под линём там даже больше фич для потоков(потому что у линя потоки другие) и бесплатно.

А точно бесплатно?
На их сайте нашел только пробник на 30 дней или покупай.
Может там старенькая версия где-то лежит, а я просто не нашел. Хотя вроде VTune всегда платным был, для всех платформ.

Автор: Iron Bug 12.11.2010, 9:39

Цитата(Алексей1153 @ 12.11.2010, 11:28) *
не перестарайся , а то будет быстрее кампутера работать

ну, это для меня идеально :) я же с железом работаю, счёт идёт на микросекунды. так что чем быстрее - тем лучше.


Цитата(BRE @ 12.11.2010, 11:34) *
А точно бесплатно?

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

Вот список софтин для некоммерческой разработки:
http://software.intel.com/en-us/articles/non-commercial-software-download/

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

Автор: molchanoviv 12.11.2010, 15:33

Цитата(Iron Bug @ 12.11.2010, 8:56) *
да. под линём там даже больше фич для потоков(потому что у линя потоки другие) и бесплатно.

Надо взять на заметку.

Автор: BRE 12.11.2010, 16:13

Цитата(Iron Bug @ 12.11.2010, 9:39) *
Там для линя чуть другие инструменты, но вполне рабочие.

Спасибо, нужно будет посмотреть, поностальгировать. :)
На Win98 помнится использовал VTune.

Автор: Sergey B. 28.11.2010, 17:59

http://www.qtcentre.org/wiki/index.php?title=Profiling

Автор: aarlan 11.4.2011, 15:56

а кто-нибудь знает как включить профилирование ядра в vtune в линуксе? что-то не нашел я в настройках такой опции
а то все мои функции в vdso упираются, и самого интересное там

стоит vtune_amplifier_xe_2011

Автор: Iron Bug 11.4.2011, 21:11

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

хотя стоп. если тебе нужно профилирование именно ядра - я не знаю, сожрёт ли он его. ты же не с icc собираешь ядро?
и зачем тебе профилирование ядра, если ты всё равно не сможешь там внутри ничего поменять, по сути?

Автор: aarlan 11.4.2011, 23:42

Цитата(Iron Bug @ 11.4.2011, 22:11) *
я так понимаю, должен быть загружен драйвер специальный и юзер должен быть в группе vtune.

хотя стоп. если тебе нужно профилирование именно ядра - я не знаю, сожрёт ли он его. ты же не с icc собираешь ядро?
и зачем тебе профилирование ядра, если ты всё равно не сможешь там внутри ничего поменять, по сути?


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

в валгринде например все это видно было, а тут не пойму как включить

Автор: Iron Bug 12.4.2011, 7:25

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

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)