Главная » Хабрахабр » Как из домашнего ПК средствами виртуализации сохранить игровую систему

Как из домашнего ПК средствами виртуализации сохранить игровую систему

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

разговор пойдет о GPU PASSTHROUGH
Эта статья будет повещена настройки хоста именно для использования в «быту», т.е.

Введение

Сперва несколько слов про виртуализацию в целом. Согласно Википедии:

Виртуализа́ция — предоставление набора вычислительных ресурсов или их логического объединения, абстрагированное от аппаратной реализации, и обеспечивающее при этом логическую изоляцию друг от друга вычислительных процессов, выполняемых на одном физическом ресурсе.

Достигается как при помощи приложений (например VirtualBox, VMware) так и на уровне систем, поддерживающих аппаратную виртуализацию (например KVM, ESXi, Hyper-V). В последнем случае потери производительности по сравнению с нативными системами минимальна.

документации в т.ч. Здесь и далее в статье будет описание настроек системы виртуализации с открытым исходным кодом Proxmox потому что она в меру дружелюбна, есть легкий доступ к консоли через веб форму, а так же базируется на связке Debian + kvm, по которым очень много гайдов и описаний в сети, т.е. и на русском языке.

Требования к железу

Нам потребуется:
— процессор и материнская плата с поддержкой VT-x, VT-d от Интел или AMD-Vi, IOMMU от АМД. Не поленитесь и уточните поддерживает ли именно Ваш экземпляр данные требования.
Что касается материнских плат. Категорически не рекомендую гнать железо при посредственной разводке на плате питания. По Z270 и Z390 игнорировать оранжевую зону или оставлять работать в стоке.
— 2 видеокарты, одну игровую (в сети за меньшее количество проблем при пробросах в виртуальную машину хвалят красных, но лично у меня все получилось с видеокартой от зеленых), вторую для хоста. В моем случае это интегрированная в процессор.
— 1-2 монитора и кабели к ним, для того что бы
— пара комплектов клавиатура + мышь, что бы было удобно работать и настраивать системы
— второй ПК или планшет подключенный к локальной сети, что бы сделать настройки через вебформу.

Установка и настройки

Мною было использована следующая игровая конфигурация:
— ПК для хоста конфиг был собран на далеко не лучшей материнской плате, но на англоязычных форумах очень часто хвалят эту фирму за то, что ее железо чаще всего подходит для таких вещей:
Процессор — i7 8700k
Мать — ASRock Z390M Pro4
Видеокарта — INNO3D GeForce GTX 1070 iChill X4
— второй ПК (Мини-ПК Morefine-M1s),
— 2 мыши,
— 1 клавиатуру на хосте, на остальных устройствах использовал софтварную,
— 3 подключения к монитору Dell U2713HM (VGA — для интегрированной видеокарты, HDMI — для GTX1070, на DVI находится Мини-ПК. Переключения между видеосигналами осуществлял через меню монитора)

Если есть возможность обязательно выбираем основным графическим адаптером тот, на котором будет работать хост, т.е. 0й этап — На материнской плате включаем VT-d:Enable, Intel Vitrualization Technology:Enable, Primary Graphx adapter:VGA, Above 4G Decoding:Enable. более слабую видеокарту и переключаемся на нее.

Для этого:
1. 1й этап — Устанавливаем Proxmox на хост. Скачиваем образ диска с официального сайта
1. 1. Пишем образ на флешку при помощи специальных программ
1. 2. Загружаемся с флешки, и производим инсталляцию с указанием на какой жесткий диск ставить, вводим пароль для будущего пользователя root, а так же настройки сети прописываем явно. 3.

2й этап — Подключаемся по сети через веб интерфейс при помощи второго ПК или
планшета (в моем случае это был Мини-ПК) к хосту и настраиваем Proxmox по этому гайду через текстовую консоль.
image

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

1) Run the «dmesg | grep ecap» command.

If the last character of this value is an 8, 9, a, b, c, d, e, or an f, interrupt remapping is supported. For example, «ecap 1000» indicates there is no interrupt remapping support. 2) On the IOMMU lines, the hexadecimal value after «ecap» indicates whether interrupt remapping is supported. «ecap 10207f» indicates interrupt remapping support, as the last character is an «f».

Interrupt remapping will only be enabled if every IOMMU supports it.

Если условие выполняется — продолжаем.

Итак настройки:
Открываем файл командой из консоли (символ двойной решетки вводить не надо, так я буду разделять в тексте команды от того что необходимо внести в файл)
## nano /etc/default/grub
производим замену

GRUB_CMDLINE_LINUX_DEFAULT=«quiet»

для процессоров Интел

GRUB_CMDLINE_LINUX_DEFAULT=«quiet intel_iommu=on»

для процессоров АМД

GRUB_CMDLINE_LINUX_DEFAULT=«quiet amd_iommu=on»

следом даем команду
## update-grub
после чего перезагружаем хост через веб интерфейс

Файл grub для ПК в статье

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=«Proxmox Virtual Environment»
GRUB_CMDLINE_LINUX_DEFAULT=«quiet intel_iommu=on»
GRUB_CMDLINE_LINUX=""

# Disable os-prober, it might add menu entries for each guest
GRUB_DISABLE_OS_PROBER=true

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM=«0x01234567,0xfefefefe,0x89abcdef,0xefefefef»

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass «root=UUID=xxx» parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Disable generation of recovery mode menu entries
GRUB_DISABLE_RECOVERY=«true»

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE=«480 440 1»

Добавляем в файл конфигурации загрузку необходимых драйверов
## nano /etc/modules

Lines beginning with "#" are ignored.
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line.

