Доброго времени суток!
Разобью статью, дабы не захламлять Ваше время, внизу будет список остальных полезных частей.
В общем, мне удалось сделать виртуальную клауд-гейм-машину с помощью двух видеокарт на одной материнской плате на "удомашненном" ПК.
С чего все началось
На 2022 год насчитывалось порядка 2,46 миллионов геймеров. И тут мы с другом не стали исключением.
Дело в том, что мой ПК "тянет" более менее адекватно последние тайтлы, а его ноутбук 2012 года стал не пригоден. Старый i5 от Intel, HD 5750M, 8 GB RAM, ну, говорить не о чем. Поиграть нормально, отыскав что-то, что возможно будет работать на его ноутбуке, было крайне тяжело.
В голове возникла безумная мысль - умножить свой компьютер и сделать его подобным сервису облачного гейминга, но для одного человека, в виду ограниченного бюджета и простого желания попробовать.
Я в целом занимаюсь и работаю с компьютерами, серверами, тем более, была огромная предрасположенность к экспериментам. Железно и твердо решив "Надо пробросить видеокарту... но не мою", я пошел по поисковикам, собирал информацию.
В поисках ответов на свои вопросы, я не раз натыкался на статьи, FAQ и прочее о том, как пробросить видеокарту на виртуальную машину, о том, что можно, что нельзя и будет ли вообще работать.
Сразу скажу: будет работать, но криво, или не будет работать от слова "совсем" - это то, что я нашел.
Условия: не ставить гипервизор, поскольку мне нужна полностью рабочая Windows как основная система.
Остается вариант один: ПО для виртуализации с поддержкой Windows.
Исходя из ближайших, имеющие возможность к перебросу, наиболее близких мне по духу и из приятных интерфейсов, используя минимальный кодинг, оказался Hyper-V, конечно же.
Из ПО для облачного гейминга будем пользовать freeware/FLOSS софтом. Находим первой строчкой в поисках Moonlight, останавливаемся.
Но что с железом?
Задача: Мой компьютер был собран на базе:
- mATX корпус
- mATX Asus B250M-A Prime
- AMD Ryzen 5 3500X (какой Hyper-V?)
- блок питания на 650 Ватт
- 16 Гб оперативной памяти
- кучка жестких дисков (и M.2 SATA SSD, и SATA HDD)
- *барабанная дробь* MSI Aero GTX 1060 6Gb.
Имеем скудную неразгоняемую рабочую станцию для игр. Имелась постоянная проблема: раз на раз компьютер падал в BSOD. Менял ОП, отключил уже 2 Сата ССД, переустановленная винда и все такое. Вывод напрашивался один, что все BSODы из-за материнки. Они также все были разных мастей. Да и к тому же на материнской плате был один PCI, куда тут воткнуть еще одну видеокарту?
Решение: Покупаем новую материнскую плату и... корпус, потому что я и представления не имею, какую вторую GPU придется купить. Плюсом, давно хотел ATX корпус, просто ставить было некуда. Выбор пал на плату ASRock A520M Pro4. Остальные были больно дороги, чтобы такие эксперименты ставить.
Комплектующие закуплены. На работе попытки собрать лабораторный стенд, чтобы добиться результата и перенести их на свое будущее детище, увенчались провалом. i7 8700 + GT 730 (Хост) + GTX 1050 (ВМ) застопорились на моменте "отрывания" из области видимости Диспетчера устройств. Об этом подробнее ниже.
С работы была взята напрокат, в целях исследования, рабочая видеокарта AMD Radeon R7 250, более менее современная заглушка, поддерживающая DirectX 12.
Теория
Что мы хотим вообще? Перекинуть PCI-E устройство, сделать его полностью подконтрольным для виртуальной машины, купить минимальный набор того, чего так не хватает, использовать свободное ПО в своих целях. Мы хотим домашний клауд-гейминг!
О виртуальных машинах и вводе-выводе
Вообще, бороздить просторы интернета и постоянно огорчаться, что либо все нелогично, либо все незаконно (в пределах ограничений технологий и физики, конечно же), это любимое занятие. Проброс PCI-E GPU умеет VMWare ESXi, vSphere, я точно не понял как, но нас это не интересует. Умеет и Hyper-V, но как оказалось, только если у вас стоит Windows Server 2016 и выше, и только Windows Server, с определенным обновлением. Я же, повторюсь, не хочу ничего портить в словосочетании "Домашний ПК", поэтому у меня Windows 11 Pro. Pro крайне важно, потому что на нем, как минимум, имеется возможность включить в компонентах Hyper-V. Ищем лазейки, не находим, расстраиваемся. Первоначально вообще утверждается, что для проброса же, процессор должен уметь VT-d (Intel) или SVM/AMD-V (AMD)...или IOMMU, или SR-IOV.
VT-d (Virtualization technology for directed I/O) — технология виртуализации ввода-вывода, созданная корпорацией Intel в дополнение к её технологии виртуализации вычислений (VT), известной под кодовым названием Vanderpool. Виртуализация ввода-вывода позволяет пробрасывать (pass-through) устройства на шине PCI (и более современных подобных шинах) в гостевую ОС, таким образом, что она может работать с ними с помощью своих штатных средств.
AMD-V часто обозначается аббревиатурой SVM (Secure Virtual Machines). Кодовое название — Pacifica. Соответствующая технология виртуализации ввода-вывода — IOMMU. AMD-V проще и эффективнее, чем Intel VT. Поддержка AMD-V появилась в Xen 3.3.
IOMMU (англ. input/output memory management unit) — блок управления памятью (MMU) для операций ввода-вывода. Так же как традиционный, процессорный блок управления памятью, который переводит виртуальные адреса, видимые процессором в физические, этот блок занимается трансляцией виртуальных адресов, видимых аппаратным устройством, в физические адреса.
SR-IOV (сокращение от англ. Single Root Input/Output Virtualization, виртуализация ввода-вывода с единым корнем) — технология виртуализации устройств, позволяющая предоставить виртуальным машинам прямой доступ к части аппаратных возможностей устройства.
Источник: Википедия.
Отбрасываем Intel, как то, чего у нас нет. Из описанного ничего не понятно. Есть ли у AMD рабочая технология ввода-вывода или нет. Положимся на IOMMU.
Теоретическая практика
На заре подготовки, я нашел PowerShell скрипты, готовые отбросить сомнения видеокарту из списка устройств и добавить ее в виртуальную машину, работающую в Hyper-V. Собственно, им я и занялся тогда в лабораторных условиях с Ай-Седьмым. Компьютер был подготовлен, включен VT-d, убедился в этом дважды, ВМ работала, но Coreinfo, утилита с сайта майкрософт, сказала, "не, не можешь". Команда "Dismount-VmHostAssignableDevice -LocationPath $locationPath -Force" выдала мне ошибку "Текущая конфигурация не позволяет ОС контролировать шину PCI Express. Проверьте настройки BIOS или UEFI."
Ну ОК. Проверил. Все, что тебе было надо включено, что ты хочешь еще?!
И тут рабочее время заканчивается. Приехали комплектующие. Собран заново ПК. Собрана новая ВМ уже на боевом домашнем ПК, красота-люкс, как говорит мой сэнсей. Момент истины. Команда сработала. Видеокарта пропала из списка устройств. Успешно подключена. Но запуск виртуальной машины не произошел. "A hypervisor feature is not available to the user" сказали мне. Очередной яндексёж данной ошибки привел меня как раз к тем статьям, в которых говорилось, что вам нужна Windows Server. Ну не хочу я и всё. А еще нельзя NVIDIA пробросить. А потому что у них есть технология GRID. А плати. AMD - любовь навсегда.
Опущенные руки
На сайте знаменитого видеохостинга мною был найден ролик, где зарубежный специалист магией обеих рабочих конечностей (без мошенничества) смог воссоздать мою среду. "Зачем мне статья? Дай ссылку". Там одна видеокарта, успокойтесь, для одной видеокарты эта статья тоже работает, читать полезно, тем более, ролик на английском. RTX 3070 там была, да, ей ж нельзя. Что же я подчерпнул?
- NVIDIA можно в виртуалку.
- Там стояла потребительская ОС Windows 10.
- Оно работает.
Все дело крылось не в перебросе PCI устройства, а его "расшаривании". Оно всеми своими частями оставалось на вашей рабочей машине: физически, адресно, с мониторами. Задействовалась только ее функциональная часть, то есть, все расчеты и вывод уже на виртуальной машине. И на вашей тоже.
Вообще, почему две видеокарты, а не одну мощную. Наверное, потому что можно отдать целый функционал карты, без потери производительности первой. У меня оба монитора задействованы с 1060, R7 250 стояла как... да просто стоит и все, она не задействована ни в какой программе на моей машине. Единственное, что я заметил, что Windows сама расширила пределы видеопамяти, грубо говоря, как в случае с динамическими дисками, сделала из двух хранилищ видеопамяти одно. Должно ли это влиять на производительность я пока не понял, однако остальных изменений не было - моя 1060 работает в штатном режиме. За исключением нагревания, потому что всего в материнской плате под первый PCI-E отдано два слота для видеокарты, то есть вторая видеокарта очень плотно стоит к первой. Надо заниматься доработкой охлаждения.
Думаю, на этом стоит закончить и перейти уже непосредственно к установке всего ПО и показать как это работает.
Перейти к следующим частям:
Часть 2. Подготовка к безумию
Часть 3. Лучшая видеокарта для друга
Заключительная часть.