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