Jump to content

Gaming : not what I expected [ 5700 XT & 1950X ]


dboris

Recommended Posts

Hello,

 

I would like to share a feedback on gaming experience on unraid 16.8.1.

It has been source of disapointements and frustration, mainly because it took me days to realise that all the bugs I had weren't due to hardware or user misconfiguration.

I would like other user to give me feedback to know if I'm an isolated case. Possibly we could try to sort this out.

This page was letting me think I wouldn't encounter such problems, if pro gamers can afford to play with Unraid :

https://unraid.net/product/hardcore-gamers 

 

On games that require no much power (rocket league, sea of thieves), I get a perfect experience.
However on other games, I encoutered several problems. I tried both a VDISK and a seperate dual boot SSD.
Therefore I can affirm that those problems are non-existent on the bare metal machine with the exact same config.
I will update the list as I will be probably testing other games when the time allow it.
I play on a 4K monitor that also runs 1080p 120fps.

In both cases the games are stored in an external SATA ssd. I also tried to store them on the array.
I use a RX 5700 XT Nitro + and a Threadripper 1950X.

 

Sea of thieves : OK

Rocket league : OK

CS GO : OK

Call of duty : stuttering every 10 to 5s. Makes the game unplayable, possibly

Battlefield V : increased input lag, like if there was V-Sync X10. Bad experience.

 

 

 

Edited by dboris
Link to comment

Thanks for taking a look.

 

