[Guide] Remote Gaming on Unraid

I have set up my gaming server based on @JDM_WAAAT’s excellent guide. For the most part, it works great. However, I have a networking issue though related to 10Gb ethernet; I can connect and use my Win 10 VM over the bridged 10G connection, but for example if I download a game from Steam on the VM it completely hoses my network. I’m sure this is something to do with the weird blend of 10G/1G that I’m using. My simplified setup is this:

  • My home network has wifi5 where I can get around 150Mb/s to the external internet, and otherwise I have ethernet over power where I get around 40Mb/s. (terrible speeds I know, but I’m in rented accommodation and don’t have options to move things around or cable / re-wire).
  • I have my Unraid server which has a 1Gb LAN port connected to the EoP network, and a 10Gb LAN port connected to a 10Gb switch. The switch has a 1Gb LAN port that connects to the rest of the network via EoP.
  • I’m running a Win10 VM with the 10Gb port bridged, and connecting using Parsec. (I had previously used passthrough which gives far higher throughput, but there’s a bug that requires a manual reset when shutting the VM so I went back to bridged for stability).
  • I have my client MacOS iMac Pro which has on-board wifi5 and also a 10GB LAN port. The 10Gb LAN port is connected to the 10Gb switch.
  • All NICs are getting IPs statically assigned IPs via DHCP on the same 192.168.10.0/24 network with default gateway to my single internet router.

My problems:

  1. In order to take advantage of the 10Gb kit I have to disable the wifi on my iMac Pro (or put the priority of the 10Gb adapter lower higher than wifi). This is great for using my VM and Unraid where I enjoy >1Gb speeds. However it means all other traffic is limited by the EoP network as it is switched to the 1Gb LAN (which is effectively throttled to ~40Mb due to EoP). Ideally I want to use wifi for all other traffic except for Unraid/VM connectivity.
  2. I don’t have any issues playing games on the VM, however if I download a game via steam then the whole network gets hosed (for example round trip time of pings to 8.8.8.8 goes from <15ms to 1000s of ms).

Q: Is there any way for me to enjoy >1Gb speeds between the iMac and Unraid server, given that I have 10Gb NICs and a switch to play with, yet still use wifi on my Mac for everything else? I’m guessing I need to set up a separate network for the 10Gb crew, but not sure where to start in terms of IP address assignment, routing tables, and config on the Unraid side.

Would appreciate some help!

Hi. Do you need to install both Parsec and Rainway together on Unraid host VM? Or just select 1?

You can run both.

I originally already have gaming VM setup already. Am playing it via extended USB, extended HDMI (all via RJ45) since Unraid box is remote (less than 20M). Performance have been good. Then I tried your instructions as it only supplements what I already have at the moment. After which, I found out League of Legends isn’t supported. To complicate matters, the player :smiley: my son, complains fps dropped quite a bit. From original of 100-120 at High Settings, to 70-80 fps. 1080p, using Gigabyte GTX1080, 8 GB. I had to roll back everything. I didn’t get back the 100 fps. But it’s higher. He stopped complaining, so I stopped troubleshooting :D. Problem is, this is still using wired gaming remotely. I really wanted to have laptops to be able to play remotely within the home network. Wired. Don’t know what to do. I suspected that since I have both Parsec and Rainway installed, this caused some conflict?

I’m not sure how recently they published this but just stumbled upon this which is useful for the Win 10 May 2020 update. Perhaps consider putting it in the guide?

1 Like

This post addresses two issues I’ve had:

  1. Win10 VM no longer starting after Unraid upgrade to 6.9.0 beta 22 due to “kernel security error” and BSOD loop.
  2. GPU passthrough not working with “error 43” on beta 22 using the original method of binding devices to the VFIO driver through kernel parameters in the syslinux configuration

Thank you very much for @tin1’s post above . This actually got me up and running again after upgrading Unraid to 6.9.0 beta 22. Upgrading Unraid caused my Win 10 VM to go into a reboot loop citing “Kernel security error”. After spending many hours trying to fix it, thinking [perhaps incorrectly] that my install was permanently corrupted I gave up and decided to just do a fresh VM install. However, doing the fresh install and following this guide as I did pre-beta 99, I just could not get rid of the “error code 43” error when passing through my RTX 2080 SUPER.

