В данной заметке я опишу 5 способов увеличения производительности игр в Linux. Особенно это будет актуально для "виндовых" игр, запущенных в Wine.
Первый и самый очевидный способ. В свежие версии драйверов и компонентов графического стека, вносятся новые оптимизации, устраняются недоработки и так далее. Для 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
Далее откройте менеджер драйверов, и там выберите желаемую версию драйвера
В некоторых ситуациях, увеличить производительность игр, помогает установка модифицированного ядра. К примеру ядро Linux-RT (ядро реального времени), на моей конфигурации. дало мне прибавку в 12 FPS в некоторых играх. Данное ядро есть в стандартных репозиториях Ubuntu, и ставится командой:
sudo apt install linux-image-rt
Также положительный эффект могут дать ядра PF-Kernel и Zen-Kernel, о которых я говорил в недавней заметке.
Nvidia - лучший друг Линуксоида, когда речь заходит о 3D и играх. И начиная с драйвера версии 310, в нём появилась возможность серьёзно увеличить производительность, включив многопоточный рендеринг. По умолчанию данная опция не включена, так как есть приложения, которые не работают с ней (например игра Metro Last Light). Включить эту опцию можно следующими способами:
Прирост производительности составляет от 15 до 45 кадров в секунду, в зависимости от игры. Пригодится для Wine. Кстати о Wine. В Winetricks очень желательно выставить опцию GLSL в значение Disabled.
Это давний способ увеличить производительность игры, а также решить проблему со сворачиванием игры (не все они нормально сворачиваются, некоторые перестают работать. В прочем, для 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, если запускаете виндовые игры через него
Если вы используете KDE или Cinnamon, рекомендую отключить полноэкранный композитинг. В KDE: Параметры системы - Эффекты - Дополнительно - Поставить галочку на "Отключить графические эффекты для полноэкранных окон"
Для Cinnamon: Настройки - Общие - Отключить композитинг для полноэкранных окон
Вот и всё. Конечно это не избавит от проблемы кривых портов игр. Там уже вина разработчика игры. Но тем не менее, всё описанное здесь, неоднократно проверено и даёт весьма нехилый прирост производительности. Приятных игр!
P.S. если вы знаете ещё способы, или хотите что-то добавить - пишите в комментариях.
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. если вы знаете ещё способы, или хотите что-то добавить - пишите в комментариях.
Когда статья о сборе своей СтимОС на базе убунту?
ОтветитьУдалитьЗачем Ubuntu:) ArchLinux!:)
УдалитьСкоро. Следите за обновлениями.
ОтветитьУдалитьа Linux Mint 17.3 Rosa на сколько производительней Steam OS и как ее настроить для прироста производительности в играх?
ОтветитьУдалитьТам уже очень многое устарело. В мае выйдет Минт 18, так что лучше ориентироваться на него. Рекомендации те же самые
УдалитьСпасибо! Особенно за инструкцию по отдельным иксам.
ОтветитьУдалитьКстати, в чем разница между патчами rt и zen касательно игр?
RT это патчи для работы ядра в режиме реального времени, а ZEN - это набор различных патчей, которых нет в апстриме ядра. Обычное rt-ядро может снизить до минимума задержки ввода-вывода и звука, но иногда может немного снизить FPS, кадров на 5. Zen содержит в себе множество различных патчей, направленных на улучшение производительности десктопа. Туда к примеру входит планировщик ввода-вывода BFQ, который также может дать положительный эффект в играх
УдалитьВопрос насчёт потоковой оптимизции: для автозапуска это нужно добавить в файл /etc/profiles или /etc/profile, т.к. первого у меня нет?
ОтветитьУдалить/etc/profile, в тексте опечатка, сейчас исправлю
Удалитьsudo apt install linux-image-rt НЕ ВЫПОЛНЯЕТСЯ ТАК КАК linux-image-rt НЕ НАЙДЕНА
ОтветитьУдалитьlinux-image-rt НЕ НАЙДЕНО! ЧТО ДЕЛАТЬ? ГДЕ НАЙТИ?
ОтветитьУдалитьПопробуйте linux-image-lowlatency
УдалитьЕсли у меня стоит wayland вместо X-сов, то что нужно делать?
ОтветитьУдалитьДобавил в параметры игры в Steam xinit %command% -- :1 игра стартует но разрешение на 2 вторых иксах маленькое 320X240 маленький квадрат по середине а в самой игре нормальное 1280X1024. Как это иcправить?
ОтветитьУдалитьКакой дистрибутив? И какая игра? Пробовали не через стим, а напрямую игру запускать этой командой?
УдалитьMint 17.3 игра CS 1.6 нет не пробовал только через стим. Пробовал World of Tanks в отдельных иксах все нормально 1280X1024 а вот CS 1.6 320X240.
ОтветитьУдалитьetc/profile после каждого ребута сбрасывается и никаких изменений там уже не оказывается. от рута естественно редактировал
ОтветитьУдалитьа вот кроме стима запустить ничего собственно и нельзя
входишь в папку даёшь команду - и и.... ничего!
бинарника от игры не видит находясь в папке игры!!!!
user@PC1 ~/DEMOS/Unigine_Valley-1.0 $ __GL_THREADED_OPTIMIZATIONS=1 valley
valley: команда не найдена
user@PC1 ~/DEMOS/Unigine_Valley-1.0 $
Если запустить стим с этим параметром - то любая игра из его каталога будет принимать это параметр сразу
Удалить__GL_THREADED_OPTIMIZATIONS=1 ./valley если в этом же каталоге находится бинарник
да я уже догадался со стимом и через него запускал - падение производительности с 2500 очков до 2300 очков.
Удалитьне впечатлило скажем так. но если компьютер будет слищком быстро работать можно использовать.
а про ./ забыл просто опять.
Этот комментарий был удален автором.
ОтветитьУдалитьа вот этот скрипт верно будет работать?
ОтветитьУдалитьв .sh файле разумеется.
__GL_THREADED_OPTIMIZATIONS=1 WINEARCH=win64 WINEPREFIX=~/.wine64 wine Steam.exe
sudo nano /etc/X11/Xwrapper.config
ОтветитьУдалитьУ меня нет такого конфига Xwrapper.config. Дист Manjaro
Как с этим быть? хочется иногда поиграть, отдохнуть
Создать его
УдалитьОуу... Спасибо. Сегодня протестирую.
ОтветитьУдалить