0 и 01:00. Прописываем в консоли
## lspci
На экран будет выведен список устройств доступных для проброса, находим интересующий нас блок с видеокартой, в моем случае это 2 устройства в группе видеокарта и звук по адрсам 01:00. 1, поэтому я прописываю сразу группу.
## nano /etc/pve/qemu-server/vmid.conf

hostpci0: 01:00

0 0300: 10de:1b81 (rev a2)
01:00. Прописываем в консоли команду для того что бы определить модель и ее id
## lspci -n -s 01:00
01:00. 1 0403: 10de:10f0 (rev a1)
Теперь правим файл под нашу видеокарту (в Вашем случае id будут иные)
## nano /etc/modprobe.d/vfio.conf

options vfio-pci ids=10de:1b81,10de:10f0

Заносим в черный лист драйвера
## nano /etc/modprobe.d/blacklist.conf

blacklist radeon
blacklist nouveau
blacklist nvidia

Здесь строка «args:» решает, т.к. Теперь создаем через веб интерфейс и правим через консоль файл настроек виртуальной машины. Здесь есть номер виртуальной машины в proxmox используемый в качестве имени.
## nano /etc/pve/qemu-server/.conf без нее драйвер видеокарты обнаружит виртуализацию, но путем подмены наименования оборудования, точнее hv_vendor_id=willitwork, мы снимаем проблему с ошибкой 43, которую может выдать видеодрайвер устройства.

0,pcie=1

machine: q35
args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=willitwork,kvm=off'

bios: ovmf

hostpci0: 01:00.

Файл настроек виртуальной машины для ПК в статье

0,pcie=1
ide2: local:iso/ru-en_windows_10_1803_x86-x64.iso,media$
machine: q35
memory: 16384
net0: e1000=EA:20:FA:6A:D6:A0,bridge=vmbr0
numa: 0
ostype: win10
sata0: local-lvm:vm-100-disk-0,size=120G
scsihw: virtio-scsi-pci
smbios1: uuid=751edeca-d249-4c0d-9ded-b59d929df0f1
sockets: 1
usb0: host=1-8. args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=willitwork,kvm=off'
bios: ovmf
boot: dcn
bootdisk: sata0
cores: 8
cpu: host
hostpci0: 01:00. 3
vmgenid: b75aeb27-3102-458d-8e23-18cd27796dc1
4
usb1: host=1-8.

Теперь перезагружаем хост и запускаем виртуальную машину.

В моем случае Windows распознал сперва видео драйвер proxmox для работы через видеоконсоль, потом нашел драйвер для GTX1070, а после обновления через интернет (принудительный поиск драйверов в сети) скачал и установил нужный мне драйвер для игровой видеокарты. 3й этап — Через Удаленную видеоконсоль установим Windows и драйвера.

4й этап — Перезапустим Виртуальную машину, переключаем отображение видеопотока на мониторе на разъем видеокарты и… в моем случае все заработало сразу, никаких ошибок 43… При этом рабочий стол определяется как №2.

Визуально потерь в производительности нет. я попробовал запустить видео Blue-ray — без проблем, задержек и фризов с видеорядом нет, запустил Warhammer online — он завелся и в PvP играть было комфортно, запустил GTA5 у мя выскочила сюжетка, вполне комфортно пострелял.

Если нам необходимо пробросить жесткий диск целиком, то в файле настроек виртуальной машины необходимо добавить строку:

ide0: volume=/dev/sda

или

sata0: volume=/dev/sda

Конкретно какой именно sda/sdb/sdc/и т.п. можно уточнить в веб интерфейсе.
image

Интегрированный звук отдельно прокинуть нельзя, т.к. PS.
К бочке меда есть и ложка дегтя. В моем случае это
00:1f. в его группе находятся другие устройства, которые после проброса звуковой карты в виртуальную машину пропадают для хоста до следующей перегрузки хоста. 3 Audio device: Intel Corporation Device a348 (rev 10)
00:1f. 0 ISA bridge: Intel Corporation Device a305 (rev 10)
00:1f. 5 Serial bus controller [0c80]: Intel Corporation Device a324 (rev 10)
00:1f. 4 SMBus: Intel Corporation Device a323 (rev 10)
00:1f. звук или через видеокабель на монитор или внешняя звуковая карта. 6 Ethernet controller: Intel Corporation Device 15bc (rev 10)
Т.е. К сожалению на текущий момент нерешаемо. Порты USB пробрасываюся без проблем. В этом случае все будет нормально Есть вариант удаленного подключения с другого ПК к игровому, через RDP или SPICE.

Здесь описаны и другие настройки, которые могут помочь. Не всегда проброс видеокарты проходит идеально как в моем случае, мешается или ошибка 43 или что-то еще. В идеале нужно искать в сети удачные сетапы и ориентироваться на них, каким для меня явился этот, кроме того есть еще список железа, позволяющий достичь того же что и я, но он не полный.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Как изучение критической уязвимости DHCP в Windows 10 привело к обнаружению еще двух ошибок безопасности

Изображение: Unsplash А в некоторых случаях таких новых уязвимостей оказывается больше одной. Как было описано в предыдущей статье про CVE-2019-0726, иногда поиск деталей об уже известной уязвимости приводит к обнаружению новой уязвимости. Как всегда происходит при поиске уязвимостей, даже если ...

Быстрорастворимое проектирование

Люди учатся архитектуре по старым книжкам, которые писались для Java. Книжки хорошие, но дают решение задач того времени инструментами того времени. Время поменялось, C# уже больше похож на лайтовую Scala, чем Java, а новых хороших книжек мало. Увидим обзор типовых ...