LINUX.ORG.RU

Каким образом пробросить видеокарту внутрь виртуалки Proxmox?

 , , , ,


1

2

Здравствуйте, господа. Имеется материнка ASRock J5005-ITX, где установлен Proxmox 6 поверх Debian 10. Осваимваю виртуализацию и пытаюсь пробросить интегрированную карточку Intel UHD Graphics 605 внутрь гостевой ОС Windows 10.

Вывод lspci -nn | grep «VGA»:

00:02.0 VGA compatible controller [0300]: Intel Corporation UHD Graphics 605 [8086:3184] (rev 03)

В /etc/default/grub прописал:

GRUB_CMDLINE_LINUX_DEFAULT="quiet i915.enable_gvt=1 kvm.ignore_msrs=1 intel_iommu=on i915.enable_guc=0 video=efifb:off,vesafb=off vfio-pci.ids=8086:3184"

В /etc/modules прописал:

vfio-pci
vfio
vfio_iommu_type1
vfio_virqfd
kvmgt
mdev
vfio_mdev

В /etc/modprobe.d/pve-blacklist.conf добавил:

blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

В /etc/modprobe.d/vfio.conf добавил:

options vfio-pci ids=8086:3184 disable_vga=1

И, наконец, выполнил:

update-grub
update-initramfs -u -k all

и перезагрузился. После перезагрузки вывод lsmod | egrep «kvm|vfio»:

kvm_intel             245760  0
kvmgt                  28672  0
vfio_mdev              16384  0
mdev                   24576  2 kvmgt,vfio_mdev
kvm                   651264  2 kvmgt,kvm_intel
vfio_pci               49152  0
vfio_virqfd            16384  1 vfio_pci
vfio_iommu_type1       28672  0
vfio                   32768  4 kvmgt,vfio_mdev,vfio_iommu_type1,vfio_pci
irqbypass              16384  2 vfio_pci,kvm

Подскажите, пожалуйста, почему не создаётся директория mdev_supported_types по пути /sys/bus/pci/devices/0000:00:02.0/?


пытаюсь пробросить интегрированную карточку

Брось эту затею. Даже если получится, после очередного обновления развалится.

anonymous
()
Ответ на: комментарий от TheAnonymous

Мне нужно, чтобы в гостевой ОС видеокарточка работала с аппаратным ускорением и с максимальной производительностью. Быть может, я неправ в своём предположении, но мне почему-то кажется, что второй вариант у меня не прокатит, поскольку камень, скорее всего, GVT-g не поддерживает. Повторюсь: это всего лишь предположение. Посему остаётся 1-й вариант. Но и в нём сложность: по ходу мануала не удаётся извлечь ROM:

echo 1 > /sys/bus/pci/devices/0000:00:02.0/enable
bash: echo: ошибка записи: Устройство или ресурс занято
echo 1 > /sys/bus/pci/devices/0000:00:02.0/rom
cat /sys/bus/pci/devices/0000:00:02.0/rom > gpu.rom
cat: '/sys/bus/pci/devices/0000:00:02.0/rom': Ошибка ввода/вывода
echo 0 > /sys/bus/pci/devices/0000:00:02.0/rom
echo 0 > /sys/bus/pci/devices/0000:00:02.0/enable
bash: echo: ошибка записи: Устройство или ресурс занято
Ладно, Бог с ним пока что, может быть это необязательный шаг. Далее создаю виртуалку. Вывод cat /etc/pve/qemu-server/100.conf:
agent: 1
balloon: 0
bios: ovmf
boot: dc
bootdisk: sata0
cores: 2
cpu: host
efidisk0: local:100/vm-100-disk-1.qcow2,size=128K
hostpci0: 00:02,x-vga=on
machine: q35
memory: 2048
name: Win10
net0: virtio=**:**:**:**:**:**,bridge=vmbr0,firewall=1
numa: 0
ostype: win10
sata0: local:iso/windows10.iso,media=cdrom
sata1: local:100/vm-100-disk-0.qcow2,size=32G
scsihw: virtio-scsi-pci
smbios1: uuid=********-****-****-****-************
sockets: 1
vga: none
vmgenid: ********-****-****-****-************
Запускаю свежесозданную виртуалку - ошибок при запуске нет, внизу светится заветное ОК, однако при попытке подключиться при помощи noVNC - появляется сообщение о том, что невозможно подключиться к серверу:
VM 100 qmp command 'change' failed - VNC display not active
TASK ERROR: Failed to run vncproxy.
Ожидается: указав «vga: none» - я отключаю виртуальную видюху, указав «hostpci0: 00:02,x-vga=on» - я задействую реальную видюху. Должно же быть изображение в noVNC или я неправ?

