Сегодня я в пошаговом режиме покажу, как в свой сервер на базе материнской платы Gigabyte C246 WU4 и гипервизора Proxmox 6.4.4 добавить видеокарту Видеокарта PALIT nVidia GeForce GTX 1080 , PA-GTX1080 GameRock Premium 8G, 8ГБ, GDDR5X, Ret [neb1080h15p2-1040g], т. е. Я смогу после всего ниже указанного иметь возможность пробрасывать до виртуальных машин видеокарту. И как-то ее использовать.

Моя конфигурация домашнего сервера

  • Серверная материнская плата GIGABYTE C246-WU4
  • Процессор Intel Core i5-9600K OEM
  • Кулер для процессора AeroCool Verkho 3
  • Корпус ZALMAN N5 OF черный
  • Блок питания COOLER MASTER MWE White V2, 700Вт, 120мм, черный, retail
  • Intel SSDPEKKW256G8
  • KVR24N17S8/4 = это на 4Gb, DIMM, 288-контактная, 2400МГц, CL: 17
  • KVR24N17S8/8 = это на 8Gb, DIMM, 288-контактная, 2400МГц, CL: 17

+ видеокарта:

  • Видеокарта PALIT nVidia GeForce GTX 1080 , PA-GTX1080 GameRock Premium 8G, 8ГБ, GDDR5X, Ret [neb1080h15p2-1040g]
  • но сперва разберу на примере GeForce GT 710B

Шаг №1: На домашний сервер установлен Debian 10

Шаг №2: На систему установлен Proxmox 6.4.4 опираясь на заметку

Шаг №3: Через BIOS выставляю, что по-умолчанию монитор подключенный к материнской платы использует саму плату, а не видеокарту.

Del — Peripherals

  • Initial Display Output = IGFX

после нажимаю F10 для сохранения изменений

Шаг №4: Когда система Debian 10 + Proxmox 6.4.4 загрузилась авторизуюсь в консоли и проверяю, что у меня есть поддержка DMAR & IOMMU

ekzorchik@srv-lubuntu:~$ ssh -l ekzorchik 172.33.33.116

ekzorchik@srv-proxmox2:~$ su -

Password:

root@srv-proxmox2:~#

root@srv-proxmox2:~# dmesg | grep -e DMAR -e IOMMU

[ 0.006577] ACPI: DMAR 0x0000000039654C70 0000A8 (v01 ALASKA A M I 00000002 01000013)

[ 0.074501] DMAR: Host address width 39

[ 0.074502] DMAR: DRHD base: 0x000000fed90000 flags: 0x0

[ 0.074505] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap 1c0000c40660462 ecap 19e2ff0505e

[ 0.074506] DMAR: DRHD base: 0x000000fed91000 flags: 0x1

[ 0.074508] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da

[ 0.074508] DMAR: RMRR base: 0x00000039ae0000 end: 0x00000039d29fff

[ 0.074509] DMAR: RMRR base: 0x0000003b000000 end: 0x0000003f7fffff

[ 0.074510] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1

[ 0.074510] DMAR-IR: HPET id 0 under DRHD base 0xfed91000

[ 0.074511] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.

[ 0.077562] DMAR-IR: Enabled IRQ remapping in x2apic mode

root@srv-proxmox2:~#

Шаг №5: Активируем для загрузчика grub использование IOMMU:

root@srv-proxmox2:~# nano /etc/default/grub

GRUB_DEFAULT=0

GRUB_TIMEOUT=5

GRUB_DISTRIBUTOR="Proxmox Virtual Environment"

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

GRUB_CMDLINE_LINUX=""

GRUB_DISABLE_OS_PROBER=true

GRUB_DISABLE_RECOVERY="true"

root@srv-proxmox2:~# update-grub

Generating grub configuration file ...

Found linux image: /boot/vmlinuz-5.4.106-1-pve

Found initrd image: /boot/initrd.img-5.4.106-1-pve

Found linux image: /boot/vmlinuz-4.19.0-16-amd64

Found initrd image: /boot/initrd.img-4.19.0-16-amd64

Found linux image: /boot/vmlinuz-4.19.0-14-amd64

Found initrd image: /boot/initrd.img-4.19.0-14-amd64

Found linux image: /boot/vmlinuz-4.19.0-6-amd64

Found initrd image: /boot/initrd.img-4.19.0-6-amd64

done

root@srv-proxmox2:~# pve-efiboot-tool refresh

Running hook script 'proxmox-auto-removal'..

Running hook script 'zz-proxmox-boot'..

Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace..

No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync.

root@srv-proxmox2:~#

Шаг №6: Добавляем в файл конфигурации загрузку необходимых драйверов

root@srv-proxmox2:~# nano /etc/modules

vfio

vfio_iommu_type1

vfio_pci

vfio_virqfd

Шаг №7: Извлекаем идентификаторы видеокарты (видео + аудио) и прописываю их как группа устройств:

root@srv-proxmox2:~# lspci

00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers (rev 0d)

00:02.0 VGA compatible controller: Intel Corporation Device 3e98 (rev 02)

00:12.0 Signal processing controller: Intel Corporation Cannon Lake PCH Thermal Controller (rev 10)

00:14.0 USB controller: Intel Corporation Cannon Lake PCH USB 3.1 xHCI Host Controller (rev 10)

00:14.2 RAM memory: Intel Corporation Cannon Lake PCH Shared SRAM (rev 10)

00:16.0 Communication controller: Intel Corporation Cannon Lake PCH HECI Controller (rev 10)

00:16.3 Serial controller: Intel Corporation Cannon Lake PCH Active Management Technology - SOL (rev 10)

00:17.0 SATA controller: Intel Corporation Cannon Lake PCH SATA AHCI Controller (rev 10)

00:1b.0 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0)

00:1b.4 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0)

00:1c.0 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0)

00:1c.2 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0)

00:1c.3 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0)

00:1c.4 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0)

00:1d.0 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0)

00:1d.2 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0)

00:1f.0 ISA bridge: Intel Corporation Device a309 (rev 10)

00:1f.3 Audio device: Intel Corporation Cannon Lake PCH cAVS (rev 10)

00:1f.4 SMBus: Intel Corporation Cannon Lake PCH SMBus Controller (rev 10)

00:1f.5 Serial bus controller [0c80]: Intel Corporation Cannon Lake PCH SPI Controller (rev 10)

00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (7) I219-LM (rev 10)

02:00.0 Non-Volatile memory controller: Intel Corporation SSD Pro 7600p/760p/E 6100p Series (rev 03)

04:00.0 SATA controller: ASMedia Technology Inc. ASM1062 Serial ATA Controller (rev 02)

05:00.0 PCI bridge: Integrated Technology Express, Inc. IT8892E PCIe to PCI Bridge (rev 71)

07:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1080] (rev a1)

07:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1)

08:00.0 Non-Volatile memory controller: Kingston Technologies Device 2263 (rev 03)

09:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)

root@srv-proxmox2:~#

На консоль будет выведен список устройств доступных для проброса, находим интересующий нас блок с видеокартой, в моем случае это 2 устройства в группе видеокарта и звук по адресам 07:00.0 и 07:00.1, поэтому я прописываю сразу группу.

root@srv-proxmox2:~# nano /etc/pve/qemu-server/vmid.conf

hostpci0: 07:00

Прописываем в консоли команду для того что бы определить модель и ее id:

root@srv-proxmox2:~# lspci -n -s 07:00

07:00.0 0300: 10de:1b80 (rev a1)

07:00.1 0403: 10de:10f0 (rev a1)

root@srv-proxmox2:~#

Теперь правлю файл под свою видеокарту:

root@srv-proxmox2:~# nano /etc/modprobe.d/vfio.conf

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

Обозначаю какие драйвера хостовой системе не нужно использовать:

