Jump to content

GPU Passthrough - looks like it's working, but, it's not


Recommended Posts

Running 6.9.2 -- AMD Ryzen 5900X, 128GB RAM, RX580, many drives.

 

The VM concept is a new one for me, but, I'm excited to see what I can do with it. 

 

I've created a new Win 10 Pro VM (XML below). Nutshell, 4 CPUs and the HT cores, 16GB Ram, Q35-5.1, OVMF

 

I started by using the VNC graphics card - everything worked fine (changed the resolution in RDC app to support fullscreen 3440x1440) and installed Adrenaline 22.4.2 . I've enabled passthrough of the RX 580 (and edited the XML to have the audio use the same bus (different function). Everything seems to be working fine, except I'm getting an error in Passmark when I try to run the 3D Mark test. The PassMark DirectX Testing Suite modal box says:: Invalid video mode. The resolution and color depth you have selected do not appear to be valid for hardware acceleration. {more of same} Error code D3DERR_INVALIDCALL.

 

It looks like it's working fine in the VM -- but, this error gives me pause. 

 

Thanks in advance.

 

-----

<?xml version='1.0' encoding='UTF-8'?>

<domain type='kvm'>

<name>Windows 10</name>

<uuid>ff717c28-cd8c-2b7f-c50c-ae2da2a2906a</uuid>

<description>UnraidWindows</description>

<metadata>

<vmtemplate xmlns="unraid" name="Windows 10" icon="windows.png" os="windows10"/>

</metadata>

<memory unit='KiB'>16777216</memory>

<currentMemory unit='KiB'>16777216</currentMemory>

<memoryBacking>

<nosharepages/>

</memoryBacking>

<vcpu placement='static'>8</vcpu>

<cputune>

<vcpupin vcpu='0' cpuset='5'/>

<vcpupin vcpu='1' cpuset='17'/>

<vcpupin vcpu='2' cpuset='7'/>

<vcpupin vcpu='3' cpuset='19'/>

<vcpupin vcpu='4' cpuset='9'/>

<vcpupin vcpu='5' cpuset='21'/>

<vcpupin vcpu='6' cpuset='11'/>

<vcpupin vcpu='7' cpuset='23'/>

</cputune>

<os>

<type arch='x86_64' machine='pc-q35-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/ff717c28-cd8c-2b7f-c50c-ae2da2a2906a_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='4' 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/Windows 10/vdisk1.img'/>

<target dev='hdc' bus='virtio'/>

<boot order='1'/>

<address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>

</disk>

<disk type='file' device='cdrom'>

<driver name='qemu' type='raw'/>

<source file='/mnt/user/isos/Windows/Windows 10 x64.iso'/>

<target dev='hda' bus='sata'/>

<readonly/>

<boot order='2'/>

<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.217.iso'/>

<target dev='hdb' bus='sata'/>

<readonly/>

<address type='drive' controller='0' bus='0' target='0' unit='1'/>

</disk>

<controller type='sata' index='0'>

<address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>

</controller>

<controller type='pci' index='0' model='pcie-root'/>

<controller type='pci' index='1' model='pcie-root-port'>

<model name='pcie-root-port'/>

<target chassis='1' port='0x10'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>

</controller>

<controller type='pci' index='2' model='pcie-root-port'>

<model name='pcie-root-port'/>

<target chassis='2' port='0x11'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>

</controller>

<controller type='pci' index='3' model='pcie-root-port'>

<model name='pcie-root-port'/>

<target chassis='3' port='0x12'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>

</controller>

<controller type='pci' index='4' model='pcie-root-port'>

<model name='pcie-root-port'/>

<target chassis='4' port='0x13'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>

</controller>

<controller type='pci' index='5' model='pcie-root-port'>

<model name='pcie-root-port'/>

<target chassis='5' port='0x14'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>

</controller>

<controller type='virtio-serial' index='0'>

<address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>

</controller>

<controller type='usb' index='0' model='ich9-ehci1'>

<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x7'/>

</controller>

<controller type='usb' index='0' model='ich9-uhci1'>

<master startport='0'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0' multifunction='on'/>

</controller>

<controller type='usb' index='0' model='ich9-uhci2'>

<master startport='2'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x1'/>

</controller>

<controller type='usb' index='0' model='ich9-uhci3'>

<master startport='4'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x2'/>

</controller>

<interface type='bridge'>

<mac address='52:54:00:1c:bf:c9'/>

<source bridge='br0'/>

<model type='virtio-net'/>

<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>

</interface>

<serial type='pty'>

<target type='isa-serial' port='0'>

<model name='isa-serial'/>

</target>

</serial>

<console type='pty'>

<target type='serial' port='0'/>

</console>

<channel type='unix'>

<target type='virtio' name='org.qemu.guest_agent.0'/>

<address type='virtio-serial' controller='0' bus='0' port='1'/>

</channel>

<input type='tablet' bus='usb'>

<address type='usb' bus='0' port='1'/>

</input>

<input type='mouse' bus='ps2'/>

<input type='keyboard' bus='ps2'/>

<hostdev mode='subsystem' type='pci' managed='yes'>

<driver name='vfio'/>

<source>

<address domain='0x0000' bus='0x2b' slot='0x00' function='0x0'/>

</source>

<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0' multifunction='on'/>

</hostdev>

<hostdev mode='subsystem' type='pci' managed='yes'>

<driver name='vfio'/>

<source>

<address domain='0x0000' bus='0x2b' slot='0x00' function='0x1'/>

</source>

<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x1'/>

</hostdev>

<memballoon model='none'/>

</devices>

</domain>

 

Edited by Nomad32
Link to comment

I think that rdp breaks Direct3d, I'm quite sure that if you run the test directly (without remote desktop) it will pass (maybe you also need to disable remote desktop at all).

If this is the case, nothing to worry about, passmark is running the test on the virtual adapter of rdp instead of the actual gpu.

Edited by ghost82
Link to comment

 

 

How will I use RDC to play games that run on the desktop of the virtual machine, if remote desktop breaks Direct3d? I tried killing the RDP connection, while running the test, and it errored out at the same point in the test. 

 

Sorry if this is coming across as stupid - but, I'm bummed that I can't sort this in my head?

Link to comment

Sorry if I wasn't clear, I mean that this should be an issue with the passmark software and the way remote desktop works.

You will not have issue in playing games via rdp if the video accelaration runs on the gpu.

 

For the test, I meant to attach a monitor to the gpu, delete any video virtual adapter created by remote desktop and run the benchmark in this way if you want to be 100% sure that the issue is caused by rdp/passmark.

Edited by ghost82
Link to comment

I edited the registry to change the setting stated. No change on the test (after a restart). 

 

Basically - you're saying that the graphics card should work for most things, but that the test is flawed? 

 

I'll go ahead and install a game in the VM and use the monitoring tools to see if it can prove it's working correctly.

Link to comment

Perfect! Thank you! I was able to install Witcher 3 and play it for 30 seconds. The only video card in the VM is the AMD from the machine pass through (not one embedded in the processor) - so, I can confirm that it looks/plays pretty well. I was getting grainy images in remote desktop, so, I installed Parsec and so far, so good. I'll continue playing - but, thank you for talking me off the edge.

Link to comment

Great!Yes the test completes successfull because parsec is different than remote desktop; remote desktop is a protocol. I'm quite sure that the test will complete also with vnc server/client.

With remote desktop video accelaration runs on gpu and the video is rendered by the rdp driver, then the "rendered images of the desktop" are transmitted to the rdp client.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...