Kaby Lake IGD passthrough on Proxmox 5.1 with Win10 VM

Discussion in 'Proxmox VE: Installation and configuration' started by Leif Julen, Nov 15, 2017.

  1. Leif Julen

    Leif Julen New Member

    Joined:
    Nov 7, 2017
    Messages:
    6
    Likes Received:
    0
    Others wiser than me may have already solved this problem, but I'm stumped and need help. I'm on a steep learning curve with linux and Proxmox, so please bear with me.

    I followed the below links trying to set up a Windows 10 VM with Kaby Lake IGD passthrough to drive one or more of my monitors, but the Windows VM still doesn't detect any VGA/DVI/HDMI attached monitor no matter which configuration I've tried. What am I missing? What other information other than the below is needed to troubleshoot?

    pve.proxmox.com/wiki/Pci_passthrough
    forum.proxmox.com/threads/guide-intel-intergrated-graphic-passthrough.30451/
    redhat.com/archives/vfio-users/2017-April/msg00032.html
    forum.proxmox.com/threads/proxmox-5-0-kaby-lake-and-igd-graphics-passthrough-for-windows-10.36165/

    Hardware is MSI C236A with E3-1245v6 and 32GB ECC. Non-UEFI configured to boot with IGD enabled as default output and directed I/O (VT-d) enabled. I modified my Proxmox 5.1 and Windows 10 VM the following way:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:eek:ff,vesafb:eek:ff"

    blacklist snd_hda_intel
    blacklist snd_hda_codec_hdmi
    blacklist i915

    vfio
    vfio_iommu_type1
    vfio_pci
    vfio_virqfd

    options vfio-pci ids=8086:591d disable_vga=1

    /sys/kernel/iommu_groups/7/devices/0000:00:17.0
    /sys/kernel/iommu_groups/15/devices/0000:06:00.0
    /sys/kernel/iommu_groups/15/devices/0000:06:00.1
    /sys/kernel/iommu_groups/15/devices/0000:05:02.0
    /sys/kernel/iommu_groups/5/devices/0000:00:15.0
    /sys/kernel/iommu_groups/5/devices/0000:00:15.1
    /sys/kernel/iommu_groups/13/devices/0000:03:00.0
    /sys/kernel/iommu_groups/3/devices/0000:00:08.0
    /sys/kernel/iommu_groups/11/devices/0000:00:1f.3
    /sys/kernel/iommu_groups/11/devices/0000:00:1f.4
    /sys/kernel/iommu_groups/11/devices/0000:00:1f.2
    /sys/kernel/iommu_groups/11/devices/0000:00:1f.0
    /sys/kernel/iommu_groups/1/devices/0000:00:01.1
    /sys/kernel/iommu_groups/1/devices/0000:00:01.0
    /sys/kernel/iommu_groups/1/devices/0000:02:00.0
    /sys/kernel/iommu_groups/8/devices/0000:00:1c.0
    /sys/kernel/iommu_groups/16/devices/0000:07:00.0
    /sys/kernel/iommu_groups/16/devices/0000:05:04.0
    /sys/kernel/iommu_groups/16/devices/0000:07:00.1
    /sys/kernel/iommu_groups/6/devices/0000:00:16.0
    /sys/kernel/iommu_groups/14/devices/0000:04:00.0
    /sys/kernel/iommu_groups/4/devices/0000:00:14.2
    /sys/kernel/iommu_groups/4/devices/0000:00:14.0
    /sys/kernel/iommu_groups/12/devices/0000:00:1f.6
    /sys/kernel/iommu_groups/2/devices/0000:00:02.0
    /sys/kernel/iommu_groups/10/devices/0000:00:1e.0
    /sys/kernel/iommu_groups/0/devices/0000:00:00.0
    /sys/kernel/iommu_groups/9/devices/0000:00:1c.4

    00:02.0 VGA compatible controller [0300]: Intel Corporation HD Graphics P630 [8086:591d] (rev 04)

    args: -device vfio-pci,host=00:02.0,addr=0x02
    bios: ovmf
    bootdisk: scsi0
    cores: 4
    cpu: host
    efidisk0: local-zfs:vm-200-disk-2,size=128K
    machine: q35
    memory: 8192
    name: Win10Pro64
    net0: virtio=B2:83:E3:9F:D2:BE,bridge=vmbr0
    numa: 0
    ostype: win10
    parent: Fresh_Install
    scsi0: local-zfs:vm-200-disk-1,cache=writeback,discard=on,size=32G
    scsihw: virtio-scsi-pci
    smbios1: uuid=79a7e25a-d143-4f2b-aec5-7fafe78bbc7b
    sockets: 1
    usb0: host=1-10
    usb1: host=1-9
    vga: none

    Thank you!
     
  2. Leif Julen

    Leif Julen New Member

    Joined:
    Nov 7, 2017
    Messages:
    6
    Likes Received:
    0
    I should clarify that everything seems to be working with my Xeon Kaby Lake IGD except for output to an external monitor. I've got iGPU acceleration for software that takes advantage of it, but no way to view the Windows 10 VM desktop without using Remote Desktop, SPICE, VNC, etc... on another computer. The whole point of virtualization is to avoid needing multiple computers, right?

    I read the info below from nearly two years ago regarding qemu IGD passthrough which seemed applicable to me, tried a few of its suggestions, but still have had no luck:

    github.com/qemu/qemu/blob/master/docs/igd-assign.txt

    YAGA confirmed that he is getting IGD passthrough to display on an external monitor, so I know it is possible. I just don't know what I am missing... Please help, IGD passthrough to external monitor is the linchpin for my project!

    Thank you in advance!
     
  3. mcflym

    mcflym Member

    Joined:
    Jul 10, 2013
    Messages:
    176
    Likes Received:
    7
    Here is my vm config, maybe it helps:

    bios: ovmf
    boot: dcn
    bootdisk: scsi0
    cores: 2
    cpu: Haswell-noTSX
    hostpci0: 01:00,x-vga=on
    memory: 8192
    name: win10steamserver
    net0: virtio=EA:4E:94:25:3D:BA,bridge=vmbr1
    numa: 0
    ostype: win8
    scsi0: vm2:104/vm-104-disk-1.raw,backup=0,size=50G
    scsi1: /dev/disk/by-id/xxxxxxxxxxx
    scsihw: virtio-scsi-pci
    smbios1: uuid=xxxxxxxxxxxxxxx
    sockets: 1
    usb0: host=3-6

    It's working with Windows 8.1 and a dedicated card.
     
    #3 mcflym, Nov 16, 2017
    Last edited: Nov 16, 2017
  4. adamb

    adamb Member
    Proxmox VE Subscriber

    Joined:
    Mar 1, 2012
    Messages:
    943
    Likes Received:
    16
    I am currently doing this on a pretty large scale and having great success so far. Here are some of the items I ran into.

    - The only way I could get the monitor to turn on was to install the Intel drivers in the VM. Once I did that it made all the difference in the world.
    - I also pass qxl for vga but I keep that adapter disabled and only for emergency situations

    - I made a base windows image (With Intel Drivers) and sysprep'd for easy deployment

    Here is my args command.

    args: -device vfio-pci,host=00:02.0,addr=0x18,x-vga=on,x-igd-opregion=on
     
    Leif Julen likes this.
  5. Leif Julen

    Leif Julen New Member

    Joined:
    Nov 7, 2017
    Messages:
    6
    Likes Received:
    0
    Thanks adamb and mcflym,

    I've tried adamb's args command as well but the VM fails to start giving me the following error:
    I don't know how to interpret that error. However, I think the problem lies with "x-vga=on" since the VM always fails with the above error when I include it. The following args commands have been recommended by others with Intel IGD passthrough and all successfully let my Windows 10 VM boot, but none of them give me output to an external monitor still:
    I have the Intel drivers installed and the Windows VM shows "Intel(R) HD Graphics P630" as working in Device Manager. But still no external monitor detected. I'm stumped.

    From what I've read, "x-igd-opregion=on" is required for the Intel iGPU to output to an external monitor using the "Universal Pass-Through" (UPT for Broadwell or newer iGPU) versus the "legacy" method (for Sandy Bridge iGPU or older). Several people also use "x-vga=on" with the UPT method, but it crashes my VM. I of course would prefer to use UPT since I believe my Xeon E3-1245v6 supports it. Maybe someone has a theory for what is going wrong based on that info?

    mcflym, are you using an add-on graphics card to passthrough video to an external monitor? I have the impression that the method of passing through Intel's integrated GPU (iGPU) is different from passthrough for a full-blown AMD or Nvidia graphics card. I have successfully gotten passthrough for other PCIe cards (HBA and NIC for FreeNAS and pfSense) using the "hostpci0:" method like in your config. However, that method doesn't seem to work for Intel iGPU passthrough (at least on my Windows 10 VM).

    Thanks again!
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice