пятница, 4 декабря 2015 г.

Как увеличить производительность игр в Linux

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


 

 

1) Свежие драйвера на видеокарту


Первый и самый очевидный способ. В свежие версии драйверов и компонентов графического стека, вносятся новые оптимизации, устраняются недоработки и так далее. Для Ubuntu есть несколько замечательных репозиториев, которые предоставляют свежие графические драйверы:

Xorg-Edgers

Самый популярный PPA-репозиторий со свежайшим графическим стеком. Соответственно, используете вы его на свой страх и риск, так как в нём нет ничего стабильного. В этом репозитории находятся свежие версии Xorg, Mesa, свободных графических драйверов и так далее. Подключение:

sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update && sudo apt-get upgrade

Oibaf PPA

В этом репозитории находятся более стабильные, но одновременно свежие версии свободных графических драйверов, которые также имеют поддержку Wine Gallium-Nine и многое многое другое. Подключение:

sudo add-apt-repository ppa:oibaf/graphics-drivers
sudo apt-get update && sudo apt-get upgrade

Proprietary GPU Drivers

Данный репозиторий - новичок, но настоящий must have для всех, у кого видеокарта Nvidia. Здесь находятся самые свежие версии проприетарного драйвера для этих видеокарт. Подключение:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update

Далее откройте менеджер драйверов, и там выберите желаемую версию драйвера



2) Установка патченого ядра.


В некоторых ситуациях, увеличить производительность игр, помогает установка модифицированного ядра. К примеру ядро Linux-RT (ядро реального времени), на моей конфигурации. дало мне прибавку в 12 FPS в некоторых играх. Данное ядро есть в стандартных репозиториях Ubuntu, и ставится командой:

sudo apt install linux-image-rt

Также положительный эффект могут дать ядра PF-Kernel и Zen-Kernel, о которых я говорил в недавней заметке.

3) Потоковая оптимизация (только для Nvidia с проприетарным драйвером).


Nvidia - лучший друг Линуксоида, когда речь заходит о 3D и играх. И начиная с драйвера версии 310, в нём появилась возможность серьёзно увеличить производительность, включив многопоточный рендеринг. По умолчанию данная опция не включена, так как есть приложения, которые не работают с ней (например игра Metro Last Light). Включить эту опцию можно следующими способами:

  • Вручную: в терминале командой export __GL_THREADED_OPTIMIZATIONS=1;
  • Автоматически при запуске системы: открыть файл /etc/profile и в конец вставить строку __GL_THREADED_OPTIMIZATIONS=1;
  • Запускать приложение с этим параметром: например __GL_THREADED_OPTIMIZATIONS=1 steam, либо в самом Steam указать данную опцию в параметрах запуска игры: __GL_THREADED_OPIMIZATIONS=1 %command%

Прирост производительности составляет от 15 до 45 кадров в секунду, в зависимости от игры. Пригодится для Wine. Кстати о Wine. В Winetricks очень желательно выставить опцию GLSL в значение Disabled.

4) Запуск в отдельном X-сервере (или в отдельных иксах).


Это давний способ увеличить производительность игры, а также решить проблему со сворачиванием игры (не все они нормально сворачиваются, некоторые перестают работать. В прочем, для Windows проблема также актуальна). Для этого:

sudo nano /etc/X11/Xwrapper.config

Меняем параметр  allowed_users=console на allowed_users=anybody и сохраняем. Это нужно для того, чтобы можно было запускать X-сервер от пользователя, а не root. Далее необходимо добавить себя в группу audio, иначе звука в отдельных иксах не будет:

usermod -G audio -a имяпользователя

Далее редактируем файл ~/.Xauthority, для этого в консоли:
xauth
list

Увидим что-то вроде

blind.local:0  MIT-MAGIC-COOKIE-1  e087ead1f80cd5d35b6bd273222d1feb
[fe80::204:61ff:fe9e:c083]:0  MIT-MAGIC-COOKIE-1  e087ead1f80cd5d35b6bd273222d1feb
blind/unix:0  MIT-MAGIC-COOKIE-1  e087ead1f80cd5d35b6bd273222d1feb

Буквенно-цифровое окончание будет другим.
Пишем там же, вставив своё значение:

add :1.0 MIT-MAGIC-COOKIE-1 e087ead1f80cd5d35b6bd273222d1feb

exit

Запуск производится следующей командой:

xinit /путь/до/исполняемого/файла/игры $* -- :1

Например: xinit /usr/games/steam $* -- :1

Запустится отдельная сессия X, и запустится указанное приложение. Переключение обратно в режим рабочего стола производится комбинацией Ctrl+Alt+F7, вторые иксы будут (в моём случае) на F2. Альтернативный вариант: переключиться на любую свободную консоль (F1-F6), залогиниться, и запустить приложение командой:

startx /путь/до/исполняемого/файла/игры -- :1

Однако такой способ неудобен тем, что в случае если игра имеет лаунчер, или какие-то дополнительные окна при запуске, будут проблемы с их отрисовкой. Да и запускать это всё руками как-то муторно. Исправить эту проблему поможет любой легковесный оконный менеджер. Например Openbox. Устанавливаем:

sudo apt install openbox

Теперь создаём файл:

nano ~/.steamxinitrc

и туда записываем:

exec openbox-session

Теперь командой:

startx ~/.steamxinitrc -- :1

у вас запустится оконный менеджер Openbox, из которого вы уже можете запустить любое приложение. Если вы хотите, чтобы например Steam стартовал автоматически при запуске Openbox, сделайте так:

mkdir ~/.config/openbox
touch ~/.config/openbox/autostart
nano  ~/.config/openbox/autostart

#! /bin/bash

