Date Tags kvm / vm

In 2016, I bought a Steam Link, allowing me to play games on my TV without having to lug a whole physical machine over. The main requirement of Steam Link is the link and the PC on the same network: this allows encoded streaming from the PC to the link, and the link sending back input it is receiving from various bluetooth and USB devices (controllers, keyboards, mice).

The Steam Link combined with Steam and it's Big Picture UI is a very decent replacement for a console: a large game selection, decent UI for navigating the catalogue and purchasing / installing new games.

Unfortunately for those running Linux: Steam is most valuable on Windows: the game selection for Linux doesn't come close to the catalogue on Windows.

You can dual boot to solve this issue, but it then prevents someone else from playing the Steam Link when the Linux partition is in use. Thus, a project was born:

Implementation

I was able to accomplish this by:

It's left as an excersize as a reader to learn more about how those work. The only real caveat was networking

VM Networking

The VM networking was the trickiest aspect. This is due to an uncommon requiremental combination of:

  • the VM being available on the local network (via some IP)
  • the VM being able to communicate to the host machine

The two can be accomplished separately. Using KVM, macvtap with a bridged configuration worked great for exposing the VM, but it can not resolve the IP to the host. I was able to find a stackoverflow article

The Results

The results are pretty good. With a native Windows OS, I was getting roughly 12ms latency from the Steam Link. With the VM, I'm getting roughly the same.

For other reasons, I had to add another switch in between my Steam Link and PC. That had a much larger negative impact: 22ms now vs 12ms before.


Comments

comments powered by Disqus

About Yusuke Tsutsumi
Software Engineer at Zillow. I focus on tools and services for developer productivity, including build and testing.

My other interests include programming language design, game development, and learning languages (the non-programming ones).