Быстрые зомби

в 9:02, , рубрики: DirectX, game development, linux, OpenGL, Valve, windows

Это перевод нового сообщения из блога Valve Linux.

Один из факторов приятной игры — это скорость её работы. В этом посте я расскажу о том, что мы узнали о производительности графики наших игр, работающих в Linux.
Любой разрабочик скажет, что производительность — очень запутанная вещь. Поэтому, для простоты повествования, мы сосредоточимся на следующей топовой конфигурации:

Железо

  • Intel Core i7 3930k
  • NVIDIA GeForce GTX 680
  • 32 GB RAM

Софт

  • Windows 7 Service Pack 1 64-bit
  • Left 4 Dead 2
  • Ubuntu 12.04 32-bit

Не волнуйтесь, мы используем 32-битные версии Linux временно, релиз будет работать и на 64-битной архитектуре.
Запуская Left 4 Dead 2 на Windows 7 с Direct3D драйвером, мы получаем значение 270.6 FPS. Данные сгенерированы с помощью наших внутренних тестов.

Когда мы начали работать с Linux, первая запустившаяся версия работала работала с 6 FPS. Это нормально для начальной стадии портирования игры на новую платформу.
Улучшения производительности в основном были выполнены в трех направлениях:

  • Заставить игру работать лучше с ядром
  • Заставить игру работать лучше с OpenGL
  • Оптимизировать графические драйвера

Например, для улучшения взаимодействия с ядром, мы изменили наш механизм распределения памяти так, чтобы он использовал более допустимые для Linux функции. Мы также уменьшили количество лишних вызовов OpenGL и расширили интерфейс нашего графического движка для лучшего взаимодействия с OpenGL и Direct3d.
Третий пункт особенно интересный, так как это включает работу с производителями железа для определения слабых мест в их драйверах, и, как результат, улучшение их, что положительным образом отразится на остальных Linux-играх. Исследование задержек драйвера и добавление поддержки мультипоточности в него это два примера изменений, которые стали результатом совместной работы наших команд.

После всех проделанных работ, Left 4 Dead 2 работает на 315 FPS в Linux. То, что игра под Linux работает быстрее, чем на Windows (270.6), на первый взгляд немного не логично, учитывая количество времени, потраченное на версию для последней. Однако, это говорит о потенциале возможностей, лежащих за ядром и OpenGL. Кстати, в процессе работы с производителями оборудования мы также ускорили имплементацию OpenGL для Windows. Left 4 Dead 2 работает на 303.4 FPS в такой конфигурации.

OpenGL против Direct3D на Windows 7

Всё это ведет к вопросу: почему OpenGL версия нашей игры работает быстрее, чем Direct3D версия на Windows 7? Похоже, это не относится к реализации мультипоточности. Мы провели довольно честный анализ и нашли небольшую задержку (несколько микросекунд) на каждый batch в Direct3D, которая не затрагивает OpenGL. Теперь мы знаем, что оборудование может больше, и мы выясним, как достичь нового предела с помощью Direct3D.

Работа с производителями видеокарт

Мы работали с NVIDIA, AMD и Intel для того, чтобы улучшить производительность драйверов в Linux. Вместе мы сделали большую работу, было очень приятно видеть, как наши разработчики работают вместе с ними, бережно анализируя получаемые данные. Каждый открытый баг был открытием, и просто бесценно быть рядом с людьми, понимающими игру, рендерер, драйвер, железо и работать с ними бок о бок, атакуя проблемы производительности.

Это прекрасный пример преимуществ тесного сотрудничества между разработчиками ПО и оборудования, и это сотрудничество должно совершить большой вклад в Linux-сообщество.

Автор: tyderh


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js