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