steam &

Сохраните. Теперь Стим будет запускаться автоматически, а вы можете легко перключаться между сеансами. ВНИМАНИЕ: у себя в KDE на Debian 8, я обнаружил баг, при котором после перехода в основные иксы и обратно на дополнительные, появлялись сильнешие графические артефакты в некоторых играх, а сам Стим отрисовывался кусками. Способа решения проблемы я не нашёл. Если вы знаете - напишите в комментариях, я добавлю в статью.

Соответственно, вместо Steam, вы можете добавить PlayOnLinux, если запускаете виндовые игры через него

5) Отключение графических эффектов (композитинга) для полноэкранных приложений.


Если вы используете KDE или Cinnamon, рекомендую отключить полноэкранный композитинг. В KDE: Параметры системы - Эффекты - Дополнительно - Поставить галочку на "Отключить графические эффекты для полноэкранных окон"





Для Cinnamon: Настройки - Общие - Отключить композитинг для полноэкранных окон



Вот и всё. Конечно это не избавит от проблемы кривых портов игр. Там уже вина разработчика игры. Но тем не менее, всё описанное здесь, неоднократно проверено и даёт весьма нехилый прирост производительности. Приятных игр!

P.S. если вы знаете ещё способы, или хотите что-то добавить - пишите в комментариях.

24 комментария:

  1. Когда статья о сборе своей СтимОС на базе убунту?

    ОтветитьУдалить
    Ответы
    1. Зачем Ubuntu:) ArchLinux!:)

      Удалить
  2. Скоро. Следите за обновлениями.

    ОтветитьУдалить
  3. а Linux Mint 17.3 Rosa на сколько производительней Steam OS и как ее настроить для прироста производительности в играх?

    ОтветитьУдалить
    Ответы
    1. Там уже очень многое устарело. В мае выйдет Минт 18, так что лучше ориентироваться на него. Рекомендации те же самые

      Удалить
  4. Спасибо! Особенно за инструкцию по отдельным иксам.
    Кстати, в чем разница между патчами rt и zen касательно игр?

    ОтветитьУдалить
    Ответы
    1. RT это патчи для работы ядра в режиме реального времени, а ZEN - это набор различных патчей, которых нет в апстриме ядра. Обычное rt-ядро может снизить до минимума задержки ввода-вывода и звука, но иногда может немного снизить FPS, кадров на 5. Zen содержит в себе множество различных патчей, направленных на улучшение производительности десктопа. Туда к примеру входит планировщик ввода-вывода BFQ, который также может дать положительный эффект в играх

      Удалить
  5. Вопрос насчёт потоковой оптимизции: для автозапуска это нужно добавить в файл /etc/profiles или /etc/profile, т.к. первого у меня нет?

    ОтветитьУдалить
    Ответы
    1. /etc/profile, в тексте опечатка, сейчас исправлю

      Удалить
  6. sudo apt install linux-image-rt НЕ ВЫПОЛНЯЕТСЯ ТАК КАК linux-image-rt НЕ НАЙДЕНА

    ОтветитьУдалить
  7. linux-image-rt НЕ НАЙДЕНО! ЧТО ДЕЛАТЬ? ГДЕ НАЙТИ?

    ОтветитьУдалить
  8. Если у меня стоит wayland вместо X-сов, то что нужно делать?

    ОтветитьУдалить
  9. Добавил в параметры игры в Steam xinit %command% -- :1 игра стартует но разрешение на 2 вторых иксах маленькое 320X240 маленький квадрат по середине а в самой игре нормальное 1280X1024. Как это иcправить?

    ОтветитьУдалить
    Ответы
    1. Какой дистрибутив? И какая игра? Пробовали не через стим, а напрямую игру запускать этой командой?

      Удалить
  10. Mint 17.3 игра CS 1.6 нет не пробовал только через стим. Пробовал World of Tanks в отдельных иксах все нормально 1280X1024 а вот CS 1.6 320X240.

    ОтветитьУдалить
  11. etc/profile после каждого ребута сбрасывается и никаких изменений там уже не оказывается. от рута естественно редактировал

    а вот кроме стима запустить ничего собственно и нельзя
    входишь в папку даёшь команду - и и.... ничего!
    бинарника от игры не видит находясь в папке игры!!!!


    user@PC1 ~/DEMOS/Unigine_Valley-1.0 $ __GL_THREADED_OPTIMIZATIONS=1 valley
    valley: команда не найдена
    user@PC1 ~/DEMOS/Unigine_Valley-1.0 $

    ОтветитьУдалить
    Ответы
    1. Если запустить стим с этим параметром - то любая игра из его каталога будет принимать это параметр сразу

      __GL_THREADED_OPTIMIZATIONS=1 ./valley если в этом же каталоге находится бинарник

      Удалить
    2. да я уже догадался со стимом и через него запускал - падение производительности с 2500 очков до 2300 очков.
      не впечатлило скажем так. но если компьютер будет слищком быстро работать можно использовать.

      а про ./ забыл просто опять.

      Удалить
  12. Этот комментарий был удален автором.

    ОтветитьУдалить
  13. а вот этот скрипт верно будет работать?

    в .sh файле разумеется.

    __GL_THREADED_OPTIMIZATIONS=1 WINEARCH=win64 WINEPREFIX=~/.wine64 wine Steam.exe

    ОтветитьУдалить
  14. sudo nano /etc/X11/Xwrapper.config
    У меня нет такого конфига Xwrapper.config. Дист Manjaro
    Как с этим быть? хочется иногда поиграть, отдохнуть

    ОтветитьУдалить
  15. Оуу... Спасибо. Сегодня протестирую.

    ОтветитьУдалить