LINUX.ORG.RU
ФорумGames

Игры в Linux: переходим в следующее поколение?

 , , , ,


7

4

Эта статья является переводом статьи из блога главного разработчика композитного менеджера KWin (используется в KDE) Мартина Гресслина. Оригинал вы можете прочесть по ссылке. Далее идёт повествование от автора. Прошу сильно не пинать за качество перевода.

В этой заметке я хотел бы поделиться мыслями о том, как улучшить игровой опыт в Linux.

Ситуация с X11

В X11 главная проблема для игр, это композитор. Играм необходим прямой доступ к графическому процессору (видеокарте), без каких либо посредников. Для сравнения, возьмём игровую консоль Playstation: когда вы запускаете игру, вы можете быть уверены, что она получила полный доступ к графическому процессору (GPU). Композитинг X11 предоставить такого не может. Композитор в X11 должен полностью скомпоновать сцену. Выглядит это так:

  • Игра рендерится через OpenGL/GLX;
  • X-сервер уведомляет композитор через расширение Xdamage;
  • Композитор рассчитывает область для перерисовки;
  • Композитор использует расширение Xcomposite для получения пиксельной карты для игрового окна;
  • Композитор связывает пиксельную карту с текстурой OpenGL;
  • Композитор рендерит текстуру, используя OpenGL/GLX поверх игрового окна;
  • X-сервер предоставляет готовое изображение из композитора через KMS.


При таком раскладе, мы имеем 5 вещей, которые не оптимальны для полноэкранных игр: проходы туда-сюда через композитор X-сервера, что добавляет серьёзные задержки. В такой ситуации, композитор всегда будет замедлять игру, так как будет выполнять вертикальную синхронизацию и так далее.

Обходные пути в X11

Существует готовое решение чтобы исправить это, известное как «unredirection full-screen window (отключить перенаправление для полноэкранных окон)». Идея заключается в том, что композитор не будет работать для полноэкранного приложения, и будет использована обычная, «не композитная» функциональность X-сервера.

На мой взгляд, это неправильное решение проблемы, потому что композитор по-прежнему работает, он по-прежнему получает события через XDamage (отслеживание областей для перерисовки, прим.перев.) (от, например, других окон) и работа композитора может внезапно возобновиться (например, при выводе уведомления на экран).

В KWin/Plasma, у нас есть лучшее решение: блокировка композитора. Мы можем это сделать, так как не требуем композитинга, в отличии от окружений с обязательным композитингом, где можно использовать только unredirection. У нас даже есть высокоуровневый API для игр, для того чтобы они могли сообщать, что необходимо заблокировать композитинг.

Это также объясняет, почему в KWin/Plasma не включена по умолчанию опция отключения полноэкранного композитинга. Это может вызвать проблемы в работе неигровых приложений (например тиринг в видеоплеере. прим.перев.), но рекомендуется для игр. Также это объясняет почему мне пофиг на тесты PTS (Phoronix Test Suite), так как по моему мнению они проводятся с неправильными настройками. Если бы нас это волновало, то можно было бы просто убедиться, что используемые в PTS игры, отключают композитинг.

Ситуация с Wayland.

В Wayland всё гораздо лучше, так как теперь нет X11-прослоек. Теперь процесс выглядит так:

  • Игра рендерится через OpenGL/EGL;
  • Композитор получает уведомление через wl_surface;
  • Композитор напрямую представляет wl_buffer через KMS, так как знает что тут больше не на что смотреть.


Так что ситуация значительно улучшилась. Хочу отметить, что KWin пока не поддерживает эти этапы и всё ещё рендерит через OpenGL, но мы движемся в этом направлении.

Однако, я думаю, ещё есть проблемы. Наш композитор (KWin) по-прежнему получает события от других окон, может «проснуться» и так далее. Запуск игры в режиме рабочего стола означает, что будут другие процессы в системе, с которыми игра должна разделить ресурсы. Мы хотим пойти по примеру Playstation: игре всё, остальным - ничего. Я не хочу чтобы KWin отбирал ресурсы CPU/GPU у игры.

Управление видеорежимами в ядре (Kernel Mode-Setting, KMS) в играх.

Итак, что мы можем сделать? Я думал об этом и предлагаю кардинально решить проблему с играми в Linux: убрать оконную систему! Игры должны общаться с KMS напрямую, игры должны взаимодействовать с libinput (библиотека ввода, прим. перев.) напрямую. Давайте удалим все лишние прослойки, нам это не нужно, это только мешает игровой производительности.

