[Перевод] Апгрейд системы для облачного гейминга: теперь с Nvidia и Moonlight


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

Если вы читали мою предыдущую статью на эту тему, то знаете, что у меня уже налажена весьма деликатная конфигурация для «облачного» гейминга. Состоит она из одного мощного настольного ПК, одной виртуальной машины с проброшенной GPU и клиентских машин, которые можно использовать для стриминга игр. Из соображений простоты (и низкой скорости интернета) я делал стриминг только по локальной сети.

И все же в этой конфигурации есть слабые места:

  • Медленный энкодер видеокарты AMD. Достойную производительность мне удалось получить только при разрешении потокового видео 720p.
  • VM Windows 10 иногда не могла запустить энкодер хоста, и драйверы видеокарты выдавали ошибки. Это исправлялось парой перезагрузок VM, и, как мне кажется, было связано с известной проблемой перезапуска (reset bug), которой в мире VFIO славятся карточки AMD – разбираться конкретнее мне не захотелось.
  • Иногда потоковая передача либо обрывалась, либо тормозила. Это может быть вызвано картой AMD или самим Parsec.

Я много читал по этой теме и выяснил, что в большинстве случаев для получения оптимального игрового опыта рекомендуют использовать связку Nvidia GPU и Moonlight. Так что, было решено найти подходящую карту.

Видеокарта

На дворе 2021. Мир сходит с ума, и цены на видеокарты просто нереальные. В связи с этим я поумерил свой аппетит и склонился к простому варианту: GTX 1060 6G от MSI. Эта карта скромна, относительно современна для интересующих меня игр и обошлась примерно в ту же цену, сколько стоила новая 5 лет назад, то есть 260 евро. На лучшее в это коварное время рассчитывать не приходится.

Но, тем не менее, она работает! Проведенное в первом проекте тестирование показало, что Nvidia отключили в драйверах намеренный выброс ошибки error code 43, что и сделало этот вариант возможным. Сама замена видеокарты проблем не вызвала. Нужно было лишь исправить ID PCI-устройств и через virt-manager изменить закрепленные за VM Windows устройства, все.

Parsec: AMD vs NVIDIA

Поскольку конфигурация для стриминга с помощью Parsec уже была настроена, я решил провести небольшой тест, чтобы понять разницу между этими двумя карточками.

Предыдущая – это AMD Radeon RX570 4Gb от Sapphire. Эти две карты находятся в одном классе производительности, что весьма удачно для сравнения.

Вот некоторые результаты из двух кратких сессий тестирования в Dirt Rally. Прошу сделать на них скидку, так как проводились они без соблюдения каких-либо стандартов. Я просто выбрал одинаковые настройки графики и поиграл с запущенным окном статистики Parsec.

H.264
AMD RX 570: 10мс
NVIDIA GTX 1060: 3мс

H.265
AMD RX 570: 8мс
NVIDIA GTX 1060: 3мс

Разница в скорости кодирования просто огромна, особенно с учетом того, что время между двух кадров составляет 16.6мс при потоке 60fps. Часть задержки относится к передаче по сети и декодированию на клиенте, то есть, чем меньше время кодирования, тем лучше.

Parsec показал себя хорошо, но при этом возникли проблемы с выполнением GPU-декодирования на клиентах Linux. К тому же, в нем отсутствует клиент для iOS. И если последнюю проблему можно проигнорировать, то первую определенно нет.

Moonlight: опенсор-сокровище

Moonlight является альтернативой Parsec. В нем реализован протокол Nvidia GameStream и присутствуют клиенты для большинства популярных платформ. Тестирование я проводил на клиентах Linux (Fedora 34), ноутбуке с Windows 10 (ThinkPad X230), iPhone SE 2020 и старом Google Nexus 5. Я даже попытался запустить клиента Moonlight на Raspberry Pi 1 B+, но, по всей видимости, он для него староват, что привело к ошибке при запуске.

GTA V на Google Nexus 5? Куда реальнее, чем можно подумать

Для настройки Moonlight я открыл клиента и попробовал выполнить автоматическое обнаружение по сети – к сожалению, безуспешно. Так что пришлось ввести IP-адрес VM Windows вручную. Сработало. Инициировался процесс сопряжения, который нужно было продолжить с помощью Parsec, так как необходимо ввести код на машине хоста. После из Parsec я вышел и потоковую передачу начал уже через Moonlight.

