Steam In Home Streaming from a Windows VM On a Fedora Host

So this is an idea I have been kicking around for a while now. I finally have a capable home server to do it on, so I am starting to make plans to actually implement my idea. This may initially only be a dumping ground for my (probably mostly half baked) ideas, but I will update it as I make progress.

I have a fairly powerful home server now. Dual Xeon E5-2670, 64GB RAM, SSD for boot, 2TB ZFS pool for VM storage, 16TB ZFS pool for file server. The only things I need are a decent video card (RX 480 probably) and a dedicated NIC or two for VMs. I was thinking about getting some SSDs for a really fast ZFS pool for VM storage, but I have mostly talked myself out of that (more on that in a bit).

So I have been gaming in a Windows VM for the better part of a year now on my main desktop, an i7-6700k with 32GB RAM. It is using a hardware-passthrough of a GTX 970, and the host OS is Fedora 23. It has, for the most part, been damn near flawless. I can play games at near native performance.

But I want to do this on my server. It has more horsepower, and is always on. Only problem is it would have to use Steam In Home Steaming. I tried using this a couple years ago, and was left with a bitter taste in my mouth. It just didn't feel right, it had this strange lag that I didn't like. I tested it with my old desktop (a Phenom II X4 955BE with a GTX 560Ti) and a laptop hard wired gigabit.

And so this is the heart of my problem: Is the delay or lag still present? I was going to do a test run between my current Windows VM (Win10 and the 970) and my HTPC, an i3-6100 and Win7. I'll try to do this test this week.

Surely the network isn't a bottleneck, right? Everything is gigabit, and the HTPC is wireless AC connected at 400Mb/s. I was going to try it both wired and wireless. Is it just getting the right settings between host and client for streaming?

The reason I talked myself out of doing an insane SSD storage pool (or even dedicating a single SSD to a VM) is because the streaming will be over a gigabit network. That means max speeds of around 110MB/s, but more like 80 to 90. Am I correct in thinking this? Because if I don't have to spend the money on large capacity SSDs I'd rather not...

So, yeah, mostly just a brain dump. I'll be playing a variety of games; DX:MD, Doom, Life is Strange, Empyrion, Skyrim, Far Cry series, Crysis series, and a bunch of others. I really want to get into Elite Dangerous.

Like I said, I plan on testing the streaming sometime this week when I have the time.

Ideas and opinions?

The latency with streaming is always going to bet there for the foreseeable future. For the GPU to capture the image, compress it, send it, decode it and then display it takes a lot of time regardless of network.

Casual games would probably be fine but for anything else a native running game will always be better.

Steam in-home streaming has gotten so good. I stream from a Windows 10 VM over AC wifi to a Linux client at 3440x1440 usually near 60 FPS. With the streaming bandwidth set to unlimited, image quality is flawless and the display latency is consistently around 27 ms. I'm honestly blown away by how well this all works.

I'm not a competitive gamer and generally not a skilled player so I don't really notice the latency. Reducing the bandwidth limit or resolution will bring the number down. I get around 16 ms at 1920x1080.

Streaming from a VM vs physical host probably makes little difference these days. Streaming and VM actually complement each other very well. VM often has audio stuttering issues, but streaming from a VM over a virtual audio interface seems to work around the issue.

Main issues will probably be wifi and hardware video encoding/decoding.

  • If you're on wifi, disabling regular network scanning is critical. See for Windows: https://steamcommunity.com/groups/homestream/discussions/0/540738050814056472/
    It is an old thread so I'm not sure if the solution still works.
    On Linux, disabling network manager and configuring wifi manually with systemd works well.

  • Hardware video decoding and encoding are generally required for a good experience.

In-Home gaming works very well, especially with linux front-to-end, but it's still completely impossible to play twitch shooters because of lag, and that will always stay like that. In CS:GO for instance, the lag encompasses multiple frames, and single frametime is a decisive competitive factor in that game. Most games though, no problem at all, and it looks just as amazing as natively.

Thanks, guys, for the replies.

I was able to do a quick test, streaming DX:MD from my Windows VM to my HTPC. It worked surprisingly well. My input device situation isn't the greatest, though. I have a Logitech K400r (keyboard/touchpad combo) and a Logitech M510 mouse connected to the HTPC. I'll play around with it again this weekend. All in all it felt very nice, and was at 60 fps consistently. I almost certainly will not be playing "twitch" style multiplayer games, or any multiplayer games in general even.

I have pretty much determined I do want to have the VM on the server. So I'll probably get either an RX 480 or a 1060. I'd prefer both to be reference (blower) design. I'm hoping to find a good deal this week for black friday.

One thing to note though, in general relevant to everybody:

Fedora 25 has cryptosuite-system-policy enabled by default. That is a feature that binds in with crucial subsystems to force all applications to the same preset high-security crypto standard, for instance TLS 1.3.

If you install the Steam client in Fedora 25, you have to downgrade essential subsystems (e.g. Mozilla's Network Security Services package, because the Steam client is based on a very old version of Mozilla Firefox), which prevents the general use of the crypto system policies, so you lose the unified forced cryptopolicies for all applications.

You might not really want that.

It's always best to treat the Steam client like Windows: it's proprietary spyware that can never be trusted. In linux, it's easy anough to run it in an lxc/lxd, or you can of course install it in a virtual container with passthrough like you would windows.

So, yeah, I didn't forget about this project.

I did get an RX 480 over Black Friday. I have been wanting to use it in a desktop for my brother, which is built and mostly ready to go. But the 480 has just been sitting around for the last few months.

Today I tried to install the video card into the server. It didn't work out well. When the card is installed I get weird boot problems, mainly it won't get past post. I don't get any errors, although I didn't look into the led codes. I tried different slots. It just doesn't like it. Not sure why. The motherboard is an Intel S2600CP2.

So this project may not be doable. I might look into getting a cheapish video card off craigslist to test.

Anyone have an idea why it won't boot properly when the card is installed? I guess I assumed it would work even though all the slots are x8.