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
> 0000:03:00.0
> 0000:03:00.1
> Create disk images:
> 
> # dd if=/dev/zero of=win8.img bs=1M count=30000
> # dd if=/dev/zero of=win8-user.img bs=1M count=30000
> 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=$1
> 
>     iptables -A FORWARD -s $vmip -p udp -d 10.137.1.1   --dport 53 -j ACCEPT
>     iptables -A FORWARD -s $vmip -p udp -d 10.137.1.254 --dport 53 -j ACCEPT
>     iptables -A FORWARD -s $vmip -p icmp -j ACCEPT
>     iptables -A FORWARD -s $vmip -p tcp -d 10.137.255.254 --dport 8082 -j DROP
>     iptables -A FORWARD -s $vmip -j ACCEPT
> Then setup the iptables rules:
> 
> 
> # sudo ./fwcfg.sh 10.137.2.50   # substitute with the win8.1 VM ip address
> Note that this has to do be done manually EVERY TIME the vm is (re)started, 
> because a new virtual interface is created and the old one is scrapped. If 
> someone knows how to automate this, I'm all ears :)
> 
> Configure VM networkingInside Windows, manually setup IP, netmask and GW in 
> VM (10.137.2.50, 255.255.255.0, 10.137.2.1) as well as DNS (10.137.1.1) for 
> the 'Xen Net' interface.
> If routing does not work properly at this point, try disabling the other 
> (Realtek) network interface in Windows.
> 
> Uncomment the devices-to-be-passed list ( PCI = [ ... ] ) in win8.hvmDownload 
> the GPU drivers (ATI Catalyst 15.7.1 for Win 8.1 worked for me for Radeon 
> 6950)Launch the installer but close it after it has unzipped drivers to 
> C:\ATIInstall the driver manually via Device Manager ( Update driver -> 
> Browse )Cross  your fingers and hope for the best!
> Enjoy a beer :)
>  ---------
> 
> If these instructions don't work for you, you could try following things:
> Enable permissive mode for PCI device (see link 
> above)iommu=workaround_bios_bug  boot optionenable/disable options in .hvm 
> file: viridian, pae, hpet, acpi, apic, cpi_msitranslate, pci_power_mgmt, 
> xen_platform_pci
> If you still don't get passthrough working, make sure that it is even 
> possible with you current hardware. Most of the modern (<3 years old) working 
> GPU PT installations seem to using KVM (I got even my grumpy NVidia GTX 980 
> functional!), so you should at least try creating bare-metal Arch Linux 
> installion and then following instructions here: 
> https://bufferoverflow.io/gpu-passthrough/
> or Arch wiki entry here: 
> https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF
> or a series of tutorials here: 
> http://vfio.blogspot.se/2015/05/vfio-gpu-how-to-series-part-1-hardware.html
> 
> Most of the instructions are KVM specific, but there's lot of great 
> non-hypervisor specific information there as well, especially in the latter 
> blog. Note that all the info about VFIO and IOMMU groups can be misleading 
> since they are KVM specific functionality and not part of Xen (don't ask me 
> how much time I spent time figuring out why I can't seem to find IOMMU group 
> entries in /sys/bus/pci/ under Qubes...)
> 
> One thing about FLReset (Function Level Reset): There's quite general 
> misconception about FLR being a requirement in order to do GPU passthrough, 
> but this isn't true. As a matter of fact, not even the NVidia Quadros have 
> FLR+ in PCI DevCaps, and not many non-GPU PCI devices do either. So even 
> though the how-to here (http://wiki.xen.org/wiki/VTd_HowTo) states otherwise, 
> the missing FLR capability will not necessarily mean that device can't be 
> used in VM, but could only make it harder to survive DomU boot. I've seen in 
> my tests that both Win 7 and Win8 VMs can be in fact booted several times 
> without a requirement to boot Dom0 (but hopping BETWEEN the two Windows 
> versions will result in either BSOD or Code 43). But again, this may wary a 
> lot with GPU models and driver versions. But anyway, if you see this message 
> during VM startup:
> 
> 
> lbxl: error: ....  The kernel doesn't support reset from sysfs for PCI device 
> ...... you can safely ignore it
> 
> Happy hacking!
> 
> Best regards,
> Marcus

Hello,

     I am fairly new to qubes, and have been trying to get pci pass-through to 
work with my system. Your instructions are very good for getting the idealogy 
understood, but I dont quiet know where to copy the .hvm file in order for it 
to work. I also dont know how to invoke it once it is in it's special place. 
Can I please have some guidance on that part?

Thanks,
Emex

-- 
You received this message because you are subscribed to the Google Groups 
"qubes-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to qubes-users+unsubscr...@googlegroups.com.
To post to this group, send email to qubes-users@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/qubes-users/337427f8-6f23-43db-8dbb-23b32129f9cb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to