To solve it, I followed @tin1’s advice. I discovered that the referenced plug-in is now part of the O/S in the Tools → System Devices page (see Unraid OS version 6.7.0-rc1 available - Prereleases - Unraid and [Plugin] VFIO-PCI Config - Plugin Support - Unraid) , where you can click to bind the device to the VFIO driver (and hence make them available to pass through). Previously I had put the device addresses as a parameter in the syslinux config section under Main → click flash disk, syslinux configuration. So I removed those. Not only did this work when the previously successful method of editing the xml did not, but I also found it considerably simpler.

Unrelated to passing through the graphics card, but to solve the kernel security problem I had to change the cpu pass through section in the XML. See Windows 10 Vm Kernel security check failure - VM Engine (KVM) - Unraid for reference. See snippet below for my xml cpu section (replacing what was there before, i.e. replace ‘host-passthrough’ with ‘host-model’, and delete the line above the existing <feature… line):

  <cpu mode='host-model' check='none'>
    <topology sockets='1' dies='1' cores='8' threads='2'/>
    <feature policy='require' name='topoext'/>
  </cpu>

Edit: Cleaned up post a little to include references.

1 Like

@DANgerous25 Wandering if your temps are showing up in the beta? Which motherboard you rocking? I have a similar build with a 3950x and GB x570 master, bit hesitant to update to the beta!

Hey @Guilty_One, yes they are (I think thanks to the Dynamix plugins) - I’m using the AsRock x570 Creator motherboard. However, if you currently are on a stable build for your setup, I’d suggest avoiding beta 22 for now until the issues are ironed out. Otherwise you might have to do a fair bit of messing about, like I did, to get your Win 10 VM(s) working - or worse re-install them like I did.

One other point worth mentioning though, and not sure if this is a fluke or exactly why this is: My 3DMark/Timespy benchmark on the previous beta was ~10000, on this beta with the various hacks to make it work it’s around ~11500. In both cases that’s with no overclocking on the CPU, and using the MSI afterburner “beta” feature that automatically determines the optimal clock settings for my RTX 2080 Super. Apart from the differences I mentioned in my previous post, I believe that I built the VMs in exactly the same way.

@DANgerous25 hey Dan i couldn’t resist i updated to 6.9 Beta22. Oh boy you weren’t wrong…

  1. Adding @tin1 lines to the XML
    and

Helped me to get to the windows but Code 43 was waiting there for me.
So to fix that i disabled the PCIe ACS override. In Tools>System devices, Bind all 4 devices from NVIDIA and the piece to tie them all

(From u/Lucavon https://www.reddit.com/r/VFIO/comments/gf53o8/upgrading_to_qemu_5_broke_my_setup_windows_bsods/?sort=qa)

But im still having problems with my PCIe sound card, windows sees it, the driver installs but no sound!? But i still have the NVIDIA HD Audio working so thats good.
I hope it helps someone, just returning the favor since @JDM_WAAAT did a great guide to get me this far. Thank you!!!

1 Like

I was given this link to fix my ongoing issues https://www.reddit.com/r/unRAID/comments/haxdyf/gpu_passthrough_not_working/

Follows this with both a SEABIOS and a OVMF version of the VM i’m making. I cannot get the OVMF to install windows, goes straight to shell. I’ve tried only 1 CPU core, i’m tried doing exit/continue, tried dong the fs0: and fs1: but none of the above works to let me install windows.

The SEASBIOS one will boot fine with VNC but not the GPU enabled.

@Remamian More info needed…Which Version you running? What does your VM log say and your SysLog? What steps you take? Did you follow the guide? Whats your XML look like?
Search Discord servers of serverbuilds and unraid if you cant find the answer here!

Hi there,

I followed @JDM_WAAAT guide - thanks for that!
Everything works fine until [9.1]

I can’t get my vm to run as soon as I changed the Graphics card to my ASUS AMD VEGA56
Until that change I can connect to the vm via VNC - no problem. VM running smooth and stable.

If I boot with my ASUS AMD VEGA56 the VM-log shows:

2020-06-24T22:00:57.829007Z qemu-system-x86_64: -device vfio-pci,host=0000:03:00.0,id=hostdev0,bus=pci.0,addr=0x6: Failed to mmap 0000:03:00.0 BAR 0. Performance may be slow

or - if I use a vbios it looks like that – only differencing in the file reference to vbios.
2020-06-24T21:48:36.718375Z qemu-system-x86_64: -device vfio-pci,host=0000:03:00.0,id=hostdev0,bus=pci.0,addr=0x6,romfile=/mnt/cache/isos/Asus.RXVega56.8192.171121.rom: Failed to mmap 0000:03:00.0 BAR 0. Performance may be slow

And than it seems to hang because the vm wont shown up in my LAN - i was running a persistant LAN-scan to see if it will appear.

Honestly I’m not sure what of the steps in section 8.0 I need to do, because of the following things

  1. Guide says, GPU-VBIOS not necessary for AMD cards - and I got one!
  2. I downloaded all VBIOS from the page for my ASUS ROG STRIX (VEGA 56) but NONE of those got a text field “vga compatible”
  3. Due to 2) I’m not able to edit the vbios.rom even if I need to use a vbios. :see_no_evil:
  4. I also tried it with unedited vbios.roms - same results

