On Wednesday, June 22, 2016 at 8:26:50 AM UTC-7, Marcus at WetwareLabs wrote:
> Hello all,
>
> I've been tinkering with GPU passthrough these couple of weeks and I thought
> I should now share some of my findings. It's not so much unlike the earlier
> report on GPU passthrough here
> (https://groups.google.com/forum/#!searchin/qubes-users/passthrough/qubes-users/cmPRMOkxkdA/gIV68O0-CQAJ).
>
> I started with Nvidia GTX 980, but I had no luck with ANY of the Xen
> hypervisors or Qubes versions. Please see my other thread for more
> information
> (https://groups.google.com/forum/#!searchin/qubes-users/passthrough/qubes-users/PuZLWxhTgM0/pWe7LXI-AgAJ).
>
> However after I switched to Radeon 6950, I've had success with all the Xen
> versions. So I guess it's a thing with Nvidia driver initialization. On a
> side note, someone should really test this with Nvidia Quadros that are
> officially supported to be used in VMs. (And of course, there are the hacks
> to convert older Geforces to Quadros..)
>
> Anyway, here's a quick and most likely incomplete list (for most users) for
> getting GPU passthrough working on Win 8.1 VM. (works identically on Win7)
>
> Enclosed are the VM configuration file and HCL file for information about my
> hardware setup (feel free to add this to HW compatibility list!)
>
> TUTORIAL
>
> Check which PCI addresses correspond to your GPU (and optionally, USB host)
> with lspci.Here's mine:
> ...
>
>
> # lspci
>
> 03:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI]
> Cayman XT [Radeon HD 6970]
> 03:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Cayman/Antilles
> HDMI Audio [Radeon HD 6900 Series]
> Note that you have to pass both of these devices if you have similar GPU with
> dual functionality.
>
> Edit /etc/default/grub and add following options (change the pci address if
> needed):
>
> GRUB_CMDLINE_LINUX=" rd.qubes.hide_pci=03:00.0,03:00.1
> modprobe=xen-pciback.passthrough=1 xen-pciback.permissive"
> GRUB_CMDLINE_XEN_DEFAULT="... dom0_mem=min:1024M dom0_mem=max:4096M"
>
> For extra logging:
>
>
> GRUB_CMDLINE_XEN_DEFAULT="... apic_verbosity=debug loglvl=all
> guest_loglvl=all iommu=verbose"
>
> There are many other options available, but I didn't see any difference in
> success rate. See here:
> http://xenbits.xen.org/docs/unstable/misc/xen-command-line.html
> http://wiki.xenproject.org/wiki/Xen_PCI_Passthrough
> http://wiki.xenproject.org/wiki/XenVGAPassthrough
>
> Update grub:
>
> # grub2-mkconfig -o /boot/grub2/grub.cfg
> Reboot. Check that VT-t is enabled:
>
> # xl dmesg
> ...
> (XEN) Intel VT-d iommu 0 supported page sizes: 4kB, 2MB, 1GB.
> (XEN) Intel VT-d iommu 1 supported page sizes: 4kB, 2MB, 1GB.
> (XEN) Intel VT-d Snoop Control not enabled.
> (XEN) Intel VT-d Dom0 DMA Passthrough not enabled.
> (XEN) Intel VT-d Queued Invalidation enabled.
> (XEN) Intel VT-d Interrupt Remapping enabled.
> (XEN) Intel VT-d Shared EPT tables enabled.
> (XEN) I/O virtualisation enabled
> (XEN) - Dom0 mode: Relaxed
> Check that pci devices are available to be passed:
>
> # xl pci-assignable list
> :03:00.0
> :03:00.1
> Create disk images:
>
> # dd if=/dev/zero of=win8.img bs=1M count=3
> # dd if=/dev/zero of=win8-user.img bs=1M count=3
> Install VNC server into Dom0
>
> # qubes-dom0-update vnc
> Modify the win8.hvm: Check that the disk images and Windows installation
> CDROM image are correct, and that the IP address does not conflict with any
> other VM (I haven't figured out yet how to set up dhcp) Check that 'pci = [
> ]' is commented for nowStart the VM ( -V option runs automatically VNC
> client)
>
> # xl create win8.hvm -V
>
> If you happen to close the client (but VM is still running), start it again
> with
>
>
> # xl vncviewer win8
> Note that I had success starting the VM only as root. Also killing the VM
> with 'xl destroy win8' would leave the qemu process lingering if not done as
> root (if that occurs, you have to kill that process manually)
> Install WindowsPartition the user image using 'Disk Manager'Download signed
> paravirtualized drivers here (Qubes PV drivers work only in Win
> 7):http://apt.univention.de/download/addons/gplpv-drivers/gplpv_Vista2008x64_signed_0.11.0.373.msi
> Don't mind the name, it works on Win 8.1 as well.
> For more info:
> http://wiki.univention.com/index.php?title=Installing-signed-GPLPV-drivers
>
> Move the drivers inside user image partition (shut down VM first):
>
> # losetup (Check for free loop device)
> # losetup -P /dev/loop10 win8-user.img (Setup loop device and scan
> partition. Assuming loop10 is free)
> # mount /dev/loop10p1 /mnt/removable ( Mount the first partition )- copy the
> driver there and unmount.
>
> Reboot VM, install paravirtual drivers and reboot againCreate this script
> inside sys-firewall (check that the sys-net vm ip address 10.137.1.1 is
> correct though):
>
> fwcfg.sh:
> #!/bin/bash
> vmip=$