Тестирование производительности многопоточного кода...
DESCRIPTION
Доклад Виктора Гляненко на SQA Days-15. 18-19 апреля, 2014, Москва. www.sqadays.comTRANSCRIPT
![Page 1: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/1.jpg)
Тестирование производительности многопоточного кода игровых
проектов на практических примерахВиктор Гляненко, Антон Васильев
![Page 2: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/2.jpg)
Виктор Гляненко
QA Lead
Антон Васильев
Senior Game Engine Programmer
![Page 3: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/3.jpg)
Основные устройства влияющие на производительность
CPU и GPU
![Page 4: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/4.jpg)
На что ориентируются разработчики?
Frames per Second (FPS) - — количество сменяемых кадров за единицу времени.
![Page 5: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/5.jpg)
Различия тестирования производительности на PC и
современных игровых консолях
![Page 6: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/6.jpg)
Различия тестирования производительности на PC и
современных игровых консолях
≠
![Page 7: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/7.jpg)
Статистика производительности с различных PC конфигураций
![Page 8: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/8.jpg)
Конфигурации PC
![Page 9: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/9.jpg)
Результаты значений FPS
![Page 10: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/10.jpg)
Модель многопоточного приложения как графа работ.
![Page 11: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/11.jpg)
Root
Player Control
Physics
AI Update
Particle
Render
Sound
Physics Tick
AI Batch 0 AI Batch 1
Particle Tick
![Page 12: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/12.jpg)
Модель многопоточного приложения как графа работ.
Изображено примерно 10% “движка”
Render
![Page 13: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/13.jpg)
Как измерить многопоточный код?
![Page 14: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/14.jpg)
Факторы влияющие на тестирования производительности многопоточных
приложений
•Конфигурация железа
![Page 15: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/15.jpg)
Факторы влияющие на тестирования производительности многопоточных
приложений
•Конфигурация железа
•Сторонние приложения
![Page 16: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/16.jpg)
Факторы влияющие на тестирования производительности многопоточных
приложений
•Конфигурация железа
•Сторонние приложения
Стратегия измерения
![Page 17: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/17.jpg)
Возможности профилирования приложений в Visual Studio 2012
Profiler
![Page 18: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/18.jpg)
Возможности профилирования приложений в Visual Studio 2012
Profiler
Concurrency Visualizer
![Page 19: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/19.jpg)
Какие проблемы возможны?
а) Слишком долгие задачи.
Тоже самое, что и в случае однопоточного кода - выполнение кода занимает много времени.
Признаки:
Нагрузка на CPU близка к 100% (все ядра загружены).
![Page 20: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/20.jpg)
Слишком долгие задачи
![Page 21: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/21.jpg)
Слишком долгие задачи
![Page 22: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/22.jpg)
Какие проблемы возможны?
б) Критический путь.
Признаки:
Нагрузка на CPU меньше 100% И мало синхронизаций внутри отдельных задач.
CPU ждет GPU.
![Page 23: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/23.jpg)
Критический путь
![Page 24: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/24.jpg)
Критический путь
![Page 25: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/25.jpg)
Критический путь
Если замерять время то мы не увидим что задача больше половины времени простаивала(propGEOM_MORPH)
![Page 26: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/26.jpg)
Критический путь
![Page 27: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/27.jpg)
Какие проблемы возможны?
в) Синхронизации.Синхронизации - это ожидания какого-то события или освобождения какого-то ресурса задачей.
Признаки:
Нагрузка на CPU меньше 100% И есть синхронизации внутри отдельных задач.
![Page 28: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/28.jpg)
Синхронизация
![Page 29: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/29.jpg)
Синхронизация
![Page 30: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/30.jpg)
Синхронизация
Видно что нагрузка в районе 55-60%Потоки простаивают внутри задач.CALC_ROOT_MOTION
![Page 31: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/31.jpg)
Какие проблемы возможны?
г) GPU
Признаки:
Нагрузка на GPU близка к 100%
![Page 32: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/32.jpg)
GPU
CPU ожидает GPU
![Page 33: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/33.jpg)
Заключение
• В многопоточных системах не нужно измерять реальное время работы кода, считайте время выполнения кода на CPU
• Замеряйте синхронизацию между задачами
• Ищите критические пути
![Page 34: Тестирование производительности многопоточного кода игровых проектов на практических примерах](https://reader033.vdocuments.pub/reader033/viewer/2022052507/557ed3a9d8b42a706f8b5174/html5/thumbnails/34.jpg)
Вопросы?