<?xml version='1.0' encoding='UTF-8'?>
<domain type='kvm' id='1'>
  <name>Windows 10 RX</name>
  <uuid>72a26e7c-67ae-b26e-4c0f-035382dc2917</uuid>
  <metadata>
    <vmtemplate xmlns="unraid" name="Windows 10" icon="windows.png" os="windows10"/>
  </metadata>
  <memory unit='KiB'>33030144</memory>
  <currentMemory unit='KiB'>33030144</currentMemory>
  <memoryBacking>
    <nosharepages/>
  </memoryBacking>
  <vcpu placement='static'>24</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='4'/>
    <vcpupin vcpu='1' cpuset='20'/>
    <vcpupin vcpu='2' cpuset='5'/>
    <vcpupin vcpu='3' cpuset='21'/>
    <vcpupin vcpu='4' cpuset='6'/>
    <vcpupin vcpu='5' cpuset='22'/>
    <vcpupin vcpu='6' cpuset='7'/>
    <vcpupin vcpu='7' cpuset='23'/>
    <vcpupin vcpu='8' cpuset='8'/>
    <vcpupin vcpu='9' cpuset='24'/>
    <vcpupin vcpu='10' cpuset='9'/>
    <vcpupin vcpu='11' cpuset='25'/>
    <vcpupin vcpu='12' cpuset='10'/>
    <vcpupin vcpu='13' cpuset='26'/>
    <vcpupin vcpu='14' cpuset='11'/>
    <vcpupin vcpu='15' cpuset='27'/>
    <vcpupin vcpu='16' cpuset='12'/>
    <vcpupin vcpu='17' cpuset='28'/>
    <vcpupin vcpu='18' cpuset='13'/>
    <vcpupin vcpu='19' cpuset='29'/>
    <vcpupin vcpu='20' cpuset='14'/>
    <vcpupin vcpu='21' cpuset='30'/>
    <vcpupin vcpu='22' cpuset='15'/>
    <vcpupin vcpu='23' cpuset='31'/>
  </cputune>
  <resource>
    <partition>/machine</partition>
  </resource>
  <os>
    <type arch='x86_64' machine='pc-q35-4.1'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
    <nvram>/etc/libvirt/qemu/nvram/72a26e7c-67ae-b26e-4c0f-035382dc2917_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'>
    <topology sockets='1' cores='24' threads='1'/>
  </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='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/isos/Win10_1909_French_x64.iso' index='3'/>
      <backingStore/>
      <target dev='hda' bus='sata'/>
      <readonly/>
      <boot order='2'/>
      <alias name='sata0-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.160-1.iso' index='2'/>
      <backingStore/>
      <target dev='hdb' bus='sata'/>
      <readonly/>
      <alias name='sata0-0-1'/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw' cache='writeback'/>
      <source dev='/dev/disk/by-id/ata-Samsung_SSD_860_PRO_256GB_S42VNGAK201957T' index='1'/>
      <backingStore/>
      <target dev='hdc' bus='sata'/>
      <boot order='1'/>
      <alias name='sata0-0-2'/>
      <address type='drive' controller='0' bus='0' target='0' unit='2'/>
    </disk>
    <controller type='pci' index='0' model='pcie-root'>
      <alias name='pcie.0'/>
    </controller>
    <controller type='pci' index='1' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='1' port='0x8'/>
      <alias name='pci.1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
    </controller>
    <controller type='pci' index='2' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='2' port='0x9'/>
      <alias name='pci.2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='pci' index='3' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='3' port='0xa'/>
      <alias name='pci.3'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='pci' index='4' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='4' port='0xb'/>
      <alias name='pci.4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/>
    </controller>
    <controller type='pci' index='5' model='pcie-to-pci-bridge'>
      <model name='pcie-pci-bridge'/>
      <alias name='pci.5'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </controller>
    <controller type='pci' index='6' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='6' port='0xc'/>
      <alias name='pci.6'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/>
    </controller>
    <controller type='pci' index='7' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='7' port='0xd'/>
      <alias name='pci.7'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x5'/>
    </controller>
    <controller type='pci' index='8' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='8' port='0xe'/>
      <alias name='pci.8'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x6'/>
    </controller>
    <controller type='pci' index='9' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='9' port='0xf'/>
      <alias name='pci.9'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x7'/>
    </controller>
    <controller type='pci' index='10' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='10' port='0x10'/>
      <alias name='pci.10'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <alias name='virtio-serial0'/>
      <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
    </controller>
    <controller type='sata' index='0'>
      <alias name='ide'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='usb' index='0' model='nec-xhci' ports='15'>
      <alias name='usb'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:39:23:4b'/>
      <source bridge='br0'/>
      <target dev='vnet0'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x00' 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-1-Windows 10 RX/org.qemu.guest_agent.0'/>
      <target type='virtio' name='org.qemu.guest_agent.0' state='disconnected'/>
      <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='3'/>
    </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='0x0c' slot='0x00' function='0x0'/>
      </source>
      <alias name='hostdev0'/>
      <rom file='/mnt/user/domains/vbios/Sapphire.RX5700XT.8192.190905.rom'/>
      <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='0x0c' slot='0x00' function='0x1'/>
      </source>
      <alias name='hostdev1'/>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x1'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x0e' slot='0x00' function='0x3'/>
      </source>
      <alias name='hostdev2'/>
      <address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
      </source>
      <alias name='hostdev3'/>
      <address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x08' slot='0x00' function='0x0'/>
      </source>
      <alias name='hostdev4'/>
      <address type='pci' domain='0x0000' bus='0x09' slot='0x00' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='no'>
      <source>
        <vendor id='0x0b05'/>
        <product id='0x185c'/>
        <address bus='1' device='2'/>
      </source>
      <alias name='hostdev5'/>
      <address type='usb' bus='0' port='1'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='no'>
      <source>
        <vendor id='0x0b05'/>
        <product id='0x1867'/>
        <address bus='1' device='3'/>
      </source>
      <alias name='hostdev6'/>
      <address type='usb' bus='0' port='2'/>
    </hostdev>
    <memballoon model='none'/>
  </devices>
  <seclabel type='dynamic' model='dac' relabel='yes'>
    <label>+0:+100</label>
    <imagelabel>+0:+100</imagelabel>
  </seclabel>
</domain>

 

Edited by dboris
Link to comment
6 hours ago, dboris said:

I use a RX 5700 XT Nitro + and a Threadripper 1950X.

This is 100% the source of your issues.  Unfortunately AMD-based systems just have a really hard time providing solid performance compared to Intel / NVIDIA when it comes to virtualization / GPU pass through and gaming.  We too tested a 1950x in our labs, even with an NVIDIA GPU and suffered similar issues to those you describe in games like PUBG.  Stuttering being the #1 complaint.  Our belief is that due to the architecture of Threadripper, there may be some challenges in ensuring the right physical memory is being allocated for the right PCI device / NUMA nodes.  It's a very long and complicated thing to explain, but I'll leave you with this:  we had to abandon any hope for making Threadripper work for gaming setups and VMs.  And we're not the only ones:

 

I highly recommend giving that article a read, as it is pretty darn informative of all the challenges with Threadripper, GPU pass through, and gaming performance.  That said, there is some hope that the even newer models may have rectified some of these issues.  I'm basing that PURELY on some feedback from a buddy at a recent LAN event we had, but he's fairly technical and I'm hopeful that at some point in the near future we'll get a chance to test that theory ourselves.

 

For now, I hate to say it but you'll have to either accept the performance you're getting or try switching to an Intel / NVIDIA platform to get better results.

 

Link to comment

Oh damn. Thanks for the info. I now know the culprit. I'll take a look.

I wanted to use unraid on my main system as a daily video editing / gaming machine.

Hard to perceive any problems with video editing of course.

Threadripper seemed pretty common due to the high core count / low cost.

I wished I saw that before going for the pro.

 

Edited by dboris
Link to comment

Reading the post instead of the TL;DR: it sounds like the potential mitigations are:

  • Use 2nd-gen TR
  • Allocate RAM and core of the numa node (and a single numa node) that is connected to the GPU
  • Direct pass through of NVMe drive (i.e. PCIe method) to avoid IOThread bottleneck
  • Otherwise, pin emulator and IOThread to the same numa node as RAM and GPU

So I would suggest starting with the 2nd and 4th bullet points and see if it improves things.

 

Link to comment

I would like to add a few bits.
Before posting I had the VM running on cache NVME raid 0 array.

To be able to test/compare, I transfered the VM to a SATA disk to be able to boot bare metal.
I still observed the SAME problems.

Then I posted.

However I forgot that by changing the vdisk path, I also changed the PCI-E configuration.

I fixed that when I saw it when posting my XML.

So I fixed the GPU's audio again and moved it from random slot to same slot as function 1.

I also installed all games on an external SSD so that it is both detected as a hard drive.

I will passthrough the SSD later on to able to plug it with SATA.

 

I also enabled AMD anti-lag. It seems that it helped after fixing the GPU's audio.

Before it wasn't making any difference.


I saw BIG improvements :

BF5 much less lags, seems that the huge latency I had went away. 
However BF5 isn't as smooth as other shooter even on bare metal, visible at 120fps, hard to tell if any lag from VFIO remains.

COD MW : I now have only random 4s freeze every 10mn, instead of little stutter every 5-10s.

I don't have such problems when bare metal.

I can live with that.

So it's not as bad as VFIO dev seemed to say.
I'm MUCH MORE happy with Unraid now.

I did a second post where I have problems with my parity drive, hopping it's not related.


 

To my eyes the 5700XT is therefore OK-ish for passthrough.
Looking up to Macinabox with Navi compatibility.
Regarding the reset bug, I couldn't get my system to reboot properly with the reset-bug script FIX.

 

I'll update the title of the topic hopping it will be found by users with 5700 XT.

Sincerely,

 

 

EDIT : After a few reboots I'm back with the same problems while it was nearly flawless for a few days.
EDIT II : I am now rocking a RTX3080, no more issues. Bye bye AMD. I also checked for a propper 1950x configuration, as documented on the forum.
Wouldn't recommend AMD for gaming with unraid in any cases.

Edited by dboris
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...