[Перевод] Настройка системы для облачного гейминга с помощью VFIO, Parsec и AMD

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

Облачный гейминг?

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

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

Вот некоторые варианты:

  • Steam remote play: работает для игр, запущенных через Steam.
  • Parsec: может стримить весь десктоп, включая игры.
  • Moonlight: то же самое, но работает только на хостах с Nvidia GPU, так как в основе реализации лежит протокол Nvidia GameStream.

В прошлом я добивался неплохих результатов со Steam remote play, но ограничивающим фактором выступала зависимость от Steam. Недавно же я купил пару игр от GOG, в которые наверняка можно играть удаленно, запустив их через Steam, но мне не хочется с этим возиться.

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

Для начала Parsec необходимо установить на клиентскую и хост машины. У меня в роли клиента выступает возвращенный с того света Lenovo ThinkPad X230. Он не блещет быстродействием, но все же может выполнять аппаратное декодирование H.264 и в состоянии покоя использует всего 12Вт энергии, что делает его идеальным кандидатом для подобного тестирования. Также отмечу, что обе машины я подключил к локальной сети через Ethernet, чтобы исключить возможные проседания в скорости из-за WiFi.

VFIO, игры и Вы

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

Благодаря отличному руководству Arch я придумал много вариантов, которые потенциально способны повысить быстродействие этой виртуальной машины для гейминга.

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

Что я в итоге проделал:

  • Установил модель CPU в virt-manager как host-passthrough.
  • Использовал динамическое изолирование ядер CPU, привязанных к VM, чтобы исключить использование этих ядер ОС хоста и другими VM.
  • Настроил CPU governor (диспетчер выбора частоты процессора) на повышение быстродействия изолированных ядер, чтобы исключить проблемы с недостаточной частотой и переключением между режимами ожидания/работы: echo performance > /sys/devices/system/cpu/cpu[4-7]/cpufreq/scaling_governor.
  • Включил статический пул HugePages для исключения проблем с низкой скоростью обработки памяти.
  • Отключил SMT в настройках UEFI, устранив одну дополнительную переменную.
  • Установил комплект 64Гб DDR4-3600, чтобы выделить больше памяти для VM (16Гб), оставив достаточно для хоста и других служб.

Золотое правило при отладке конфигурации — это менять по одному параметру за раз, сопоставляя полученные результаты с исходными. Не каждое из сделанных мной изменений оказалось положительным. Например, при настройке VM на использование 4 ядер и 8 потоков вместо просто 4 ядер, частота кадров в GTA V упала вдвое. Предполагаю, что VM рассматривала “SMT ядра” как реальные, сбивая планировщика Windows с толку.

Поэкспериментировав с этой настройкой и применив перечисленные приемы, я смог избавиться от большинства проблем, получив уже более плавный геймплей. Наконец-то, при игре на виртуальной машине стало чувствоваться, что под капотом у нее 4 ядра, 16Гб RAM и RX570.


Результат теста производительности CPU в Passmark до доработок


Тот же тест Passmark после доработок


Результат теста быстродействия памяти в Passmark до доработок


Тот же тест Passmark после доработок

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

Проблемы с видеокартой

Parsec и другие аналогичные решения кодируют изображение в видеопоток посредством энкодера на самом кристалле видеокарты. В настройках это может обозначаться, как hardware encoding (аппаратное кодирование). Я же до сборки этой конфигурации не знал, что энкодеры видеокарт AMD славятся своей слабостью:

Если на хосте установлена карта от AMD, то кодирование обычно выполняется намного медленнее, чем на картах Nvidia и даже Intel. Хотя при низких разрешениях проблем наблюдаться не должно. Если все гости поддерживают кодек H.265, то при его включении производительность будет выше.

И это ощутимо. При попытке стримить игры с разрешением 1080p результатом стала непоследовательная лагающая неразбериха. Представьте, что пытаетесь играть примерно на 30фпс, а график частоты кадров напоминает мониторинг сердечного ритма – именно так это ощущалось. При 720p процесс уже был намного плавнее. Да, качество изображения в этом случае страдает, но уже можно хоть как-то играть.

Я также решил попробовать сменить кодек с H.264 на H.265. Результат я протестировал в Dirt Rally ввиду наличия в этой игре режима зацикливания бенчмарка. При использовании H.264 задержка кодирования составляла около 10мс. В случае с H.265 ее показатель сократился до 8мс. Не особо впечатляет, но все же на 20% лучше. Недостатком этого приема для моей конфигурации было то, что клиентский ноутбук просто не поддерживает аппаратно-ускоренное декодирование H.265, поддержка которого появилась во встроенных GPU Intel, начиная с процессоров 7-го поколения.

