Upload
sqalab
View
252
Download
5
Embed Size (px)
DESCRIPTION
Доклад Виктора Гляненко на SQA Days-15. 18-19 апреля, 2014, Москва. www.sqadays.com
Citation preview
Тестирование производительности многопоточного кода игровых
проектов на практических примерахВиктор Гляненко, Антон Васильев
Виктор Гляненко
QA Lead
Антон Васильев
Senior Game Engine Programmer
Основные устройства влияющие на производительность
CPU и GPU
На что ориентируются разработчики?
Frames per Second (FPS) - — количество сменяемых кадров за единицу времени.
Различия тестирования производительности на PC и
современных игровых консолях
Различия тестирования производительности на PC и
современных игровых консолях
≠
Статистика производительности с различных PC конфигураций
Конфигурации PC
Результаты значений FPS
Модель многопоточного приложения как графа работ.
Root
Player Control
Physics
AI Update
Particle
Render
Sound
Physics Tick
AI Batch 0 AI Batch 1
Particle Tick
Модель многопоточного приложения как графа работ.
Изображено примерно 10% “движка”
Render
Как измерить многопоточный код?
Факторы влияющие на тестирования производительности многопоточных
приложений
•Конфигурация железа
Факторы влияющие на тестирования производительности многопоточных
приложений
•Конфигурация железа
•Сторонние приложения
Факторы влияющие на тестирования производительности многопоточных
приложений
•Конфигурация железа
•Сторонние приложения
Стратегия измерения
Возможности профилирования приложений в Visual Studio 2012
Profiler
Возможности профилирования приложений в Visual Studio 2012
Profiler
Concurrency Visualizer
Какие проблемы возможны?
а) Слишком долгие задачи.
Тоже самое, что и в случае однопоточного кода - выполнение кода занимает много времени.
Признаки:
Нагрузка на CPU близка к 100% (все ядра загружены).
Слишком долгие задачи
Слишком долгие задачи
Какие проблемы возможны?
б) Критический путь.
Признаки:
Нагрузка на CPU меньше 100% И мало синхронизаций внутри отдельных задач.
CPU ждет GPU.
Критический путь
Критический путь
Критический путь
Если замерять время то мы не увидим что задача больше половины времени простаивала(propGEOM_MORPH)
Критический путь
Какие проблемы возможны?
в) Синхронизации.Синхронизации - это ожидания какого-то события или освобождения какого-то ресурса задачей.
Признаки:
Нагрузка на CPU меньше 100% И есть синхронизации внутри отдельных задач.
Синхронизация
Синхронизация
Синхронизация
Видно что нагрузка в районе 55-60%Потоки простаивают внутри задач.CALC_ROOT_MOTION
Какие проблемы возможны?
г) GPU
Признаки:
Нагрузка на GPU близка к 100%
GPU
CPU ожидает GPU
Заключение
• В многопоточных системах не нужно измерять реальное время работы кода, считайте время выполнения кода на CPU
• Замеряйте синхронизацию между задачами
• Ищите критические пути
Вопросы?
Спасибо!
• Контакты:• [email protected]• Skype: botikus1