root@srv-proxmox2:~# nano /etc/modprobe.d/blacklist.conf

blacklist radeon

blacklist nouveau

blacklist nvidia

blacklist nvidiafb

Шаг №8: Перезагружаю хост srv-proxmox2

Шаг №9: Далее работающий порядок добавления видеокарты в VM под управлением Windows 10 Pro

Создаем шаблон VM который в последствии буду использовать, как исходник для развертывания VM

Итак:

General:

  • Node: srv-proxmox2
  • VM ID: 103
  • Name: 103

OS:

  • Storage: local
  • ISO image: SW_DVD9_Win_Pro_10_1903.1_64BIT_Russian_Pro_Ent_EDU_N_MLF_X22-14082.ISO
  • Type: Microsoft Windows
  • Version: 10/2016/2019

System:

  • Graphic card: Standard VGA
  • Qemu Agent: отмечаю галочкой
  • SCSI Controller: VirtiO SCSI
  • BIOS: OVMF (UEFI)
  • Machine: q35
  • Add EFI Disk: отмечаю галочкой
  • Storage: выбираю хранилище (к примеру у меня local-lvm)

Hard Disk:

  • Bud/Device: VirtiO Block 0
  • Storage: local-lvm
  • Disk size (GiB): 50

CPU:

  • Sockets: 1
  • Cores: 2

Memory:

  • Memory(MiB): 4096
  • Minimum memory (MiB): 4096
  • Ballooning Device: отмечаю галочкой

Network:

  • Bridge: vmbr0
  • Model: VirtiO (paravirtualized)

Далее VM не запускаем, добавляем еще одни CDROM где указываем использовать образ virtio-win-0.1.171.iso и изменяем конфигурационный файл создаваемой виртуальной машины через консоль:

root@srv-proxmox2:~# nano /etc/pve/qemu-server/103.conf
agent: 1
bios: ovmf
boot: order=virtio0;ide2;net0
cores: 2
cpu: host,hidden=1,flags=+pcid,hv-vendor-id=123456789abc
efidisk0: local-lvm:vm-103-disk-1,size=4M
ide2: local:iso/SW_DVD9_Win_Pro_10_1903.1_64BIT_Russian_Pro_Ent_EDU_N_MLF_X22-14082.ISO,media=cdrom
machine: pc-q35-5.2
memory: 4096
name: 103
net0: virtio=2E:95:FF:F8:A7:20,bridge=vmbr0,firewall=1
numa: 0
ostype: win10
sata0: local:iso/virtio-win-0.1.171.iso,media=cdrom,size=363020K
scsihw: virtio-scsi-pci
smbios1: uuid=fa7d689d-6b7d-4c9d-96c0-a8fe297f29e5
sockets: 1
vga: std
virtio0: local-lvm:vm-103-disk-0,size=50G
vmgenid: fc7ff770-5e74-4dfb-af30-3bed0fcd9f4e

После не забываем сохранить внесенные изменения.

Получается вот так

Конфигурация виртуальной машины до проброса видеокарты

Запускаем VM и производим установку операционной системы с образа ISO, в процесс установщик не определит какой у нас диск используется и сообщит что "не удалось найти драйверы". Это нормально, нажимаем "Загрузить" - Обзор — указываем/выбираем D:(virtio-win-0.1.1) — переходим в папку viostor — w10 — и выбираем amd64, затем нажимаем ОК, теперь у нас есть драйвер (Red Hat VirtIO Scsi controller (D:\viostor\w10\amd64\viostor.inf)) под диск и нажимаем "Далее", затем видим что установщик Windows 10 определил, что есть "Незанятое пространство на диск 0" — нажимаем "Далее". Дальнейшая установка операционной системы проходит как обычно.
Когда операционная система установится, нужно используя образ virtio-win-0.1.171.iso установить все драйвера (для сетевой карты к примеру) и агента (D:\guest-agent\qemu-ga-x86-64.msi) дабы можно было взаимодействовать с Console виртуальной машины через Web-интерфейс.