Помимо этого, видеокарта вызывает проблемы и с Parsec, периодически проваливая подключение и выводя сообщение об ошибке энкодера хоста. Как правило, это лечится перезагрузкой VM, что после буквально пары сбоев уже порядком надоедает. В других случаях Parsec порой просто зависал во время геймплея и приводил к сопутствующему зависанию клиента при 100% загрузке CPU. Все это нельзя назвать реально плавным опытом.

Еще одна проблема, замеченная с помощью MSI Afterburner, заключалась в нестабильности фреймрейта в некоторых играх, например в GTA V. Уже после всех исправлений и доработок все равно продолжали возникать небольшие фризы, даже при включении vsync. Я решил пройтись по настройкам AMD Radeon, чтобы понять, не вызывает ли какая-нибудь из фич драйвера побочный эффект.

У меня был выбран режим Gaming, ведь именно для этого видеокарта и использовалась, но в итоге я решил изменить его на Standard. И тут волшебным образом фризы пропали! Подозреваю, что причиной могла быть опция Radeon Anti-Lag, поскольку это одна из основных настроек, которые оказались отключены после переключения на Standard.

Стоит ли оно того?

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

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

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

  • Заменить гибридный процессор на стандартный, например Ryzen 9 5950X. Благодаря физически разделенной компоновке ядер можно присвоить один их сегмент игровой VM, а остальные оставить хосту. Эти процессоры также имеют большой объем L3 кэша, что окажется кстати в нагрузках, требующих низкую задержку, в тех же играх.
  • Если вы собираетесь делать сборку для стриминга, то лучше начать с видеокарты Nvidia. Ошибки 43 уже нет, так что эти GPU стали вполне пригодны для таких решений, как Moonlight.
  • Использовать плату с большим количеством слотов SATA или M.2. Это существенно упрощает проброс устройств хранения данных.

Дальнейшие планы

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

Также надеюсь, что все же мне удастся перейти к использованию более современного клиентского ПК, который будет поддерживать H.265 и более высокие разрешения вывода. Да, 4K при 60Гц – это излишне накладно для ноутбука из 2012. Если же учесть, что речь идет о ThinkPad, то случится это где-то после 2025.

Что касается конфигурации хранилища, то приятель посоветовал мне настроить с помощью Samba общий доступ к виртуальной машине с NAS и разместить на ней библиотеку Steam с прочими игровыми файлами. В конце концов, скорость передачи по виртуальной LAN в ходе тестирования достигала 2-3ГГбит/с. А учитывая наличие в ZFS 2.0 постоянного кэша L2ARC, я смогу воспользоваться и этим (если мне вообще понадобится L2ARC, так как и ARC весьма эффективен). Сейчас NAS и игровая виртуальные машины синхронизированы просто через Syncthing, то есть, как минимум, базовый бэкап всех игр у меня имеется.

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

  • Huami Amazit и Zepp возглавили российский рынок умных часовHuami Amazit и Zepp возглавили российский рынок умных часов Умные часы Amazit и Zepp пользуются всё большей популярностью во всем мире. Поддерживаемая Xiaomi компания Huami Technologies официально заявил, что входит в четверку лидеров по объему продаж своих умных часов в мире. Данная информация подтверждена исследовательской компанией IDC. В […]
  • Starlink планирует покрыть всю планету спутниковым интернетом уже этой осеньюStarlink планирует покрыть всю планету спутниковым интернетом уже этой осенью Компания Starlink от SpaceX. Занятая созданием глобального спутникового интернета. Намерена создать непрерывное покрытие по всей планете уже в сентябре текущего года.  Компания уже успешно запустила около 1800 спутников. После их подключения к рабочей орбите. У компании появится […]
  • Почему желтеют листья у рассады томатов и перцев?Почему желтеют листья у рассады томатов и перцев? Почему желтеют листья у рассады? Перец, томат Это может быть полезным: Посевная у меня началась с 5 февраля Домашнее задание №9: рассада перцев и баклажан Сколько томатов и перцев надо посадить для семьи из 5 человек? Все вопросы о рассаде (230) Задать свой […]
  • Новогодний детектив, или странный хайзенбаг в «питоньих» часахНовогодний детектив, или странный хайзенбаг в «питоньих» часах Давненько я не писал на Хабр, да и тема интересная появилась, так что пора поправить это постыдное упущение.Далее собственно детектив как оно есть, "расследование" которого ещё не окончено, можно присоединиться кстати… Пост будет обновляться, по окончанию (я надеюсь что баг таки […]