Предлагаю обсудить тему профайлеров. Кто чем пользуется, какие есть полезные фичи и т.п.
Вот у меня сейчас есть задача: есть прога (моя), которая активно работает с железом под вендой. И вот при тестировании выясняется, что после 10-20 часов непрерывной работы она иногда начинает жрать до 30-40% процессорного времени (вместо нормального 1%). Случается это редко, сидеть и ждать, когда произойдёт глюк, как-то несподручно, а логически предположить, почему такое происходит, я пока не могу, хотя усиленно думаю и просматриваю код... Есть ли что-то такое под венду, что сможет вести лог использования ресурсов процессом, причём желательно не постоянно, а только когда это использование начинает зашкаливать выше какого-то установленного лимита? Ну и чтобы интервал логирования был хотя бы раз так 10-100 в секунду, а длительность тестирования можно было бы задать несколькими днями.
неужели никто не сталкивался с профилированием?
у меня вот задача: как определить, какой из потоков в многопоточном приложении жрёт проц? (система - венда)
есть прога, в ней 15 потоков. иногда начинает жрать проц. поймать её в момент, когда она его жрёт, я могу. а вот как дальше в дебаге (или ещё где) определить, а какой конкретно процесс занимает весь проц - не могу. из прыжков по дебагу ничего не следует: при этом не видно общую загрузку проца, ибо всё происходит "медленно и печально".
как бы так исхитриться, чтобы понять, в каком потоке возникает проблема?
Я под Windows юзаю вот это - http://software.intel.com/en-us/articles/intel-parallel-studio-home/
Можно проверить скок и кто использует проц или ядра проца + посмотреть что можно улучшить (в плане параллелизма)
а оно загрузку проца отдельными потоками умеет мониторить? у меня проблема в том, что загрузка проца возникает не сразу, а часов так через 8-10 работы программы. причём, гадство, при этом функциональность не меняется: всё работает, только дико жрёт проц почему-то. и по идее мне надо сделать так: запустить прогу надолго, потом вручную проверить, что она начала жрать проц и подключиться с профайлером. ну или можно сразу запускать, но чтобы можно было надолго оставить и потом включить отладку и смотреть - что и где.
Попробовала я Intel Parallel Studio. Хорошая штука, мне очень понравилась. Профилирует времена, затраченные на вызовы процедур, ищет узкие места в программе, всякие дедлоки. Много полезного, я ещё всё не пересмотрела там.
Правда, свой баг с пожиранием проца я так и не нашла: с замерами под IPS баг не проявляется, хоть тресни... Видать, чуть-чуть медленнее прога работает и этого достаточно, чтобы он не проявился. Гоняла двое суток подряд - ни единой ошибки и с процом всё нормально... а без слежки IPS он возникает
Iron Bug, а ты сделай отладочные штампы времени (тиков) во всех функциях (да да, понимаю, но куда деваться, когда край? ) Считай разницу везде, и когда будет невероятно большая разница - выводи имя функции (или некую метку) в лог. Хоть станет ясно, где собака окопалась
не, это нереально. программа большая. действительно большая. да и разница мне не поможет: там 16 потоков, которые зависят от данных, приходящих с железа и общаются между собой. причём данные приходят нормальные - это уже проверено. но через 8-10 часов прога начинает жрать проц. но она при этом внутри своей логики не тормозит, ни разу не сбоит, ничего вообще не портится, всё работает правильно. только вместо 1% начинает жрать 50% процессорного времени. в том и прикол, что просто так этот баг не поймаешь...
а тормоза проявляются на одной какой-то машине или же на нескольких ? Просто, может быть, винда самовольничает и начинает озу дефрагментировать или ещё что. (умеет ли она это делать, кстати - дефрагментировать озу ? )) )
в общем, нашла я багу. дня три искала, тестировала анализировала. при одном из условий нарушалась синхронизация и не сбрасывался флаг и один процесс начинал в цикле выполнять кучу ненужных действий.
нашла с помошью Intel Thread Profiler. он позволяет подсчитывать количество вызовов, время, затраченное на выполнение каждой функции, время ожидания всяческих локов и ещё много чего можно с его помощью делать. очень удобный инструмент оказался и полезный. так бы я и не заподозрила, что именно этот поток гадит. в нём очень хорошо смотреть узкие места в приложении, искать, из-за чего конфликтуют процессы и т.п. можно также собирать статистику по ресурсам системы, да вообще море всяческих полезных функций. в общем, мне очень понравилась софтинка, рекомендую.
у меня
Intel® VTune Performance Analyzer 9.1
Intel® Thread Profiler 3.1
качала с торрентов на rutracker'е.
кстати, действительно крутая штука. я уже оптимизировала производительность софтины вдвое. и, возможно, это не предел. так не видно, где можно улучшить. а после анализа данных пара штрихов и поправок - и начинает летать.
А под линем оно работает?
то есть, в принципе, с интеловского родного сайта можно качать, только потом таблетку надо найти
http://www.qtcentre.org/wiki/index.php?title=Profiling
а кто-нибудь знает как включить профилирование ядра в vtune в линуксе? что-то не нашел я в настройках такой опции
а то все мои функции в vdso упираются, и самого интересное там
стоит vtune_amplifier_xe_2011
я так понимаю, должен быть загружен драйвер специальный и юзер должен быть в группе vtune.
хотя стоп. если тебе нужно профилирование именно ядра - я не знаю, сожрёт ли он его. ты же не с icc собираешь ядро?
и зачем тебе профилирование ядра, если ты всё равно не сможешь там внутри ничего поменять, по сути?
я сейчас навскидку не помню (линюкс дома), но вроде там была возможность добавления библиотек для профилирования. возможно, нужно их просто как-то ему указать.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)