Hello everyone,
I know that there are a lot of threads covering this topic but I could not find any that solve my issues.
I would like to run Proxmox headless and passthrough the iGPU (and the capability of displaying the output on a monitor) to one VM. I also tried to use Intel igvt-g but unfortunately this does not provide a local display output.
I am trying to do this using Proxmox 5.1-35 .
My HW is as follows:
CPU : Intel i3-7100T
- Intel® Virtualization Technology (VT-x) ‡ Yes
- Intel® Virtualization Technology for Directed I/O (VT-d) ‡ Yes
- Intel® VT-x with Extended Page Tables (EPT) ‡ Yes
MB : Gigabyte ga-z270
RAM : HyperX Fury Black DDR4 2133MHz 16GB (2x8GB)
In the BIOS I have enabled the following options:
VT-d [Enabled]
Graphics Boot [IGFX]
I have done the following steps which I copy here as a kind of "how-to" if someone is willing to try and replicate them.
Load kernel modules, blacklist modules and assign (i)GPU to vfio:
* Load kernel modules:
Edit "/etc/initramfs-tools/modules" :
* Blacklist modules:
Execute "lspci -nv | grep VGA"
my output is:
save the bus/function numbers (ie : 00:02.0) and ID (ie : 8086:5912) because they will be used in the next steps.
Execute "lspci -nks <bus/function>" (ie : "lspci -nks 00:02.0")
my output is:
NB: The following step can be avoided if GRUB command line is modified to include the list of blacklisted
modules. I tried both methods but in the setup I am running right now I do not use pve-blacklist to
blacklist modules.
Edit "/etc/modprobe.d/pve-blacklist.conf" and add the 'kernel driver in use' from the previous command.
* Assign the GPU to vfio:
Edit "/etc/modprobe.d/vfio.conf" and add the following line where ids=<ID> from previous step.
I also had to specify "disable_vga=1" otherwise I will not see a IOMMU group containing device 00:02 .
Generate new initramfs:
make a backup copy of the current initramfs located in /boot (ie: initrd.img-4.13.4-1-pve) and execute:
update-initramfs -u -t
rename the newly generated initramfs to something different.
I generated 2 initramfs for each configuration of "/etc/initramfs-tools/modules" (passthrough or igvt-g) :
- one containing the modules for the passthrough ( initrd.img-4.13.4-1-pve-passthrough )
- one containing the modules for kvmgt and igvt-g ( initrd.img-4.13.4-1-pve-kvmgt )
Modify GRUB to enable IOMMU and blacklist drivers:
Edit "/etc/grub.d/40_custom" (examples of menuentries can be found in "/boot/grub/grub.cfg")
mine looks like the following:
Edit "/etc/default/grub" and change GRUB_DEFAULT to match the menuentry that should be executed by default
run "update-grub" and reboot the system.
Check Passthrough or igvt-g KVMGT:
On the monitor are displayed the BIOS startup screen and the GRUB up to
then nothing else is displayed.
Execute "dmesg|grep -e DMAR -e IOMMU"
I get the following output:
Execute "dmesg | grep -i vfio"
I get the following output:
Execute "find /sys/kernel/iommu_groups/ -type l"
I get the following output where the VGA (00:02) is in his own group (1):
Execute "lspci -nvks <bus/function>" (ie : "lspci -nvks 00:02.0"), now the kernel driver in use is "vfio-pci"
Only for igvt-g KVMGT:
More comprehensive tutorial is on github (
but for Proxmox many steps are not necessary.
ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/
I see the following two types:
i915-GVTg_V5_4 i915-GVTg_V5_8
If I look at the info for the 2 types:
"cat i915-GVTg_V5_4/description"
returns
low_gm_size: 128MB
high_gm_size: 512MB
fence: 4
resolution: 1920x1200
weight: 4
generate an UUID, an example can be "a297db4a-f4c2-11e6-90f6-d3b88d6c9525" .
Execute:
echo "a297db4a-f4c2-11e6-90f6-d3b88d6c9525" > /sys/bus/pci/devices/0000\:00\:02.0/mdev_supported_types/i915-GVTg_V5_4/create
Setup VM:
Setup a VM as desired and then edit "/etc/pve/qemu-server/<vmid>.conf"
- Passthrough with OVMF:
vi /etc/pve/qemu-server/101.conf
mine looks like:
I tried both with and without specifying the GPU firmware downloaded from 01[dot]org
To specify it use "hostpci0: 00:02,pcie=1,romfile=kbl_dmc_ver1_01.bin,x-vga=1" .
The romfile has to be stored in /usr/share/kvm/ as specified in
If I start the VM with this configuration the monitor turns black (the two lines 'Loading Linux 4.13.4-1-pve ...'
and 'Loading initial ramdisk ...' disappear) but nothing gets displayed.
noVNC fails with the following message:
VM 101 qmp command 'change' failed - VNC display not active
TASK ERROR: Failed to run vncproxy.
If I execute "qm monitor 101" and then run "info pci" I can find the following entry:
No additional VGA controller is available.
If I "quit" the qm monitor and execute "dmesg | grep -i vfio" I get:
(I was also trying to passthrought the audio device here, hence the additional "vfio_pci: add [8086:a2f0[ffff:ffff]]")
On the monitor page I can see that the CPU load is around 25% and the RAM usage is 85%, both values are not changing much over time.
It is possible to shutdown the VM without rebooting the system.
- Passthrough without OVMF:
vi /etc/pve/qemu-server/101.conf
mine looks like:
it is also possible to specify in the args the romfile (ie: ,romfile=kbl_dmc_ver1_01.bin)
If I start the VM with this configuration the monitor turns black (the two lines 'Loading Linux 4.13.4-1-pve ...'
and 'Loading initial ramdisk ...' disappear) but nothing gets displayed.
noVNC is running and I can see the boot procedure up to login screen, then the system hangs.
If I start the VM in recovery mode I can see the following:
and after a while the error:
If I execute "qm monitor 101" and then run "info pci" I can find the following entry:
if I "quit" the qm monitor and execute "dmesg | grep -i vfio" I get:
(I was also trying to passthrought the audio device here, hence the additional "vfio_pci: add [8086:a2f0[ffff:ffff]]")
On the monitor page I can see that after the boot procedure the CPU load is around 0.25% and the RAM usage is 8.5%.
It is possible to shutdown the VM without rebooting the system.
- igvt-g KVMGT without OVMF:
vi /etc/pve/qemu-server/100.conf
mine looks like:
I also tried to specify in the args the romfile (ie: ,romfile=kbl_dmc_ver1_01.bin)
Before starting the VM is necessary to run the
echo "a297db4a-f4c2-11e6-90f6-d3b88d6c9525" > /sys/bus/pci/devices/0000\:00\:02.0/mdev_supported_types/i915-GVTg_V5_4/create
as described in the section "Only for igvt-g KVMGT" otherwise the VM will not start.
noVNC is running and I can see the boot procedure and also login. The Desktop Environment is displayed and if I open the terminal
in the VM and run "lspci -nv | grep VGA" I get:
00:01.0 0300: 1234:1111 (rev 02) (prog-if 00 [VGA controller])
00:02.0 0300: 8086:5912 (rev 04) (prog-if 00 [VGA controller])
If I execute "qm monitor 101" and then run "info pci" I can find the following entries:
if I "quit" the qm monitor and execute "dmesg | grep -i vfio" I get:
I did not try to provide HW graphic accelleration to anything yet so I do not know if this is configuration
is fully working.
According to the latest release notes (
By the way, if I generate the Xorg.conf file, I save and modify it as described on github (
the background image and no Desktop Environment is displayed.
Did anyone succeed to do the pass-through of the iGPU to the VM and display the output to the attached monitor?
PS: I wanted to include the links but I am not allowed to. Manually add 'h-t-t-p-s-:' in front of them and replace \ with /.
I know that there are a lot of threads covering this topic but I could not find any that solve my issues.
I would like to run Proxmox headless and passthrough the iGPU (and the capability of displaying the output on a monitor) to one VM. I also tried to use Intel igvt-g but unfortunately this does not provide a local display output.
I am trying to do this using Proxmox 5.1-35 .
My HW is as follows:
CPU : Intel i3-7100T
- Intel® Virtualization Technology (VT-x) ‡ Yes
- Intel® Virtualization Technology for Directed I/O (VT-d) ‡ Yes
- Intel® VT-x with Extended Page Tables (EPT) ‡ Yes
MB : Gigabyte ga-z270
RAM : HyperX Fury Black DDR4 2133MHz 16GB (2x8GB)
In the BIOS I have enabled the following options:
VT-d [Enabled]
Graphics Boot [IGFX]
I have done the following steps which I copy here as a kind of "how-to" if someone is willing to try and replicate them.
Load kernel modules, blacklist modules and assign (i)GPU to vfio:
* Load kernel modules:
Edit "/etc/initramfs-tools/modules" :
Code:
# List of modules that you want to include in your initramfs.
# They will be loaded at boot time in the order below.
#
# Syntax: module_name [args ...]
#
# You must run update-initramfs(8) to effect this change.
#
# Examples:
#
# raid1
# sd_mod
#
#===============================
# Modules for igvt-g
#===============================
#kvmgt
#xengt
#vfio-iommu-type1
#vfio-mdev
#
#vfio
#vfio_pci
#vfio_virqfd
#===============================
# End of Modules for igvt-g
#===============================
# Modules for passthrough
#===============================
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
#===============================
# End of Modules for passthrough
#===============================
* Blacklist modules:
Execute "lspci -nv | grep VGA"
my output is:
Code:
00:02.0 0300: 8086:5912 (rev 04) (prog-if 00 [VGA controller])
save the bus/function numbers (ie : 00:02.0) and ID (ie : 8086:5912) because they will be used in the next steps.
Execute "lspci -nks <bus/function>" (ie : "lspci -nks 00:02.0")
my output is:
Code:
00:02.0 0300: 8086:5912 (rev 04)
Subsystem: 1458:d000
Kernel driver in use: i915
Kernel modules: i915
NB: The following step can be avoided if GRUB command line is modified to include the list of blacklisted
modules. I tried both methods but in the setup I am running right now I do not use pve-blacklist to
blacklist modules.
Edit "/etc/modprobe.d/pve-blacklist.conf" and add the 'kernel driver in use' from the previous command.
Code:
# This file contains a list of modules which are not supported by Proxmox VE
blacklist nvidiafb
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915
* Assign the GPU to vfio:
Edit "/etc/modprobe.d/vfio.conf" and add the following line where ids=<ID> from previous step.
I also had to specify "disable_vga=1" otherwise I will not see a IOMMU group containing device 00:02 .
Code:
options vfio-pci ids=8086:5912 disable_vga=1
Generate new initramfs:
make a backup copy of the current initramfs located in /boot (ie: initrd.img-4.13.4-1-pve) and execute:
update-initramfs -u -t
rename the newly generated initramfs to something different.
I generated 2 initramfs for each configuration of "/etc/initramfs-tools/modules" (passthrough or igvt-g) :
- one containing the modules for the passthrough ( initrd.img-4.13.4-1-pve-passthrough )
- one containing the modules for kvmgt and igvt-g ( initrd.img-4.13.4-1-pve-kvmgt )
Modify GRUB to enable IOMMU and blacklist drivers:
Edit "/etc/grub.d/40_custom" (examples of menuentries can be found in "/boot/grub/grub.cfg")
mine looks like the following:
Code:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'Proxmox Virtual Environment GNU/Linux KVMGT' --class proxmox --class kvmgt --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-c468e2be-a6ac-41bf-a123-aeeb72540bd8' {
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod lvm
insmod ext2
set root='lvmid/AuF2io-Ungg-417W-RRsC-7JEQ-T1BP-rTnuFa/CilH8U-YJyL-u8j8-drMl-dtyB-NfBw-a75qu0'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='lvmid/AuF2io-Ungg-417W-RRsC-7JEQ-T1BP-rTnuFa/CilH8U-YJyL-u8j8-drMl-dtyB-NfBw-a75qu0' c468e2be-a6ac-41bf-a123-aeeb72540bd8
else
search --no-floppy --fs-uuid --set=root c468e2be-a6ac-41bf-a123-aeeb72540bd8
fi
echo 'Loading Linux 4.13.4-1-pve ...'
linux /boot/vmlinuz-4.13.4-1-pve root=/dev/mapper/pve-root ro i915.enable_gvt=1 kvm.ignore_msrs=1 intel_iommu=igfx_off drm.debug=0
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-4.13.4-1-pve-kvmgt
}
menuentry 'Proxmox Virtual Environment GNU/Linux Passthrough' --class proxmox --class kvmgt --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-c468e2be-a6ac-41bf-a123-aeeb72540bd8' {
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod lvm
insmod ext2
set root='lvmid/AuF2io-Ungg-417W-RRsC-7JEQ-T1BP-rTnuFa/CilH8U-YJyL-u8j8-drMl-dtyB-NfBw-a75qu0'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='lvmid/AuF2io-Ungg-417W-RRsC-7JEQ-T1BP-rTnuFa/CilH8U-YJyL-u8j8-drMl-dtyB-NfBw-a75qu0' c468e2be-a6ac-41bf-a123-aeeb72540bd8
else
search --no-floppy --fs-uuid --set=root c468e2be-a6ac-41bf-a123-aeeb72540bd8
fi
echo 'Loading Linux 4.13.4-1-pve ...'
linux /boot/vmlinuz-4.13.4-1-pve root=/dev/mapper/pve-root ro i915.enable_gvt=1 kvm.ignore_msrs=1 intel_iommu=on drm.debug=0 video=efifb:off modprobe.blacklist=i915,snd_hda_intel,snd_hda_codec_hdmi
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-4.13.4-1-pve-passthrough
}
Edit "/etc/default/grub" and change GRUB_DEFAULT to match the menuentry that should be executed by default
Code:
# 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="Proxmox Virtual Environment GNU/Linux Passthrough"
#GRUB_DEFAULT="Proxmox Virtual Environment GNU/Linux KVMGT"
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Proxmox Virtual Environment"
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
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"
run "update-grub" and reboot the system.
Check Passthrough or igvt-g KVMGT:
On the monitor are displayed the BIOS startup screen and the GRUB up to
Code:
'Loading Linux 4.13.4-1-pve ...'
'Loading initial ramdisk ...'
Execute "dmesg|grep -e DMAR -e IOMMU"
I get the following output:
Code:
[ 0.000000] ACPI: DMAR 0x00000000CC4703A0 0000A8 (v01 INTEL KBL 00000001 INTL 00000001)
[ 0.000000] DMAR: IOMMU enabled
[ 0.033493] DMAR: Host address width 39
[ 0.033495] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[ 0.033501] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap 1c0000c40660462 ecap 19e2ff0505e
[ 0.033505] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[ 0.033508] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da
[ 0.033511] DMAR: RMRR base: 0x000000cbf2b000 end: 0x000000cbf4afff
[ 0.033514] DMAR: RMRR base: 0x000000cd800000 end: 0x000000cfffffff
[ 0.033517] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/
[ 0.033519] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[ 0.033520] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.034871] DMAR-IR: Enabled IRQ remapping in x2apic mode
[ 0.553071] DMAR: No ATSR found
[ 0.553289] DMAR: dmar0: Using Queued invalidation
[ 0.553414] DMAR: dmar1: Using Queued invalidation
[ 0.553627] DMAR: Setting RMRR:
[ 0.553656] DMAR: Setting identity map for device 0000:00:02.0 [0xcd800000 - 0xcfffffff]
[ 0.553675] DMAR: Setting identity map for device 0000:00:14.0 [0xcbf2b000 - 0xcbf4afff]
[ 0.553682] DMAR: Prepare 0-16MiB unity mapping for LPC
[ 0.553695] DMAR: Setting identity map for device 0000:00:1f.0 [0x0 - 0xffffff]
[ 0.553815] DMAR: Intel(R) Virtualization Technology for Directed I/O
Execute "dmesg | grep -i vfio"
I get the following output:
Code:
[ 1.409987] VFIO - User Level meta-driver version: 0.3
[ 1.412348] vfio-pci 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
[ 1.432227] vfio_pci: add [8086:5912[ffff:ffff]] class 0x000000/00000000
Execute "find /sys/kernel/iommu_groups/ -type l"
I get the following output where the VGA (00:02) is in his own group (1):
Code:
/sys/kernel/iommu_groups/17/devices/0000:00:1f.6
/sys/kernel/iommu_groups/7/devices/0000:00:1b.2
/sys/kernel/iommu_groups/15/devices/0000:00:1d.0
/sys/kernel/iommu_groups/5/devices/0000:00:17.0
/sys/kernel/iommu_groups/13/devices/0000:00:1c.6
/sys/kernel/iommu_groups/3/devices/0000:00:14.0
/sys/kernel/iommu_groups/11/devices/0000:00:1c.4
/sys/kernel/iommu_groups/1/devices/0000:00:02.0
/sys/kernel/iommu_groups/18/devices/0000:06:00.0
/sys/kernel/iommu_groups/8/devices/0000:00:1b.4
/sys/kernel/iommu_groups/16/devices/0000:00:1f.3
/sys/kernel/iommu_groups/16/devices/0000:00:1f.4
/sys/kernel/iommu_groups/16/devices/0000:00:1f.2
/sys/kernel/iommu_groups/16/devices/0000:00:1f.0
/sys/kernel/iommu_groups/6/devices/0000:00:1b.0
/sys/kernel/iommu_groups/14/devices/0000:00:1c.7
/sys/kernel/iommu_groups/4/devices/0000:00:16.0
/sys/kernel/iommu_groups/12/devices/0000:00:1c.5
/sys/kernel/iommu_groups/2/devices/0000:00:08.0
/sys/kernel/iommu_groups/10/devices/0000:00:1c.2
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/19/devices/0000:07:00.0
/sys/kernel/iommu_groups/9/devices/0000:00:1c.0
Execute "lspci -nvks <bus/function>" (ie : "lspci -nvks 00:02.0"), now the kernel driver in use is "vfio-pci"
Code:
00:02.0 0300: 8086:5912 (rev 04) (prog-if 00 [VGA controller])
Subsystem: 1458:d000
Flags: bus master, fast devsel, latency 0, IRQ 11
Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
Memory at e0000000 (64-bit, prefetchable) [size=256M]
I/O ports at f000 [size=64]
[virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
Capabilities: [40] Vendor Specific Information: Len=0c <?>
Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
Capabilities: [ac] MSI: Enable- Count=1/1 Maskable- 64bit-
Capabilities: [d0] Power Management version 2
Capabilities: [100] Process Address Space ID (PASID)
Capabilities: [200] Address Translation Service (ATS)
Capabilities: [300] Page Request Interface (PRI)
Kernel driver in use: vfio-pci
Kernel modules: i915
Only for igvt-g KVMGT:
More comprehensive tutorial is on github (
)\intel\gvt-linux\wiki\GVTg_Setup_Guide#53-create-vgpu-kvmgt-only
but for Proxmox many steps are not necessary.
ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/
I see the following two types:
i915-GVTg_V5_4 i915-GVTg_V5_8
If I look at the info for the 2 types:
"cat i915-GVTg_V5_4/description"
returns
low_gm_size: 128MB
high_gm_size: 512MB
fence: 4
resolution: 1920x1200
weight: 4
generate an UUID, an example can be "a297db4a-f4c2-11e6-90f6-d3b88d6c9525" .
Execute:
echo "a297db4a-f4c2-11e6-90f6-d3b88d6c9525" > /sys/bus/pci/devices/0000\:00\:02.0/mdev_supported_types/i915-GVTg_V5_4/create
Setup VM:
Setup a VM as desired and then edit "/etc/pve/qemu-server/<vmid>.conf"
- Passthrough with OVMF:
vi /etc/pve/qemu-server/101.conf
mine looks like:
Code:
bios: ovmf
#hostpci0: 00:02,pcie=1,romfile=kbl_dmc_ver1_01.bin,x-vga=1
hostpci0: 00:02,pcie=1,x-vga=1
vga: std
machine: q35
balloon: 1024
bootdisk: scsi0
cores: 4
ide2: local:iso/debian-9.2.1-amd64-DVD-1.iso,media=cdrom
memory: 6144
name: Debian2
net0: virtio=3A:F3:48:FC:DD:6C,bridge=vmbr0
numa: 0
ostype: l26
scsi0: local-lvm:vm-101-disk-1,size=32G
scsihw: virtio-scsi-pci
smbios1: uuid=f737cfdf-3e24-4f99-9d00-a3386375cf1f
sockets: 1
I tried both with and without specifying the GPU firmware downloaded from 01[dot]org
./linuxgraphics/downloads
To specify it use "hostpci0: 00:02,pcie=1,romfile=kbl_dmc_ver1_01.bin,x-vga=1" .
The romfile has to be stored in /usr/share/kvm/ as specified in
//pve.proxmox.com/wiki/Manual:_qm.conf
If I start the VM with this configuration the monitor turns black (the two lines 'Loading Linux 4.13.4-1-pve ...'
and 'Loading initial ramdisk ...' disappear) but nothing gets displayed.
noVNC fails with the following message:
VM 101 qmp command 'change' failed - VNC display not active
TASK ERROR: Failed to run vncproxy.
If I execute "qm monitor 101" and then run "info pci" I can find the following entry:
Code:
Bus 1, device 0, function 0:
VGA controller: PCI device 8086:5912
IRQ 10.
BAR0: 64 bit memory at 0x90000000 [0x90ffffff].
BAR2: 64 bit prefetchable memory at 0x800000000 [0x80fffffff].
BAR4: I/O at 0xa000 [0xa03f].
BAR6: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
id "hostpci0"
No additional VGA controller is available.
If I "quit" the qm monitor and execute "dmesg | grep -i vfio" I get:
Code:
[ 1.409987] VFIO - User Level meta-driver version: 0.3
[ 1.412348] vfio-pci 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
[ 1.432227] vfio_pci: add [8086:5912[ffff:ffff]] class 0x000000/00000000
[ 1.452284] vfio_pci: add [8086:a2f0[ffff:ffff]] class 0x000000/00000000
[ 8579.576417] vfio-pci 0000:00:02.0: enabling device (0400 -> 0403)
[ 8579.684653] vfio_ecap_init: 0000:00:02.0 hiding ecap 0x1b@0x100
(I was also trying to passthrought the audio device here, hence the additional "vfio_pci: add [8086:a2f0[ffff:ffff]]")
On the monitor page I can see that the CPU load is around 25% and the RAM usage is 85%, both values are not changing much over time.
It is possible to shutdown the VM without rebooting the system.
- Passthrough without OVMF:
vi /etc/pve/qemu-server/101.conf
mine looks like:
Code:
args: -device vfio-pci,host=00:02.0,addr=02.0
machine: q35
balloon: 1024
bootdisk: scsi0
cores: 4
ide2: local:iso/debian-9.2.1-amd64-DVD-1.iso,media=cdrom
memory: 6144
name: Debian2
net0: virtio=3A:F3:48:FC:DD:6C,bridge=vmbr0
numa: 0
ostype: l26
scsi0: local-lvm:vm-101-disk-1,size=32G
scsihw: virtio-scsi-pci
smbios1: uuid=f737cfdf-3e24-4f99-9d00-a3386375cf1f
sockets: 1
it is also possible to specify in the args the romfile (ie: ,romfile=kbl_dmc_ver1_01.bin)
If I start the VM with this configuration the monitor turns black (the two lines 'Loading Linux 4.13.4-1-pve ...'
and 'Loading initial ramdisk ...' disappear) but nothing gets displayed.
noVNC is running and I can see the boot procedure up to login screen, then the system hangs.
If I start the VM in recovery mode I can see the following:
\\www[dot]dropbox[dot]com\s\gnr1jtb85pij2b3\proxmox_a.jpg?dl=0
and after a while the error:
\\www[dot]dropbox[dot]com\s\flvg418092utu9e\proxmox_b.jpg?dl=0
If I execute "qm monitor 101" and then run "info pci" I can find the following entry:
Code:
Bus 0, device 1, function 0:
VGA controller: PCI device 1234:1111
BAR0: 32 bit prefetchable memory at 0xf0000000 [0xf0ffffff].
BAR2: 32 bit memory at 0xfea34000 [0xfea34fff].
BAR6: 32 bit memory at 0xffffffffffffffff [0x0000fffe].
id ""
Bus 0, device 2, function 0:
VGA controller: PCI device 8086:5912
IRQ 11.
BAR0: 64 bit memory at 0xfd000000 [0xfdffffff].
BAR2: 64 bit prefetchable memory at 0xe0000000 [0xefffffff].
BAR4: I/O at 0xd000 [0xd03f].
BAR6: 32 bit memory at 0xffffffffffffffff [0x0001fffe].
id ""
if I "quit" the qm monitor and execute "dmesg | grep -i vfio" I get:
Code:
[ 1.409987] VFIO - User Level meta-driver version: 0.3
[ 1.412348] vfio-pci 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
[ 1.432227] vfio_pci: add [8086:5912[ffff:ffff]] class 0x000000/00000000
[ 1.452284] vfio_pci: add [8086:a2f0[ffff:ffff]] class 0x000000/00000000
[ 9675.141550] vfio-pci 0000:00:02.0: enabling device (0400 -> 0403)
[ 9675.249571] vfio_ecap_init: 0000:00:02.0 hiding ecap 0x1b@0x100
(I was also trying to passthrought the audio device here, hence the additional "vfio_pci: add [8086:a2f0[ffff:ffff]]")
On the monitor page I can see that after the boot procedure the CPU load is around 0.25% and the RAM usage is 8.5%.
It is possible to shutdown the VM without rebooting the system.
- igvt-g KVMGT without OVMF:
vi /etc/pve/qemu-server/100.conf
mine looks like:
Code:
args: -device vfio-pci,sysfsdev=/sys/bus/pci/devices/0000:00:02.0/a297db4a-f4c2-11e6-90f6-d3b88d6c9525,rombar=0
balloon: 1024
bootdisk: scsi0
cores: 4
ide2: local:iso/debian-9.2.1-amd64-DVD-1.iso,media=cdrom
memory: 6144
name: Debian
net0: virtio=3A:F3:48:FC:DD:6C,bridge=vmbr0
numa: 0
ostype: l26
scsi0: local-lvm:vm-100-disk-1,size=60G
scsihw: virtio-scsi-pci
smbios1: uuid=f737cfdf-3e24-4f99-9d00-a3386375cf1f
sockets: 1
I also tried to specify in the args the romfile (ie: ,romfile=kbl_dmc_ver1_01.bin)
Before starting the VM is necessary to run the
echo "a297db4a-f4c2-11e6-90f6-d3b88d6c9525" > /sys/bus/pci/devices/0000\:00\:02.0/mdev_supported_types/i915-GVTg_V5_4/create
as described in the section "Only for igvt-g KVMGT" otherwise the VM will not start.
noVNC is running and I can see the boot procedure and also login. The Desktop Environment is displayed and if I open the terminal
in the VM and run "lspci -nv | grep VGA" I get:
00:01.0 0300: 1234:1111 (rev 02) (prog-if 00 [VGA controller])
00:02.0 0300: 8086:5912 (rev 04) (prog-if 00 [VGA controller])
If I execute "qm monitor 101" and then run "info pci" I can find the following entries:
Code:
Bus 0, device 1, function 0:
VGA controller: PCI device 1234:1111
BAR0: 32 bit prefetchable memory at 0xf0000000 [0xf0ffffff].
BAR2: 32 bit memory at 0xfea14000 [0xfea14fff].
BAR6: 32 bit memory at 0xffffffffffffffff [0x0000fffe].
id ""
Bus 0, device 2, function 0:
VGA controller: PCI device 8086:5912
IRQ 11.
BAR0: 64 bit memory at 0xfd000000 [0xfdffffff].
BAR2: 64 bit prefetchable memory at 0xe0000000 [0xefffffff].
id ""
if I "quit" the qm monitor and execute "dmesg | grep -i vfio" I get:
Code:
[ 1.423997] VFIO - User Level meta-driver version: 0.3
[ 658.308477] vfio_mdev a297db4a-f4c2-11e6-90f6-d3b88d6c9525: MDEV: group_id = 0
I did not try to provide HW graphic accelleration to anything yet so I do not know if this is configuration
is fully working.
According to the latest release notes (
) it is not possible to connect a monitor to the guest ( - GVT-g only supports remote display not local display by this release. ) so this method is not suited for what I want to achieve.\01.org\igvt-g\blogs\wangbo85\2017\intel-gvt-g-kvmgt-public-release-q32017
By the way, if I generate the Xorg.conf file, I save and modify it as described on github (
), after the log in the display shows\intel\gvt-linux\wiki\GVTg_Setup_Guide#412-linux-intel-gfx-card-support
the background image and no Desktop Environment is displayed.
Did anyone succeed to do the pass-through of the iGPU to the VM and display the output to the attached monitor?
PS: I wanted to include the links but I am not allowed to. Manually add 'h-t-t-p-s-:' in front of them and replace \ with /.