Когда игра запустится в полноэкранном режиме, можно создать отдельную сессию на другом виртуальном терминале (tty) и предоставить управление этой сессией через logind. Это позволит игре открыть файлы для рендеринга и обработки ввода также, как это делает композитор Wayland. Рендеринг может быть осуществлён через EGL поверх DRM/GBM, также как в композиторе Wayland. Игра получит полный контроль над KMS. Нужно другое разрешение экрана? Без проблем, бери и выставляй. В режиме рабочего стола, это всегда проблематично (гораздо хуже в X11, но лучше в Wayland). Для игр в оконном режиме ничего не изменится, они так и будут запускаться в режиме рабочего стола. (Прим.перев. По сути автор предлагает давно известную концепцию «запуска в отдельных иксах», но лишённую кучи недостатков).

Конечно, это должно убрать все взаимодействия с окружением рабочего стола. Это то, что нужно рассматривать в первую очередь, например, как заставить, скажем, Mumble (программа для аудиоконференций, прим. перев.) работать с такой конфигурацией? Может игре нужно запускать собственный Wayland-сервер?

Это также сломает Alt+Tab (сворачивание игры, прим.перев.). Ну, не совсем, правда. Для X11, который захватывает клавиатуру в некоторых играх, Alt+Tab всё равно не работает, так что тут особо ничего не потеряешь. Но конечно, всегда можно будет переключиться через Ctrl+Alt+F1 в рабочую сессию. Игры также должны иметь общий путь для достижения этой цели, на мой взгляд.

Есть конечно ещё несколько вещей, которые ещё предстоит решить, например, как запустить отдельную сессию, как вернуться в рабочую сессию без необходимости разблокировать экран и т.д. Всё должно быть также хорошо, как на игровой консоли. Так что тут ещё есть над чем поработать, но я думаю, это лучше, чем пытаться заставлять хорошо работать игры в режиме рабочего стола, потому как это всё равно не будет работать лучше, чем на игровой консоли.

★★★★★

Последнее исправление: Sunderland93 (всего исправлений: 1)

Ответ на: комментарий от Novell-ch

Это хуже, чем нормальное положение. В нормальном положении у нас одна-единственная видеокарта, а в этом костыльном целых две, но одна из них не нужна и жрет электричество просто так.

Khnazile ★★★★★
()
Ответ на: комментарий от fang90

Да. Когда я попробовал Bumblebee, была задержка отрисовки. Я резко двигаю мышкой, а прицел перемещается после ощутимой задержки. За снайпера в TF2 играть никак! Я вернулся на PRIME и не жалею! Всё мгновенно, как на дискретке!

NVIDIA PRIME использует технологию DMA-BUF, которую добавили в Linux 3.5 (на Опеннете подробно описывалась драмма, связанная с неправильной лицензией на неё). Эта технология позволяет видеочипу NVIDIA записывать картинку во фреймбуфер Intel напрямую. А в Bumblebee она до сих пор не используется - вот и причина задержки. Да и сам Bumblebee давно не обновлялся...

А ещё когда запускается игра, в выводе в консоль пишут сколько у меня VRAM. В случае с PRIME её 1023 Мб. С Bumblebee - 256 Мб!

Что касается температуры. Я пробовал эксперимент: включил иксы на Intel, а NVIDIA ни для чего не задействовал. Затем включал программу для CUDA (NVIDIA нагрелась). Температура в норме. Потом задействовал CPU (BOINC, 80% на каждое из 4 ядер). Температура на пределе. Последний штрих - игра на Intel. Ноут выключался от перегрева.

Так вот. В конфигурации PRIME последнее, третье действие, никогда не будет выполнено. Intel всегда будет работать на 1% мощности.

ZenitharChampion ★★★★★
()
Последнее исправление: ZenitharChampion (всего исправлений: 2)
Ответ на: комментарий от haku

В таком случае быть может мне объясните в чем разница между их несвободной лицензией, накладывающей ограничения и «нашей» свободной лицензией, накладывающей ограничения? Мне кажется слово «свободная» тут не уместно.

