35
Тестирование производительности многопоточного кода игровых проектов на практических примерах Виктор Гляненко, Антон Васильев

Тестирование производительности многопоточного кода игровых проектов на практических примерах

  • Upload
    sqalab

  • View
    252

  • Download
    5

Embed Size (px)

DESCRIPTION

Доклад Виктора Гляненко на SQA Days-15. 18-19 апреля, 2014, Москва. www.sqadays.com

Citation preview

Page 1: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Тестирование производительности многопоточного кода игровых

проектов на практических примерахВиктор Гляненко, Антон Васильев

Page 2: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Виктор Гляненко

QA Lead

[email protected]

Антон Васильев

Senior Game Engine Programmer

[email protected]

Page 3: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Основные устройства влияющие на производительность

CPU и GPU

Page 4: Тестирование производительности многопоточного кода игровых проектов на практических примерах

На что ориентируются разработчики?

Frames per Second (FPS) -  — количество сменяемых кадров за единицу времени.

Page 5: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Различия тестирования производительности на PC и

современных игровых консолях

Page 6: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Различия тестирования производительности на PC и

современных игровых консолях

Page 7: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Статистика производительности с различных PC конфигураций

Page 8: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Конфигурации PC

Page 9: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Результаты значений FPS

Page 10: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Модель многопоточного приложения как графа работ.

Page 11: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Root

Player Control

Physics

AI Update

Particle

Render

Sound

Physics Tick

AI Batch 0 AI Batch 1

Particle Tick

Page 12: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Модель многопоточного приложения как графа работ.

Изображено примерно 10% “движка”

Render

Page 13: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Как измерить многопоточный код?

Page 14: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Факторы влияющие на тестирования производительности многопоточных

приложений

•Конфигурация железа

Page 15: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Факторы влияющие на тестирования производительности многопоточных

приложений

•Конфигурация железа

•Сторонние приложения

Page 16: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Факторы влияющие на тестирования производительности многопоточных

приложений

•Конфигурация железа

•Сторонние приложения

Стратегия измерения

Page 17: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Возможности профилирования приложений в Visual Studio 2012

Profiler

Page 18: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Возможности профилирования приложений в Visual Studio 2012

Profiler

Concurrency Visualizer

Page 19: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Какие проблемы возможны?

а) Слишком долгие задачи.

Тоже самое, что и в случае однопоточного кода - выполнение кода занимает много времени.

Признаки:

Нагрузка на CPU близка к 100% (все ядра загружены).

Page 20: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Слишком долгие задачи

Page 21: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Слишком долгие задачи

Page 22: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Какие проблемы возможны?

б) Критический путь.

Признаки:

Нагрузка на CPU меньше 100% И мало синхронизаций внутри отдельных задач.

CPU ждет GPU.

Page 23: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Критический путь

Page 24: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Критический путь

Page 25: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Критический путь

Если замерять время то мы не увидим что задача больше половины времени простаивала(propGEOM_MORPH)

Page 26: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Критический путь

Page 27: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Какие проблемы возможны?

в) Синхронизации.Синхронизации - это ожидания какого-то события или освобождения какого-то ресурса задачей.

Признаки:

Нагрузка на CPU меньше 100% И есть синхронизации внутри отдельных задач.

Page 28: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Синхронизация

Page 29: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Синхронизация

Page 30: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Синхронизация

Видно что нагрузка в районе 55-60%Потоки простаивают внутри задач.CALC_ROOT_MOTION

Page 31: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Какие проблемы возможны?

г) GPU

Признаки:

Нагрузка на GPU близка к 100%

Page 32: Тестирование производительности многопоточного кода игровых проектов на практических примерах

GPU

CPU ожидает GPU

Page 33: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Заключение

• В многопоточных системах не нужно измерять реальное время работы кода, считайте время выполнения кода на CPU

• Замеряйте синхронизацию между задачами

• Ищите критические пути

Page 34: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Вопросы?

Page 35: Тестирование производительности многопоточного кода игровых проектов на практических примерах

Спасибо!

• Контакты:• [email protected]• Skype: botikus1