1 - Кафедра Системного Программирования

advertisement
Исследование и тестирование
семплирующего метода профайлинга
на примере профилировщика производительности
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
Download