Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопросы профилирования программ
Форум на CrossPlatform.RU > Разработка > Инструменты разработчика
Iron Bug
Предлагаю обсудить тему профайлеров. Кто чем пользуется, какие есть полезные фичи и т.п.

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

у меня вот задача: как определить, какой из потоков в многопоточном приложении жрёт проц? (система - венда)
есть прога, в ней 15 потоков. иногда начинает жрать проц. поймать её в момент, когда она его жрёт, я могу. а вот как дальше в дебаге (или ещё где) определить, а какой конкретно процесс занимает весь проц - не могу. из прыжков по дебагу ничего не следует: при этом не видно общую загрузку проца, ибо всё происходит "медленно и печально".
как бы так исхитриться, чтобы понять, в каком потоке возникает проблема?
CodeHunter
Я под Windows юзаю вот это - Intel Paralel Studio
Можно проверить скок и кто использует проц или ядра проца + посмотреть что можно улучшить (в плане параллелизма)
Iron Bug
а оно загрузку проца отдельными потоками умеет мониторить? у меня проблема в том, что загрузка проца возникает не сразу, а часов так через 8-10 работы программы. причём, гадство, при этом функциональность не меняется: всё работает, только дико жрёт проц почему-то. и по идее мне надо сделать так: запустить прогу надолго, потом вручную проверить, что она начала жрать проц и подключиться с профайлером. ну или можно сразу запускать, но чтобы можно было надолго оставить и потом включить отладку и смотреть - что и где.
Iron Bug
Попробовала я Intel Parallel Studio. Хорошая штука, мне очень понравилась. Профилирует времена, затраченные на вызовы процедур, ищет узкие места в программе, всякие дедлоки. Много полезного, я ещё всё не пересмотрела там.
Правда, свой баг с пожиранием проца я так и не нашла: с замерами под IPS баг не проявляется, хоть тресни... Видать, чуть-чуть медленнее прога работает и этого достаточно, чтобы он не проявился. Гоняла двое суток подряд - ни единой ошибки и с процом всё нормально... а без слежки IPS он возникает :)
Алексей1153
Iron Bug, а ты сделай отладочные штампы времени (тиков) во всех функциях (да да, понимаю, но куда деваться, когда край? :) ) Считай разницу везде, и когда будет невероятно большая разница - выводи имя функции (или некую метку) в лог. Хоть станет ясно, где собака окопалась
Iron Bug
не, это нереально. программа большая. действительно большая. да и разница мне не поможет: там 16 потоков, которые зависят от данных, приходящих с железа и общаются между собой. причём данные приходят нормальные - это уже проверено. но через 8-10 часов прога начинает жрать проц. но она при этом внутри своей логики не тормозит, ни разу не сбоит, ничего вообще не портится, всё работает правильно. только вместо 1% начинает жрать 50% процессорного времени. в том и прикол, что просто так этот баг не поймаешь...
Алексей1153
а тормоза проявляются на одной какой-то машине или же на нескольких ? Просто, может быть, винда самовольничает и начинает озу дефрагментировать или ещё что. (умеет ли она это делать, кстати - дефрагментировать озу ? )) )
Iron Bug
в общем, нашла я багу. дня три искала, тестировала анализировала. при одном из условий нарушалась синхронизация и не сбрасывался флаг и один процесс начинал в цикле выполнять кучу ненужных действий.
нашла с помошью Intel Thread Profiler. он позволяет подсчитывать количество вызовов, время, затраченное на выполнение каждой функции, время ожидания всяческих локов и ещё много чего можно с его помощью делать. очень удобный инструмент оказался и полезный. так бы я и не заподозрила, что именно этот поток гадит. в нём очень хорошо смотреть узкие места в приложении, искать, из-за чего конфликтуют процессы и т.п. можно также собирать статистику по ресурсам системы, да вообще море всяческих полезных функций. в общем, мне очень понравилась софтинка, рекомендую.
Алексей1153
Цитата(Iron Bug @ 10.11.2010, 9:57) *
Intel Thread Profiler

не подскажешь, какая версия посвежее и где качнуть ?
Iron Bug
у меня
Intel® VTune™ Performance Analyzer 9.1
Intel® Thread Profiler 3.1
качала с торрентов на rutracker'е.
Iron Bug
кстати, действительно крутая штука. я уже оптимизировала производительность софтины вдвое. и, возможно, это не предел. так не видно, где можно улучшить. а после анализа данных пара штрихов и поправок - и начинает летать.
molchanoviv
А под линем оно работает?
Iron Bug
Цитата(molchanoviv @ 12.11.2010, 10:53) *
А под линем оно работает?

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

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

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

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

А точно бесплатно?
На их сайте нашел только пробник на 30 дней или покупай.
Может там старенькая версия где-то лежит, а я просто не нашел. Хотя вроде VTune всегда платным был, для всех платформ.
Iron Bug
Цитата(Алексей1153 @ 12.11.2010, 11:28) *
не перестарайся , а то будет быстрее кампутера работать

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


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

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

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

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

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

Спасибо, нужно будет посмотреть, поностальгировать. :)
На Win98 помнится использовал VTune.
Sergey B.
Бывало
aarlan
а кто-нибудь знает как включить профилирование ядра в vtune в линуксе? что-то не нашел я в настройках такой опции
а то все мои функции в vdso упираются, и самого интересное там

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

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

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


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

в валгринде например все это видно было, а тут не пойму как включить
Iron Bug
я сейчас навскидку не помню (линюкс дома), но вроде там была возможность добавления библиотек для профилирования. возможно, нужно их просто как-то ему указать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.