Source Engine работает быстрее на Linux чем на Windows
Блог команды разработчиков Valve продолжает обновляться и пополняться новыми рубриками. С начала Августа команда Valve Linux начинает публиковать материалы описывающие как продвигается адаптация движка Source Engine для Linux, с какими проблемами сталкиваются разработчики на этом пути и чего они уже успели добиться. Как можно догадаться из заголовка, уже сейчас в некоторых случаях Left 4 Dead 2 для Linux работает заметно быстрее чем на Windows. Почему? Узнаете из блога.
Одним из факторов создания успешного игрового опыта является пропускная способность. В этом блоге обсуждаются некоторые вещи, которые мы узнали о производительности наших игр запущенных на 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 кадров в секунду. Данные генерируются на основе нашего внутреннего теста.
Когда мы только начали работать с Linux, стартовая версия выдавала всего 6 кадров в секунду. Это довольно типичная стартовая позиция для портов на любой платформе. Улучшение производительность можно разбить на несколько категорий:
- Модификация игры для лучшей работы с kernel.
- Модификация игры для лучшей работы с OpenGL
- Оптимизация графического драйвера
Примером оптимизации первой категории можно назвать смену нашего распределителя памяти для использования более подходящих функций Linux. Это было достигнуто введением в Source Engine небольшого блока для работы под Linux. Ко второй категории можно отнести уменьшение затрат памяти для работы с OpenGL и расширение нашего визуализатора новыми интерфейсами для лучшей инкапсуляции OpenGL и Direct3D.
Третья категория особенно интересна, потому что она включает в себя сотрудничество с производителями железа для идентификации проблем в их драйверах и, как результат, улучшение общественного драйвера использующегося в других играх. Поиск проблем в драйвере и внедрение многопоточности в драйвере являются прекрасным примером изменений в результате командной работы.
После всего этого, Left 4 Dead 2 показывает 315 кадров в секунду на Linux. То, что Linux версия работает быстрее чем Windows версия (270.6) может показаться нелогичным, особенно учитывая значительно большее время потраченное на оптимизация игры под Windows. Однако, это говорит об эффективности ядра операционной системы и OpenGL. Интересно, что в процессе работы с производителями железа, мы так же ускорили работу OpenGL для Windows. С такой конфигурацией Left 4 Dead 2 выдает 303.4 FPS на Windows.
OpenGL vs. Direct3D на Windows 7
Этот опыт привел нас к следующему вопросу: почему версия игры на OpenGL работает быстрее чем Direct3D на Windows 7? Похоже, что это никак не связана с мультизадачностью. Мы проводили тщательный анализ и пришли к выводу, что это вызвано несколькими дополнительными микросекундами задержки в группах в Direct3D, что на OpenGL никак не влияет. Теперь, зная на что способно железо, мы рассмотрим каким образом этот эффект можно устранить на Direct3D.
Работа с производителями железа
Мы работали с NVIDIA, AMD и Intel чтобы улучить производительность драйверов на Linux. Со всеми компаниями было легко работать и они выслали нам ссвоих инженеров чтобы помогать нашей команде в анализе получаемых данных. Мы очень быстро исправляли баги и было невероятно продуктивно собрать в одном месте людей разбирающихся в игре, рендеринге, драйверах и железе.
Это великолепный пример того, каких результатов может добиться тесное сотрудничество между разработчиками ПО и железа, которое принесет пользу сообществу Linux в целом.
- StarCraft Remastered и StarCraft 2 выйдут в PC Game Pass 5 ноября
- Слух: Valve работает над Android-эмулятором для Steam
- Steam-чарт: Helldivers 2 продолжает удерживать первую строчку