Jamie Starke bio photo

Jamie Starke

I develop for my career, but I also develop for fun, and whenever I think it can solve a problem I'm having. This has lead me to create side projects, such as Rental Map and BusTimes, among others.

Consulting Newsletter Email LinkedIn Github Stackoverflow More

I love video games. I have loved video games as far back as I remember. Playing Gertrude’s Secrets on my family’s IBM XT is one of my earliest memories.

I used to play video games a lot. But as my children were born, with the sporadic sleeping patterns of a newborn, baby, then toddler, playing games, like many of my hobbies, just kind of fell off.

In the fall, I was facing a big challenge. I was finding less joy in my work, and with all of my hobbies gone, this resulted in me being quite down. One day I was talking with a colleague, and told him about my difficulty. He told me about how he was getting joy outside of work by picking up the guitar. It made me reflect on what I used to do for fun. That night, I went home and picked up the expansion pack for Breath of the Wild.

It was just what I needed. Once my kids were asleep, I’d pull out the Nintendo Switch, and play for an hour, maybe two, before going to bed. Even on days where I felt I was struggling to make accomplishments at work, I could play for an hour or so, and make progress towards a quest. At least, until I completed the expansion. Once I completed the Champions Ballad expansion, there wasn’t really anything left for me to do. Sure, I could have tried the Trial of the Sword quest, but it never really interested me. So I started to look for my next game.

Zelda was one of the earliest series I really fell in love with. It definitely has the largest number of games I’ve played in a single series (I think I’m up to 7). But Fallout is probably my second closest with 5 games.

Fallout 4 had been out for a while, and was on sale on Steam. I wanted it, I really did, but it had one large blocker for me. None of my computers was powerful enough. The requirements say that it requires 8 GB of RAM and a 2 GB video card. The most recent computer in my house is a mid 2014 13” MacBook Pro. With it’s integrated video, there was no way that it would be able to keep up. Even if I could manage to get it to play, I couldn’t imagine that it would play well.

My first thought was that it was time to get a gaming machine. I started looking but what I quickly found was that for a decent system, I’d easily be looking at $1200 and up. For a long time, I’ve had a rule of thumb. For entertainment, I can happily spend $1/hour, but for something I’d really enjoy, like a game from my favorite series, I can happily spend $3/hour. This means that to justify $1200, I’d have to play at least 400 hours. At 2 hours a day, this would take at least 200 days, and that’s for a fairly basic system. For me that is hard to justify.

Enter Cloud Gaming

Last fall when Google announced Stadia, I was super psyched by it. Having worked with the cloud since 2014, I was quite familiar with the prospect of what the cloud could do. The idea of being able to stream games from a much more powerful system into my house was exciting. More exciting to me was the prospect of being able to play all of these games, without having to purchase a bunch of new hardware, and be able to pay something more closely to what I actually use.

Of course, we all know now that if you wanted to play on a TV, you really had to invest in some new hardware on Stadia as well, even if it was just their fancy controller and Chromecast. But that wasn’t it’s only limitation. Games also have to set up to play on Stadia, so there’s also the limited library. Then you have to pay a monthly fee to play Stadia. From what I understand, you also have to pay for the games too. Then there’s the Google graveyard, the growing list of products of which Google has gotten bored, and killed with little or no notice. It makes you ask yourself, do I really want to invest a bunch of money into hardware and licenses to play games for a system that could become unsuable at any moment? But more importantly, the game I wanted to play, Fallout 4, wasn’t available for Stadia (to be fair though, it did just have it’s 5th birthday).

I looked into all of the big alternative platforms out there: XBox’s XCloud, now just a feature of Ultimate plan in XBox Game Pass, Amazon Luna, NVidia GeForce Now. Each one of them had the same problem, a limited selection of games, and more importantly, not the one game I wanted to play. (Originally GeForce Now allowed you to play anything from your steam account, but I guess the game publishers took issue with that.)

Finding Parsec

I came across Parsec a while ago. It’s a client-host application that focuses on low latency video streaming. That it does, quite nicely. It also has some super handy features as well, like great controller support. On the client you can use a number of different controllers. Having a MacBook Pro, this is great, as most recent controllers (like the XBox One, PS4, etc) run over bluetooth, and can be supported on the client natively. On the host it emulates an XBox controller for Windows, which is great, as the XBox for Windows controller is supported by the largest number of games on Windows. The client also supports an easy method for mapping your controller to the XBox buttons, however you’d like.

The next thing I needed to figure out was where to run the host. As I have years of experience with AWS, that would be the first place I’d look, as I already am quite familiar with the console, and the API. Parsec has a script to set up a Parsec Host on Windows Server 2016 and 2019. The script supports a number of different GPU instances across different cloud providers. I spent some time looking into different instances across Paperspace, AWS, GCP and Azure.

On Azure the cheapest instance was the NV6 at $1.3978/hour. On Google Cloud the cheapest instance was super confusing. It seemed like you attach one of the GPUs to one of your instances, but the cheapest supported GPU was the Tesla T4 with Virtual Workstation at $0.55/hour. On Paperspace the cheapest is the P4000 at $0.51/hour. On AWS the cheapest is the g4dn.xlarge at $0.71/hour, but on a spot instance, it could be as low as $0.3418/hour. Of course I’d also need to account for storage and transfer, but was a good starting point, well below my $1/hour rule of thumb.

With an instance in mind, it was time to give it a go.

Cloud Gaming on AWS: My first attempt

The g4dn.xlarge instance comes with 125 GB of NVMe storage, 4 vCPUs, 16 GB RAM and 16 GB GPU memory. These instances feature the NVIDIA T4 Tensor core. While this can work for streaming video and has support for NVenc, they’re definitely targeted at ML workloads.