Хотя не прям сразу. Moonlight может обнаруживать установленные в систему игры, но для получения такого же опыта удаленной работы с десктопом, какой обеспечивает Parsec, нужно проделать небольшой твик.

В самом начале я заметил, что качество изображения на десктопе хуже, чем в случае с Parsec. Однако в ходе игры это с лихвой компенсируется. Moonlight просто работает. При этом есть очень много опций, включая изменение качества изображения путем настройки разрешения, частоты кадров и ограничения скорости сети.

Лично для меня Moonlight подходит больше, поскольку клиент Linux, упакованный как Flatpak, может выполнять аппаратное декодирование через видеокарту. Играется на машине с Linux просто отлично, что нельзя назвать стандартным случаем. Даже старенький контроллер Xbox One при подключении по Bluetooth через Moonlight работает прекрасно.

Вообще, при использовании Moonlight единственная проблема была связана с сетью. Это хорошо заметно в поле Network jitter встроенной статистики, которую можно вызвать комбинацией Ctrl + Alt + Shift + S. После отключения нескольких сетевых служб эта проблема исчезла.

Конфигурация: месяц спустя

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

В итоге я решил включать VM, только если реально соберусь поиграть, хотя пока оптимального способа делать это еще не нашел. Я даже назначал запуск/остановку VM на клавишу калькулятора, но потом GNOME начала игнорировать эту привязку и все равно открывать калькулятор, так что проработал этот прием недолго.

Более же серьезным изменением стало сохранение всех игр в пуле ZFS, находящемся в другой VM. Для этого я настроил цель ISCSI, взяв за основу это руководство. При этом я использовал пакет tgt. Все сработало на удивление хорошо, но цель ISCSI не хочет корректно подключаться в виртуальной машине Windows при первой загрузке, что несколько раздражает.

Позже я понял, что слабым местом являются HDD, и просто расширил SSD-хранилище. В противном случае другие процессы NAS могли нарушать игровой процесс в требовательных играх типа GTA V. Проявлялись проблемы в виде длительной загрузки и прорисовки объектов с запозданием – то есть при разъездах по карте буквально отсутствовала половина дорог и зданий.

Решение с ISCSI также дополнительно обеспечивает бэкап всех игр. Если Windows вдруг в очередной раз решит покончить с собой, и у меня не будет готов бэкап VM, то я просто ее переустановлю, не беспокоясь о скачивании и повторной установке всех игр.

Вердикт

В целом этой конфигурацией я очень доволен. Пользуюсь я ей не очень часто, но все равно круто иногда запустить Art of Rally или BeamNG.drive на любом из своих устройств.

В перспективе здесь, конечно, есть над чем задуматься, особенно касательно более высоких системных требований Windows 11 и современных игр. Сейчас же все работает отлично, и пока я ничего менять не собираюсь.

Читайте так же:

  • Как передвигаться по другим планетамКак передвигаться по другим планетам В замечательном научно-популярном фильме “Луна” Павла Клушанцева был эпизод с хождением по Луне на лыжах. Якобы поверхность покрыта хрупким слоем разной толщины, который не держит человека. А на лыжах ходить можно, но неудобно. Предсказание оказалось верным, но для Марса — там есть самые […]
  • Style transfer для сериала «Друзья»Style transfer для сериала «Друзья» ВведениеВ данном посте мы, с помощью методов автоматической обработки текстов (Natural Language Processing или просто NLP), исследуем стиль речи 6 главных героев знаменитого сериала «Друзья», проведем мультиязычный анализ для русского и английского языков, а также обучим нейросеть […]
  • [Перевод] Дебажим U-boot на реальном железе[Перевод] Дебажим U-boot на реальном железе Продолжение предыдущей статьи, в которой мы ускорили разработку под embedded linux. Рабочая станция + sftp сервер + nfs сервер ускорили на порядок (10х) доставку изменений кода на целевое железо. Теперь не нужно часами компилировать код. В этой статье продолжаем очеловечивать разработку. […]
  • Как часто нужно обновлять семантику, контент и цены Описание Как часто нужно обновлять семантику, контент и цены. Вебинар пройдет 25.11.2021года в 15-00 16-00 Ссылка для отправки сайта-https://seoquick.com.ua/webinar/obnovltyie-semantiki-kontenta-cen/ Ссылка на ютуб- https://www.youtube.com/watch?v=FvY13sW4RFs План вебинара Доклад […]