RiseOfDeath ★★★★
()
Последнее исправление: RiseOfDeath (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

Да. Когда я попробовал Bumblebee, была задержка отрисовки. Я резко двигаю мышкой, а прицел перемещается после ощутимой задержки. За снайпера в TF2 играть никак! Я вернулся на PRIME и не жалею! Всё мгновенно, как на дискретке!

Это точно не задержка из-за включенной вертикальной синхронизации? Для primusrun вертикальную синхронизацию можно отключать (vblank_mode=0), все равно он работает таким образом, что разрывов не будет. Но не стоит добавлять это в .profile, если вы используете композитор, т.к. это выключит вертикальную синхронизацию и для него.

Khnazile ★★★★★
()
Ответ на: комментарий от Khnazile

Я не уверен. Я знаю только, что если запускать игру на всё том же i965 (с VSync), то всё отрисовывается мгновенно. А если запускать на NVIDIA, то есть задержка. Был ли Vsync или нет, я уже не помню!

На PRIME VSync в любом случае не работает. Возможно, именно поэтому не реализовали:

There is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is currently expected due to limitations in the design of the X.Org X server.

ZenitharChampion ★★★★★
()
Последнее исправление: ZenitharChampion (всего исправлений: 3)
Ответ на: комментарий от smilessss

да он даже не смог ник пооригинальныее оформить. Типа erzent2D. ПОтом было бы erzent3D. А потом можно было бы опять подумать. Но мы хотим от него слишком многого.

targitaj ★★★★★
()
Ответ на: комментарий от targitaj

почему его здесь так любят?

обычный вроде юзер

smilessss ★★★★★
()
Ответ на: комментарий от Deleted

Статья, конечно, интересная, но «решение», которое ломает Alt+tab ненужно.

в убунте 14.04 при игре в fallout1 через wine оно и так не работает. Возможно, дело в убунте.

targitaj ★★★★★
()
Ответ на: комментарий от targitaj

Настрой actkbd по мануалу в статье «Games» на LOR Wiki. Тогда ты сможешь переключаться по Alt-Tab в любой полноэкранной игре! Программа actkbd слушает клавиатуру в обход иксов.

ZenitharChampion ★★★★★
()
Ответ на: комментарий от ZenitharChampion

спасибо, мб займусь (лениво что-то). Смысл в том, что нажатие-то оно слышит, судя по результату, но сам результат... Всё плохо, лучше не нажимать.

targitaj ★★★★★
()
Ответ на: комментарий от anonymous

Все нормальные игры тормозят из-за большого количества полигонов, а не пикселей.

legolegs ★★★★★
()
Ответ на: комментарий от RiseOfDeath

Их лицензия определяет их как хозяев, а пользователя как бесправного раба, в противовес этому наша лицензия определяет нас как хозяев, и делегирует те же права любому.

haku ★★★★★
()
Ответ на: комментарий от ZenitharChampion

Попробовал. Температура терпимая 50-54 C (без NVIDIA 45-48). Только один косяк при работе с двумя мониторами, мыша уползает на второй(внешний) и никак не хочет возвращаться на основной.
upd. По поводу FPS, и правда, заметный буст наблюдается. По крайней мере в gpxspheres 844FPS, против 400-500 на примусе.

fang90 ★★★★★
()
Последнее исправление: fang90 (всего исправлений: 2)
Ответ на: комментарий от RiseOfDeath

Не даёт грязным копирастам делать с ним всё, что они хотят, ты хотел сказать.

Если ты — автор, ты можешь делать всё, что угодно, даже выпустить под другой лицензией. Естественно, это должен быть именно твой код.

anonymous
()
Ответ на: комментарий от RiseOfDeath

Вон, аноним тебе уже ответил, неумело вбрасываешь)

haku ★★★★★
()
Ответ на: комментарий от fang90

В любом случае, спасибо, попробую

Не, лучше бамблби. А вообще лучше не покупать ноутбуки с гибридной графикой вообще, конечно, абсолютно бесполезная вещь.

Freyr69 ★★★
()
Ответ на: комментарий от fang90

заметный буст

gpxspheres

Запусти что-нибудь с шейдерами вроде unigine valley и наблюдай (почти)отсутствие буста.

anonymous
()
Ответ на: комментарий от Freyr69

Не, лучше бамблби

фломастеры, такие фломастеры.

лучше не покупать ноутбуки с гибридной графикой

не покупай, чего ко мне пристал-то?:)

fang90 ★★★★★
()

ТС запостил феерически неадекватный и некомпетентно написанный текст, в котором мало того что архитектура неправильно описана (фактически - личные фантазии), так ещё и никак не объясняет тот факт, что графическая производительность игр при прочих равных условиях в линуксе повыше, чем в венде. Также ТС так и не обосновал, при чём тут вообще иксы, но почему-то в их сторону выругался.

Quasar ★★★★★
()
Последнее исправление: Quasar (всего исправлений: 1)
Ответ на: комментарий от RiseOfDeath

RiseOfDeath> Хозяин может делать со своим кодом что хочет. GPL на дает мне делать с ним все, что я хочу.

GPL даёт хозяину кода делать с кодом вообще всё, что он захочет. В том числе и запроприетарить свою разработку, если так заблагорассудится.

Quasar ★★★★★
()
Ответ на: комментарий от Quasar

Толсто, школьничек. А теперь садись за уроки.

anonymous
()