Sferg
() автор топика
Ответ на: комментарий от anonymous

А каким образом, в таком случае, добиться изображения на реальной (проброшенной) видюхе?

Sferg
() автор топика
Ответ на: комментарий от einhander

Монитор по HDMI и так подключен настоящий. При запуске виртуалки изображение, передаваемое по HDMI пропадает (до запуска выводился syslog). No Signal и всё. Не пойму, в какую сторону копать.

Sferg
() автор топика
# dmesg | grep -aiE '((DMAR)|(kvm)|(drm)|(Command line)|(iommu)|(vfio))'
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.0.21-5-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on iommu=pt rd.driver.pre=vfio-pci video=vesafb:off,efifb:off
[    0.012787] ACPI: DMAR 0x000000005D6A0D70 0000A8 (v01 INTEL  GLK-SOC  00000003 BRXT 0100000D)
[    0.229304] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.0.21-5-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on iommu=pt rd.driver.pre=vfio-pci video=vesafb:off,efifb:off
[    0.229434] DMAR: IOMMU enabled
[    0.363464] DMAR: Host address width 39
[    0.363466] DMAR: DRHD base: 0x000000fed64000 flags: 0x0
[    0.363475] DMAR: dmar0: reg_base_addr fed64000 ver 1:0 cap 1c0000c40660462 ecap 9e2ff0505e
[    0.363478] DMAR: DRHD base: 0x000000fed65000 flags: 0x1
[    0.363487] DMAR: dmar1: reg_base_addr fed65000 ver 1:0 cap d2008c40660462 ecap f050da
[    0.363490] DMAR: RMRR base: 0x0000005d5d8000 end: 0x0000005d5f7fff
[    0.363492] DMAR: RMRR base: 0x0000005f800000 end: 0x0000007fffffff
[    0.363496] DMAR-IR: IOAPIC id 1 under DRHD base  0xfed65000 IOMMU 1
[    0.363497] DMAR-IR: HPET id 0 under DRHD base 0xfed65000
[    0.363499] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[    0.365430] DMAR-IR: Enabled IRQ remapping in x2apic mode
[    0.920596] DMAR: No ATSR found
[    0.920667] DMAR: dmar0: Using Queued invalidation
[    0.920672] DMAR: dmar1: Using Queued invalidation
[    0.920827] DMAR: Hardware identity mapping for device 0000:00:00.0
[    0.920830] DMAR: Hardware identity mapping for device 0000:00:00.1
[    0.920838] DMAR: Hardware identity mapping for device 0000:00:02.0
[    0.920841] DMAR: Hardware identity mapping for device 0000:00:0e.0
[    0.920843] DMAR: Hardware identity mapping for device 0000:00:0f.0
[    0.920846] DMAR: Hardware identity mapping for device 0000:00:12.0
[    0.920848] DMAR: Hardware identity mapping for device 0000:00:13.0
[    0.920850] DMAR: Hardware identity mapping for device 0000:00:13.1
[    0.920852] DMAR: Hardware identity mapping for device 0000:00:13.2
[    0.920854] DMAR: Hardware identity mapping for device 0000:00:13.3
[    0.920856] DMAR: Hardware identity mapping for device 0000:00:15.0
[    0.920859] DMAR: Hardware identity mapping for device 0000:00:1f.0
[    0.920861] DMAR: Hardware identity mapping for device 0000:00:1f.1
[    0.920865] DMAR: Hardware identity mapping for device 0000:01:00.0
[    0.920868] DMAR: Hardware identity mapping for device 0000:03:00.0
[    0.920872] DMAR: Hardware identity mapping for device 0000:04:00.0
[    0.920873] DMAR: Setting RMRR:
[    0.920876] DMAR: Ignoring identity map for HW passthrough device 0000:00:02.0 [0x5f800000 - 0x7fffffff]
[    0.920877] DMAR: Ignoring identity map for HW passthrough device 0000:00:15.0 [0x5d5d8000 - 0x5d5f7fff]
[    0.920880] DMAR: Prepare 0-16MiB unity mapping for LPC
[    0.920881] DMAR: Ignoring identity map for HW passthrough device 0000:00:1f.0 [0x0 - 0xffffff]
[    0.920928] DMAR: Intel(R) Virtualization Technology for Directed I/O
[    0.921037] iommu: Adding device 0000:00:00.0 to group 0
[    0.921049] iommu: Adding device 0000:00:00.1 to group 0
[    0.921064] iommu: Adding device 0000:00:02.0 to group 1
[    0.921077] iommu: Adding device 0000:00:0e.0 to group 2
[    0.921102] iommu: Adding device 0000:00:0f.0 to group 3
[    0.921116] iommu: Adding device 0000:00:12.0 to group 4
[    0.921135] iommu: Adding device 0000:00:13.0 to group 5
[    0.921156] iommu: Adding device 0000:00:13.1 to group 6
[    0.921173] iommu: Adding device 0000:00:13.2 to group 7
[    0.921192] iommu: Adding device 0000:00:13.3 to group 8
[    0.921209] iommu: Adding device 0000:00:15.0 to group 9
[    0.921234] iommu: Adding device 0000:00:1f.0 to group 10
[    0.921247] iommu: Adding device 0000:00:1f.1 to group 10
[    0.921264] iommu: Adding device 0000:01:00.0 to group 11
[    0.921282] iommu: Adding device 0000:03:00.0 to group 12
[    0.921302] iommu: Adding device 0000:04:00.0 to group 13
[    7.600722] VFIO - User Level meta-driver version: 0.3
[    7.777799] vfio-pci 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
[    7.795536] vfio_pci: add [8086:3184[ffffffff:ffffffff]] class 0x000000/00000000
[   11.695507] DMAR: 32bit 0000:01:00.0 uses non-identity mapping
[  497.554248] DMAR: DRHD: handling fault status reg 2
[  497.554313] DMAR: [DMA Write] Request device [00:02.0] fault addr 0 [fault reason 02] Present bit in context entry is clear
[  498.043526] vfio_ecap_init: 0000:00:02.0 hiding ecap 0x1b@0x100
[  498.045564] vfio-pci 0000:00:02.0: BAR 2: can't reserve [mem 0x90000000-0x9fffffff 64bit pref]
[  498.936803] vfio-pci 0000:00:02.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0x3df4
[  508.064011] vfio-pci 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
Sferg
() автор топика
28 декабря 2019 г.

1. Скачал с официального сайта архив с той же версией UEFI, которая зашита в материнку.
2. С помощью утилиты MMTool из UEFI извлёк дамп vBIOS интегрированной видюхи (8086:0406)
3. С помощью утилиты rom-parser/rom-fixer изменил VID\PID в извлечённом дампе на реальные (8086:3184)
4. С помощью rom-parser выяснилось, что видюха не поддерживает режим OVMF (UEFI), посему пришлось настроить виртуалку под SeaBIOS.
5. Скормил ранее извлечённый и модифицированный дамп vBIOS виртуалке:

args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=j5005_vbios.rom

6. Изображение на экране монитора появилось, вопрос решён.

Sferg
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.