January 7, 20215 yr Yep, another GPU passthrough post. First, here are my specs: ASUS ROG b550-f Motherboard Ryzen 3 3900XT 2x 16GB@3600mhz memory 2x NVIDIA GTX 680 1TB M.2 SSD Using Unraid 6.9 rc2. What we're trying to do: Set up 2 Windows 10 VMs, each with access to just under half of the RAM, CPU, and SSD, and 1 GPU each Our problems: We're having a couple of problems with this. The first is that one of the PCIe x16 ports on the b550-f is in an IOMMU group with the ethernet and USB controllers. I've read about ACS Override which can apparently override these groups, albeit with some risks, but I'm struggling to find any info on how to actually do this, so any pointers on this would be greatly appreciated. The other problem we're having is that, as far as I can tell, the BIOS is taking control of the other GPU on boot, preventing the VM from being able to use it. I was told that disabling UEFI mode (enabling legacy mode) in Unraid would prevent it doing this, however when I went to make this change UEFI mode was already disabled. I also added the following to the syslinux.cfg on boot as I found a few sources suggesting this would prevent linux from taking the GPU: vfio-pci.ids=10de:128b,10de:0e0f pcie_aspm=off iommu=pt video=efifb:off The 3900XT doesn't have an iGPU, and installing a 3rd GPU is doable, but is going to require buying extra hardware, which I'd like to avoid if possible, so I'm looking for a way to allow the VM to use the GPU without introducing an extra one for the host. I've attached my diagnostics zip file, here is the XML for the main VM we've been using for testing. <?xml version='1.0' encoding='UTF-8'?> <domain type='kvm' id='2'> <name>Kaho</name> <uuid>02d9bd8f-1cbd-f5a5-1989-668eb8712bca</uuid> <metadata> <vmtemplate xmlns="unraid" name="Windows 10" icon="windows.png" os="windows10"/> </metadata> <memory unit='KiB'>14680064</memory> <currentMemory unit='KiB'>14680064</currentMemory> <memoryBacking> <nosharepages/> </memoryBacking> <vcpu placement='static'>12</vcpu> <cputune> <vcpupin vcpu='0' cpuset='1'/> <vcpupin vcpu='1' cpuset='13'/> <vcpupin vcpu='2' cpuset='2'/> <vcpupin vcpu='3' cpuset='14'/> <vcpupin vcpu='4' cpuset='3'/> <vcpupin vcpu='5' cpuset='15'/> <vcpupin vcpu='6' cpuset='4'/> <vcpupin vcpu='7' cpuset='16'/> <vcpupin vcpu='8' cpuset='5'/> <vcpupin vcpu='9' cpuset='17'/> <vcpupin vcpu='10' cpuset='6'/> <vcpupin vcpu='11' cpuset='18'/> </cputune> <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64' machine='pc-i440fx-5.1'>hvm</type> <loader readonly='yes' type='pflash'>/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi.fd</loader> <nvram>/etc/libvirt/qemu/nvram/02d9bd8f-1cbd-f5a5-1989-668eb8712bca_VARS-pure-efi.fd</nvram> </os> <features> <acpi/> <apic/> <hyperv> <relaxed state='on'/> <vapic state='on'/> <spinlocks state='on' retries='8191'/> <vendor_id state='on' value='none'/> </hyperv> </features> <cpu mode='host-passthrough' check='none' migratable='on'> <topology sockets='1' dies='1' cores='6' threads='2'/> <cache mode='passthrough'/> <feature policy='require' name='topoext'/> </cpu> <clock offset='localtime'> <timer name='hypervclock' present='yes'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/local/sbin/qemu</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='writeback'/> <source file='/mnt/user/domains/Dylan/vdisk1.img' index='3'/> <backingStore/> <target dev='hdc' bus='virtio'/> <boot order='1'/> <alias name='virtio-disk2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/mnt/user/isos/en_windows_10_consumer_edition_version_1809_updated_sept_2018_x64_dvd_491ea967.iso' index='2'/> <backingStore/> <target dev='hda' bus='ide'/> <readonly/> <boot order='2'/> <alias name='ide0-0-0'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/mnt/user/isos/virtio-win-0.1.190-1.iso' index='1'/> <backingStore/> <target dev='hdb' bus='ide'/> <readonly/> <alias name='ide0-0-1'/> <address type='drive' controller='0' bus='0' target='0' unit='1'/> </disk> <controller type='usb' index='0' model='qemu-xhci' ports='15'> <alias name='usb'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </controller> <controller type='pci' index='0' model='pci-root'> <alias name='pci.0'/> </controller> <controller type='ide' index='0'> <alias name='ide'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <controller type='virtio-serial' index='0'> <alias name='virtio-serial0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </controller> <interface type='bridge'> <mac address='52:54:00:c5:11:24'/> <source bridge='virbr0'/> <target dev='vnet0'/> <model type='virtio-net'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </interface> <serial type='pty'> <source path='/dev/pts/0'/> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> <alias name='serial0'/> </serial> <console type='pty' tty='/dev/pts/0'> <source path='/dev/pts/0'/> <target type='serial' port='0'/> <alias name='serial0'/> </console> <channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-2-Dylan/org.qemu.guest_agent.0'/> <target type='virtio' name='org.qemu.guest_agent.0' state='connected'/> <alias name='channel0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <input type='tablet' bus='usb'> <alias name='input0'/> <address type='usb' bus='0' port='1'/> </input> <input type='mouse' bus='ps2'> <alias name='input1'/> </input> <input type='keyboard' bus='ps2'> <alias name='input2'/> </input> <hostdev mode='subsystem' type='pci' managed='yes'> <driver name='vfio'/> <source> <address domain='0x0000' bus='0x07' slot='0x00' function='0x0'/> </source> <alias name='hostdev0'/> <rom file='/mnt/user/isos/vbios/Asus.GTX680.2048.130118.rom'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/> </hostdev> <hostdev mode='subsystem' type='pci' managed='yes'> <driver name='vfio'/> <source> <address domain='0x0000' bus='0x07' slot='0x00' function='0x1'/> </source> <alias name='hostdev1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/> </hostdev> <memballoon model='none'/> </devices> <seclabel type='dynamic' model='dac' relabel='yes'> <label>+0:+100</label> <imagelabel>+0:+100</imagelabel> </seclabel> </domain> I originally got the vBIOS for the GPU using SpaceInvaderOne's vBIOS dump script (found here). However the resulting file is only 65kb and given the vBIOS roms for the same card were twice that size on techpowerup, I concluded that the vBIOS dump failed, and opted to use one downloaded from there instead. Any help would be greatly appreciated. tower-diagnostics-20210106-1954.zip
Archived
This topic is now archived and is closed to further replies.