My original plan was to set up an AMI with just the basic Steam install, then install the games onto the NVMe drive each time, because obviously these instances will have very fast networking.

This idea lasted all of a few hours. I’m not sure if it’s something general to the AWS infrastructure, to this instance type or to Steam itself, but the download speed was positively abysmal. I was lucky if the download speed consistently at 30 MB/s, but much of the time it seemed to run at 10 MB/s or less. Given that Fallout 4 is around 32 GBs, it ended up taking a few hours to download.

Next I thought up a clever idea. EBS volumes cost $0.10/GB, but EBS Snapshots cost $0.05/GB. I decided that I would create an AMI that included steam with Fallout 4 installed. This worked much better than attempting to download the game each time. What I found however was that disk volume load speed was extremely slow. This led me to learn something interesting about EBS Snapshots. When you load an EBS Snapshot, it doesn’t actually create a volume with all of the data right away. Instead, it lazy loads each block on the first access after creating from the snapshot. This leads to increased latency and slow load times. After enduring a week of this, I decided to try something different.

The next attempt that I tried was to create a separate Steam library EBS volume. This volume had enough capacity to download Fallout 4, without a lot of extra space. As the game wasn’t constantly loading data from the volume, the EBS Burst capacity could handle the loads as necessary. It worked out pretty well and it balanced the price and performance nicely. On the downside, it required me start the instance and attach the volume each time.

The instance ran quite well, but the encoding latency was pushing close to 10 ms when running at 1280x800. While this was still within acceptable range, it was definitely pushing the limits on playable. With that said, Parsec ran extremely well, and I frequently forgot that I was streaming the game from Oregon. The one thing that really broke me out of that quickly was if I was playing over WIFI. The jitter over wireless would frequently cause big lags. For this reason, I ended up ensuring that I had a wired connection.

Running the instance on Spot also didn’t work all the time. Sometimes I would attempt to launch a spot instance, and find that there were no instances available, and I’d have to fall back to an On-Demand instance at $0.71 an hour. I was starting to get crazy ideas in my head of how I could automate the process of starting a spot instance, wait for it to become available, and automatically attach my games volume to it. While it was hard by any means, it was annoying, and was becoming a bit of a burden.

After running on AWS for the first 15 days of November, I managed to rack up 46 EC2 instance hours, $20.51 in instances and volumes, and $7.61 in data transfer, for a total of $28.12 in half a month. While these numbers are quite good, a friend told me about the good experiences they were having on Paperspace, so I decided to give it a try.

Cloud Gaming on Paperspace: My new Go To

The P4000 instance comes with 8 vCPUs, 30 GB RAM and 8 GB GPU Memory. In terms of disk you select your size of SSD storage, but the recommended 100 GB volume costs $7/month.

My first big surprise on Paperspace was that they already have a template (their version of an AMI) pre-configured for Parsec, so it’s super fast and easy to set up. Downloading Fallout 4 was incredibly fast, and I think it completed downloading all 32 GB in only a few minutes. Paperspace also has free unlimited bandwidth, which is great for streaming, because from my AWS bill, it seems like I had 761 GB of transfer.

The billing on Paperspace was far simpler than on AWS, because you only pay for 2 things: The drive for the whole time that your machine is allocated, and the time that your machine is actually running. Starting and stopping the instance is extremely easy to do in the Paperspace console with a single click.

The only downside that I’ve experienced with Paperspace is that sometimes it take a few minutes to start my machine, due to capacity. I think that’s only happened maybe 4 days in the last month.

In comparison with AWS, I started trying Paperspace on November 15th. By the end of the month, I managed to rack up 32.1 hours for a total of $17.82. I did use less hours on Paperspace than I did on AWS, but if I scaled up the ratio, 46 hours would likely have cost me around $26, which ends up less than AWS. This was mainly because you get billed for many more things on AWS that you might not consider, and they add up: Your EBS Volume, EBS Snapshots, and data transfer.

Unless my gaming hours increase significantly, or for some reason I’m unable to play a game on their hardware, I’m likely to continue on with Paperspace for the foreseeable future.

How you can get a similar set up of your own

For you to set up something similar of your own, there are a few things you’re going to need:

  1. A Parsec Account
  2. A Client Device
  3. A Host Device

For the Parsec account, you can sign up here.

For your client device, parsec supports a number of different devices currently, including Windows, Mac OS, Android, Ubuntu LTS Desktop, Google Chrome, and Raspberry Pi 3. I’ve used it both on my 13” Retina MacBook Pro, and my Raspberry Pi 3. The lag on the Raspberry Pi was quite noticeably high. At one point, I even had my controller plugged into the Raspberry Pi, and had both my Pi and MacBook connected to the server. When I moved my controller and watched my Macbook, there was no noticeable lag, which was funny given that the controller was attached to the Pi, and the Pi had a visible lag. As such, I would not recommend the Raspberry Pi.

For the Host, I’ve tried both the g4dn.xlarge on AWS, and the P4000 on Paperspace. I’m still using the P4000 to this day. On paperspace, there are apparently instance types with higher and lower specs, but the P4000 was the first I tried, and it worked quite well for me.

If you want to give Paperspace a try, you can get $10 free credit if you sign up with my referral link (referral link). Full disclosure, I’ll get a $15 referral credit towards my own gaming if you end up sticking around.

If you want to give Parsec a try on Paperspace, they have a great 5 minute setup guide you can check out.

Give me your feedback

If you do end up trying out Parsec or Paperspace, I’d love if you left a comment so I could find out how they worked out for you.

I’m also on the lookout for Couch coops that I can try with friends over Parsec, while running a simultaneous zoom. If you know of any good ones, leave a comment to let me know.


Shameless Plug: Use this link to sign up with Paperspace and get a $10 credit to your account