Драйвера для этого через образ virtio-win-0.1.171.iso

Копирую с диска D: (это подмонтированный образ virtio-win-0.1.171.iso) папку Balloon, к примеру C:\Program Files

Win + X — Windows PowerShell (администратор)

PS C:\Windows\system32> cd 'C:\Program Files\Ballon\w10\amd64'

PS C:\Program Files\Ballon\w10\amd64> blnsvr.exe -i

Очень нужная вещь.

Шаг №10: После выключаем VM и я перевожу ее в Template: выделяем VMID 103 — More — Convert to template — Yes.

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

выделяем VMID 103 — More — Clone

  • Target node: srv-proxmox2
  • VM ID: 104
  • Name: W10X64
  • Mode: Full Clone
  • Target Storage: local-lvm

Открываю Hardware VM ID 104 (W10X64) и добавляю видеокарту которая подключена физически к хосту, под ID: 02.00: Add — PCI Device -

Device: выбираю

  • ID: 0000:02:00.0
  • IOMMU GROUP: 1
  • Vendor: NVIDIA Corporation
  • Device: GX208 [GeForce GT 710B]
  • Mediated Devices: No

и отмечаю галочками параметры: Primary GPU & PCI-Express & ROM-Bar

Итого характеристики VM через Web интерфейс приняли вид:

Характеристики VM после проброса видеокарты

Итого характеристики VM через консоль приняли вид:

root@srv-proxmox2:~# cat /etc/pve/qemu-server/104.conf
agent: 1
bios: ovmf
boot: order=virtio0;ide2;net0
cores: 2
cpu: host,hidden=1,flags=+pcid,hv-vendor-id=123456789abc
efidisk0: local-lvm:vm-104-disk-1,size=4M
hostpci0: 02:00.0,pcie=1,x-vga=1
ide2: local:iso/SW_DVD9_Win_Pro_10_1903.1_64BIT_Russian_Pro_Ent_EDU_N_MLF_X22-14082.ISO,media=cdrom
machine: pc-q35-5.2
memory: 4096
name: W10X64
net0: virtio=C6:BC:9D:10:7A:69,bridge=vmbr0,firewall=1
numa: 0
ostype: win10
sata0: local:iso/virtio-win-0.1.171.iso,media=cdrom,size=363020K
scsihw: virtio-scsi-pci
smbios1: uuid=4fa53f6d-ca05-419b-aafc-9bf5f4c42f90
sockets: 1
vga: std
virtio0: local-lvm:vm-104-disk-0,size=50G
vmgenid: 636c8ade-5ce9-476b-a168-04a71d7be6dd
root@srv-proxmox2:~#

Шаг №11: Теперь запускаю VM, чтобы система увидела видеокарту я могу воспользоваться либо установкой драйверов от мастера установки Windows или же через пакет 388.13-desktop-win10-64bit-international-whql.exe

По итогу получаю VM с проброшенной видеокартой внутри и установленными драйверами на нее и нет никакой ошибки Error 43:

Видеокарта Nvidia GeForce GT 710 успешно работает на Windows 10 внутри Proxmox 6.4

УРА, получилось. Меняю видеокарту на PALIT nVidia GeForce GTX 1080, узнаю ее ID и добавляю ее в VM, все успешно!

Видеокарта Nvidia GeForce GTX 1080 успешно работает на Windows 10 внутри Proxmox 6.4

Итого, я для себя разобрал как прокинуть в виртуальную машину на базе Proxmox 6.4.4 видеокарту и поставив на нее драйвера она рабочая. Но это еще не все, подключаем кабель DP от монитора в разъем на видеокарте и изображением с W10X64 виртуальной машины отображается на мониторе. Вот только это изображение без возможности использовать клавиатуру или мышь. Получается и их (второй комплект) тоже нужно пробросить в виртуальную машину. Либо же подключиться к VM по RDP.

На этом пока всё, с уважением автор блога Олло Александр aka ekzorchik.