130 likes | 428 Views
Исследование и тестирование семплирующего метода профайлинга на примере профилировщика производительности Intel VTune Amplifier XE 2011. Выполнил: Одеров Роман, 345 гр. Научный руководитель: Баклановский М.В., ст. преподаватель кафедры СП. 2012. Повысить производительность!.
E N D
Исследование и тестирование семплирующего метода профайлинга на примере профилировщика производительности Intel VTune Amplifier XE 2011 Выполнил: Одеров Роман, 345 гр. Научный руководитель: Баклановский М.В., ст. преподаватель кафедры СП 2012
Методы профайлинга • Семплирование • Периодический замер системных счетчиков • Инструментирование • Добавление в код специальных команд, осуществляющих сбор информации о ее работе
Достоинства и недостатки методов • Семплирование + относительная простота + не изменяет код программы - статистический подход • Инструментирование + точность - изменение кода программы
Существующие продукты СЕМПЛИРОВАНИЕ Intel VTune Amplifier XE Microsoft xPerf AMD CodeAnalyst
Постановка задачи Определить • недостатки семплирования • слабые места профайлера • влияние на производительность системы
“Simple Asm” • <…> • movrcx, 10000000000 • l1: • movrax,rbp • loop l1 • <…> Функция, выполняющая mov‘rcx’ раз Результат: не обнаружено ничего лишнего без VTune~ 16316 мс с VTune~16458 мс
“FunctionStackTest” • Main • AExternal • AMiddle • AInternal Вложенные функции Результат:с оптимизацией профайлер обнаружил только функции main и AMiddle. Без оптимизации – все. С VTune~ 9000 мс Без VTune~ 9000 мс
“CreateProcessesTest” • NewProcessCreateAndExit(){ • <...> • CreateProcess(“EmptyFunction.exe”,...); • <...> • } • Main(){ • for (i = 0; i < quantity; i++) • NewProcessCreateAndExit(); • } Функция, создающая “пустые” процессы Результат:500 процессов без VTune~ 18 секунд 500 процессов сVTune ~ 15 минут Замечание:сбор результатов~ 30 минут
Оценка пропущенных вызовов Идея: • вызывать в циклах (в разных местах программы П1) функцию IncCounter() • замерить время работы функции с профайлером/без профайлера • оценить замедление (накладные расходы по времени) и количество пропущенных вызовов. Реализация: • Дополнительная программа (П2), реализующая подсчет времени работы только функции IncCounter()
“Saw” Цель: выявить ошибки семплирующего подхода, вызванные аппроксимирующей техникой Способ: из стека вызовов функций соорудить распределенную (во времени) “пилу” Реализация: нужно вызывать различные функции N раз “в глубину”, причем N будет выбираться случайно
Состояние стека во времени Глубина вложенности функций t
Результаты • Выявлены недостатки семплирования • Функция может быть незамеченной, даже если работает большую часть времени • Функция может быть отражена, как hotspot, даже если работает ничтожно малое время • Накоплен набор тестов, подтверждающих выдвинутые гипотезы • Замечено серьезное влияние на производительность Планы на будущее • Продолжение разработки прототипапрофайлера ядра MS WS2008 R2 x64