Hopefully someone has an idea or a hint for me. I don’t get it!
Thanks in advance and have a nice day.–

I also attached a linkt to my tries for more details.
DOWNLOAD-LINK

:slight_smile: At least it is fun trying to work through the problems, no?

I’m not sure what to suggest about your sound card. I’m also using Nvidia HD audio and didn’t even try to get the sound card working, but that’s fine for me.

Out of interest, did you see a performance gain like I did?

Update to my first post HERE
I get rid of the mmap error using those commands

echo 0 > /sys/class/vtconsole/vtcon0/bind
echo 0 > /sys/class/vtconsole/vtcon1/bind
echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind

but the VM doesnt shown up in my LAN as soon as I changed the GPU/soundcard to my VEGA :frowning:

Any ideas?

Is it possible that the HDMI dummy is defective and that can cause “a hang” so that Windows dont get a valid IP? Is there any way to check/verify that the hdmi dummy working correctly?

I’m not even sure if the VM boots correctly and gets no IP-address or if the VM crashes at the boot. There are no errors/warnings in the vm-log (see below)

2020-06-25 17:41:52.030+0000: starting up libvirt version: 5.10.0, qemu version: 4.2.0, kernel: 4.19.107-Unraid, hostname: v1ew-s0urce
LC_ALL=C \
PATH=/bin:/sbin:/usr/bin:/usr/sbin \
HOME=/var/lib/libvirt/qemu/domain-5-1337-Machine \
XDG_DATA_HOME=/var/lib/libvirt/qemu/domain-5-1337-Machine/.local/share \
XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain-5-1337-Machine/.cache \
XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain-5-1337-Machine/.config \
QEMU_AUDIO_DRV=none \
/usr/local/sbin/qemu \
-name guest=1337-Machine,debug-threads=on \
-S \
-object secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain-5-1337-Machine/master-key.aes \
-blockdev '{"driver":"file","filename":"/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi.fd","node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unmap"}' \
-blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver":"raw","file":"libvirt-pflash0-storage"}' \
-blockdev '{"driver":"file","filename":"/etc/libvirt/qemu/nvram/a302cf39-f5ea-18bd-c9a1-3d4b4993bea1_VARS-pure-efi.fd","node-name":"libvirt-pflash1-storage","auto-read-only":true,"discard":"unmap"}' \
-blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver":"raw","file":"libvirt-pflash1-storage"}' \
-machine pc-i440fx-4.2,accel=kvm,usb=off,dump-guest-core=off,mem-merge=off,pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-format \
-cpu host,host-cache-info=on,l3-cache=off \
-m 16384 \
-overcommit mem-lock=off \
-smp 4,sockets=1,cores=2,threads=2 \
-uuid a302cf39-f5ea-18bd-c9a1-3d4b4993bea1 \
-display none \
-no-user-config \
-nodefaults \
-chardev socket,id=charmonitor,fd=34,server,nowait \
-mon chardev=charmonitor,id=monitor,mode=control \
-rtc base=localtime,driftfix=slew \
-global kvm-pit.lost_tick_policy=delay \
-no-hpet \
-no-shutdown \
-boot strict=on \
-device qemu-xhci,p2=15,p3=15,id=usb,bus=pci.0,addr=0x7 \
-device ahci,id=sata0,bus=pci.0,addr=0x5 \
-device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x4 \
-blockdev '{"driver":"host_device","filename":"/dev/nvme0n1","node-name":"libvirt-2-storage","cache":{"direct":false,"no-flush":false},"auto-read-only":true,"discard":"unmap"}' \
-blockdev '{"node-name":"libvirt-2-format","read-only":false,"cache":{"direct":false,"no-flush":false},"driver":"raw","file":"libvirt-2-storage"}' \
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x3,drive=libvirt-2-format,id=virtio-disk2,bootindex=1,write-cache=on \
-blockdev '{"driver":"file","filename":"/mnt/user/isos/virtio-win-0.1.173-2.iso","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
-blockdev '{"node-name":"libvirt-1-format","read-only":true,"driver":"raw","file":"libvirt-1-storage"}' \
-device ide-cd,bus=sata0.1,drive=libvirt-1-format,id=sata0-0-1 \
-netdev tap,fd=36,id=hostnet0,vhost=on,vhostfd=37 \
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:71:0a:72,bus=pci.0,addr=0x2 \
-chardev pty,id=charserial0 \
-device isa-serial,chardev=charserial0,id=serial0 \
-chardev socket,id=charchannel0,fd=38,server,nowait \
-device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.qemu.guest_agent.0 \
-device usb-tablet,id=input0,bus=usb.0,port=1 \
-device vfio-pci,host=0000:03:00.0,id=hostdev0,bus=pci.0,multifunction=on,addr=0x6,romfile=/mnt/user/isos/Asus.RXVega56.8192.171120.rom \
-device vfio-pci,host=0000:03:00.1,id=hostdev1,bus=pci.0,addr=0x6.0x1 \
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
-msg timestamp=on
2020-06-25 17:41:52.030+0000: Domain id=5 is tainted: high-privileges
2020-06-25 17:41:52.030+0000: Domain id=5 is tainted: host-cpu
char device redirected to /dev/pts/0 (label charserial0)

Fantastic guide! Running great for me. However I don’t have the H.265 host setting in parsec. I have it under client, but not host. Does that mean my gpu doesn’t support it? I’m using a GTX 1060 3GB.

The 1060 3GB supports it. I believe they have removed the option from the host, meaning you only need to select it on the client now.

1 Like

YES it is actually!!! :smiley: The end result speaks for itself!

Yes a slight bump for me too!!!

1 Like

Does anybody use a 21:9 display on client site - and with an AMD card?
Is there any way to add a 21:9 resolution? I searched within “AMD Radeon Software” but couldn’t find anything…

probably need to figure out how to get it to output to a custom resolution

I get it managed to set a custom output via Radeon Software.
Sadly it’s not able to run 3440x1440 at 60 Hz. It’s just possible to run at 30 Hz.
Not sure why, because my LG definitely runs at 60Hz.

But it’s not a tragic.
I have changed to 2560x1440 and even with this my host seems not to be able to stream in an acceptable quality at this resolution.
I got a lot of artifacts when scrolling in/out at gaming.
Very worse - so I think I cancel my wish of a higher resolution with my current hardware.

1080p seems to be fine, but I need to made some fine tuning.

But maybe someone can help me, whats bringing more power to my rig? Only with focus of “game streaming” in my LAN. (no remote gaming via WAN)
A new CPU/Board or a new GPU. Ok - honestly both would be perfect, but sadly my budget is not able to cover both at the same time.

My current CPU: i7 6700 (non-k)
My current board: ASUS Hero VIII
My current GPU: ASUS Rog Strix Vega 56 OC

Maybe a change to a Ryzen would be better (cost efficiency)? Or just upgrading CPU/GPU?

For information:
My client is a MacMini 2018 6-core i7 @ 3,2GHz - wired connection (1GbE)

Thanks for any tips/hints