Здравствуйте, господа. Имеется следующее железо:
- ASRock J5005-ITX (UEFI);
- Intel Pentium Silver J5005 (VT-x, VT-d);
- Intel UHD Graphics 605 (подключение к монитору по HDMI);
- 2 x 8 DDR4-2400 SO-DIMM.
Установил Debian 10 ("Stretch"), поверх него "накатил" Proxmox 6 (дальнейшее управление осуществляется через Web-интерфейс с другого ПК, который находится в той же локальной сети).
0. Вывод
uname -a:
Linux j5005-itx 5.3.10-1-pve #1 SMP PVE 5.3.10-1 (Thu, 14 Nov 2019 10:43:13 +0100) x86_64 GNU/Linux
Что сделал дальше:
1. В файле
/etc/default/grub изменил строку:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off"
2. Добавил в конец файла
/etc/modules следующие строки:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
3. В конец файла
/etc/modprobe.d/pve-blacklist.conf добавил строки:
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915
4. Создал файл
/etc/modprobe.d/kvm.conf и добавил в него строку:
options kvm ignore_msrs=1
5. Создал файл
/etc/modprobe.d/vfio.conf и добавил в него строку:
options vfio-pci ids=8086:3184
поскольку команда
lspci -nn | grep "VGA" выводит следующее:
00:02.0 VGA compatible controller [0300]: Intel Corporation UHD Graphics 605 [8086:3184] (rev 03)
6. Из пакета
firmware-misc-nonfree извлёк файл
glk_dmc_ver1_04.bin и скопировал его в директорию
/usr/share/kvm.
7. Привёл файл виртуальной машины
/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,pcie=1,romfile=glk_dmc_ver1_04.bin,x-vga=1
machine: q35
memory: 2048
name: Win10
net0: virtio=DA:52:A4:8B:C5:6F,bridge=vmbr0,firewall=1
numa: 0
ostype: win10
sata0: local:iso/ru-en_windows_10_1903-Jun_x86-x64_32in1_HWID-act-FiraDisk.iso,media=cdrom
sata1: local:100/vm-100-disk-0.qcow2,size=32G
scsihw: virtio-scsi-pci
smbios1: uuid=a02656db-e97c-4c2c-a4ff-955328ad71fc
sockets: 1
vga: none
vmgenid: 26990a9f-5645-47c4-99f6-1fa87481c708
Вывод команды
dmesg | grep -aiE '((DMAR)|(kvm)|(acs)|(drm)|(Command line)|(iommu)|(vfio))' до запуска виртуальной машины:
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.3.10-1-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on video=efifb:off
[ 0.009497] ACPI: FACS 0x000000006D6B1080 000040
[ 0.009608] ACPI: DMAR 0x000000006D6A0D70 0000A8 (v01 INTEL GLK-SOC 00000003 BRXT 0100000D)
[ 0.142439] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.3.10-1-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on video=efifb:off
[ 0.142565] DMAR: IOMMU enabled
[ 0.281246] DMAR: Host address width 39
[ 0.281248] DMAR: DRHD base: 0x000000fed64000 flags: 0x0
[ 0.281258] DMAR: dmar0: reg_base_addr fed64000 ver 1:0 cap 1c0000c40660462 ecap 9e2ff0505e
[ 0.281260] DMAR: DRHD base: 0x000000fed65000 flags: 0x1
[ 0.281269] DMAR: dmar1: reg_base_addr fed65000 ver 1:0 cap d2008c40660462 ecap f050da
[ 0.281272] DMAR: RMRR base: 0x0000006d5d8000 end: 0x0000006d5f7fff
[ 0.281274] DMAR: RMRR base: 0x0000006f800000 end: 0x0000007fffffff
[ 0.281278] DMAR-IR: IOAPIC id 1 under DRHD base 0xfed65000 IOMMU 1
[ 0.281280] DMAR-IR: HPET id 0 under DRHD base 0xfed65000
[ 0.281281] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.283216] DMAR-IR: Enabled IRQ remapping in x2apic mode
[ 0.820781] DMAR: No ATSR found
[ 0.820867] DMAR: dmar0: Using Queued invalidation
[ 0.820872] DMAR: dmar1: Using Queued invalidation
[ 0.821278] pci 0000:00:00.0: Adding to iommu group 0
[ 0.821296] pci 0000:00:00.1: Adding to iommu group 0
[ 0.856475] pci 0000:00:02.0: Adding to iommu group 1
[ 0.856620] pci 0000:00:0e.0: Adding to iommu group 2
[ 0.856719] pci 0000:00:0f.0: Adding to iommu group 3
[ 0.856828] pci 0000:00:12.0: Adding to iommu group 4
[ 0.856944] pci 0000:00:13.0: Adding to iommu group 5
[ 0.857030] pci 0000:00:13.1: Adding to iommu group 6
[ 0.857143] pci 0000:00:13.2: Adding to iommu group 7
[ 0.857238] pci 0000:00:13.3: Adding to iommu group 8
[ 0.857388] pci 0000:00:15.0: Adding to iommu group 9
[ 0.857484] pci 0000:00:1f.0: Adding to iommu group 10
[ 0.857502] pci 0000:00:1f.1: Adding to iommu group 10
[ 0.857618] pci 0000:01:00.0: Adding to iommu group 11
[ 0.857715] pci 0000:03:00.0: Adding to iommu group 12
[ 0.857844] pci 0000:04:00.0: Adding to iommu group 13
[ 0.857919] DMAR: Intel(R) Virtualization Technology for Directed I/O
[ 6.897158] VFIO - User Level meta-driver version: 0.3
[ 7.368306] vfio-pci 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
[ 7.385318] vfio_pci: add [8086:3184[ffffffff:ffffffff]] class 0x000000/00000000
При запуске виртуальной машины там же появляются следующие строки:
[ 1013.548131] DMAR: DRHD: handling fault status reg 2
[ 1013.548140] DMAR: [DMA Write] Request device [00:02.0] fault addr 0 [fault reason 02] Present bit in context entry is clear
[ 1014.177149] vfio-pci 0000:00:02.0: vfio_ecap_init: hiding ecap 0x1b@0x100
При остановке виртуальной машины там же появляются следующие строки:
[ 1149.230800] DMAR: DRHD: handling fault status reg 2
[ 1149.230809] DMAR: [DMA Write] Request device [00:02.0] fault addr 0 [fault reason 02] Present bit in context entry is clear
И, самое главное, при запуске виртуальной машины напрочь пропадает изображение на мониторе, который подключён через HDMI. Светодиод на мониторе начинает мигать как при отсутствии видеосигнала с ПК.
Подскажите, пожалуйста, как добиться изображения на мониторе, которое (в теории) должно выводиться от виртуальной машины? Хотелось бы, чтобы видеокарточка в виртуалке работала на максимуме своей производительности (примерно как на реальном железе).