Жутковато становится, когда главный разработчик kwin всерьез предлагает такую дичь. Как страшно жить.

trycatch ★★★
()
Ответ на: комментарий от haku

[fixed]Десктопный линукс продолжит и дальше работать, а ты свалишь к бздям?[/fixed]

Deleted
()
Ответ на: комментарий от haku

намертво склеенный комбайн

Ложь.
Комбайн? Да. Намертво склеенный? Ни разу.

для того чтобы заменить одну маленькую детальку необходимо форкать весь проект целиком

Ложь.

intelfx ★★★★★
()
Ответ на: комментарий от ZenitharChampion

Линус Торвальдс сказал «мне нравятся некоторые моменты в Systemd, то, как реализованы некоторые части. Мне не нравится сам подход: по мнению Поттеринга

Хватит лгать, сказано было в точности наоборот.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от haku

Типичная черта всех хейтеров: когда их тыкают в собственную фактологическую лажу, они ударяются в совершенно детскую демагогию.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Оправдывай себя полностью, systemd-фанбой, всё едино от твоих сеансов самовнушения объективная реальность не измениться ничуть.

haku ★★★★★
()
Ответ на: комментарий от haku

Оправдывай себя полностью, systemd-хейтер, всё едино от твоих сеансов самовнушения объективная реальность не измениться ничуть.

//fixed

Noob_Linux ★★★★
()
Ответ на: комментарий от haku

Я сустемд хейтер, я не хочу в анализ фактов, я хочу вжух-вжух-затраллено.

anonymous
()
Ответ на: комментарий от fang90

в gpxspheres 844FPS, против 400-500 на примусе

gpxspheres

LOL, в играх смотреть надо а не шестерёнки с шариками + выше 60 кадров может мухи замечают или ещё какие кузнечики

amorpher ★★★★★
()
Последнее исправление: amorpher (всего исправлений: 1)
Ответ на: комментарий от trycatch

Жутковато становится, когда главный разработчик kwin всерьез предлагает такую дичь. Как страшно жить.

Плюсану-ка. Утешаю себя мыслью, что это я что-то неправильно понимаю, или он неправильно выразился.

spectr00 ★★★
()

проходы туда-сюда через композитор X-сервера, что добавляет серьёзные задержки.

Насколько серьёзные? Кто-нибудь это реально мерял?

И если там действительно что-то серьёзное, сначала надо убедиться, нельзя ли это исправить, не ломая протокола X11.

А без этого вся остальная часть статьи автоматом превращается в «бла-бла-бла иксы устаревшее говно для лохов давайте всё поломаем весело же» И в угоду потребителям некоторой части YOBA-игр начинается ломка API.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от Loki13

Я себе специальный костыль написал для запуска стима в отдельном tty с icewm в качестве wm.

Научи...

Stil ★★★★★
()
Ответ на: комментарий от haku

Сиди на встройке. С той же производителньостью. Ну или бросай всё и срочно пили реверс-инжиниринговую реализацию CUDA, реклокинг, нормальную 3D-производительность. Ты вообще понимаешь, что на свободных драйверах ни с киким железом нет нормальной поддержки вычислений на GPU? Только зачатки в побочных проектах Галлиума?

anonymous
()
Ответ на: комментарий от anonymous

CUDA, nvidia
вычисления на GPU

учитывая позорную производительность поделок Хуанга в вычислениях с двойной точностью ты только что публично эпичненько так сел в лужу

anonymous
()
Ответ на: комментарий от anonymous

Ну купи на Ебее Теслу поколения ПЕЧ 5** и радуйся, если тебе нужно много двойной точности.

anonymous
()
Ответ на: комментарий от anonymous

Лучше пусть сравнит список софт под Линуксы*, который умеет в GPGPU только на Нвидиях с CUDA со списком софта под Линуксы, умеющего в OpenCL. *В сириоуз энтерпрайз бизнессе хватает забавных персонажей, с точки зрения которых РэдХэт и Центось это одна ОС, а прочие Линуксы другая.

anonymous
()
Ответ на: комментарий от Freyr69

А что, на рынке много ноутов с дискреткой без встройки?

anonymous
()
Ответ на: комментарий от anonymous

Ну купи на Ебее Теслу поколения ПЕЧ 5** и радуйся, если тебе нужно много двойной точности.

Был бы я дурачком так бы и поступил, спасибо за совет.

anonymous
()
Ответ на: комментарий от anonymous

я у тебя спрашиваю, где эпичный слив?

вбзднула овечка, прикрываясь синтетикой, в то время когда на реальных задачах вышедшая в 2012-м 7970 легко рвёт современные титаны в ~2 раза

хуанг только в пострелушках быстр, деточка^^

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.