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 юзаю вот это -
Intel Paralel StudioМожно проверить скок и кто использует проц или ядра проца + посмотреть что можно улучшить (в плане параллелизма)
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)
производительность софтины вдвое. и, возможно, это не предел.
не перестарайся , а то будет быстрее кампутера работать
Цитата(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/n...tware-download/Там для линя чуть другие инструменты, но вполне рабочие. Я дома маленько их тестировала. Но так как там у меня проблем никогда не возникало - то не углублялась особо.
molchanoviv
12.11.2010, 15:33
Цитата(Iron Bug @ 12.11.2010, 8:56)
да. под линём там даже больше фич для потоков(потому что у линя потоки другие) и бесплатно.
Надо взять на заметку.
Цитата(Iron Bug @ 12.11.2010, 9:39)
Там для линя чуть другие инструменты, но вполне рабочие.
Спасибо, нужно будет посмотреть, поностальгировать.
На Win98 помнится использовал VTune.
Sergey B.
28.11.2010, 17:59
а кто-нибудь знает как включить профилирование ядра в vtune в линуксе? что-то не нашел я в настройках такой опции
а то все мои функции в vdso упираются, и самого интересное там
стоит vtune_amplifier_xe_2011
Iron Bug
11.4.2011, 21:11
я так понимаю, должен быть загружен драйвер специальный и юзер должен быть в группе vtune.
хотя стоп. если тебе нужно профилирование именно ядра - я не знаю, сожрёт ли он его. ты же не с icc собираешь ядро?
и зачем тебе профилирование ядра, если ты всё равно не сможешь там внутри ничего поменять, по сути?
Цитата(Iron Bug @ 11.4.2011, 22:11)
я так понимаю, должен быть загружен драйвер специальный и юзер должен быть в группе vtune.
хотя стоп. если тебе нужно профилирование именно ядра - я не знаю, сожрёт ли он его. ты же не с icc собираешь ядро?
и зачем тебе профилирование ядра, если ты всё равно не сможешь там внутри ничего поменять, по сути?
я имел в виду, не профилирование ядра как такового)
сейчас у меня все стэки моих функций заканчиваются на динамической библиотеке vdso. то есть я на пример не вижу там функций типа read, write - системных вызовов. хочется конкретнее понять где перформанс падает
в валгринде например все это видно было, а тут не пойму как включить
я сейчас навскидку не помню (линюкс дома), но вроде там была возможность добавления библиотек для профилирования. возможно, нужно их просто как-то ему указать.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.