Can you game in the cloud?
The short answer: YES!
The longer answer: Yes, with some caveats. Setting up cloud gaming on your own is not for the faint of heart. It takes quite a bit of configuration and finagling with drivers to correctly function. Once the initial setup is done, performance varies depending on the game and your latency to the AWS Region that’s hosting your instance.
At a high level, I used Steam In-Home Streaming with OpenVPN to send the audio and video of games from AWS to my local machine that’s running the Steam Client. I used a g2.2xlarge Amazon EC2 instance running Windows Server 2016 for my cloud gaming machine. These instances are equipped with NVIDIA GRID K520 GPUs, 8 vCPUs, and 15GB of RAM. I setup my root volume as a 120GB General Purpose SSD EBS volume.
I won’t go into the details of the exact setup process for an instance because there are plenty of tutorials on the web for that. That said, be aware that setting up your instance can take a long time the first time you do it!
I tested two games: EA Star Wars Battlefront and DiRT Rally. Battlefront uses the Origin Client, while DiRT Rally uses the Steam Client, but both can be used with Steam In-Home Streaming. I ran my tests on a 2012 Retina MacBook Pro with the display resolution set to 1920×1200 (in HiDPI mode) and a 100MBit/s Internet connection connected over Wi-Fi (802.11ac). I also enabled streaming performance stats in Steam to view the input and display latency of my local client.
At first both games were very blocky and blurry, which made them nearly impossible to play. Upon further investigation, Steam was limiting my bandwidth to 1-2MBps. That’s not nearly enough for what I wanted. The video stream was being compressed too much at that bandwidth rate. Changing the “Limit Bandwidth” setting from Automatic to 50MBit/s gave plenty of capacity for streaming that was well under my Internet connection’s max bandwidth. For my tests, I made sure my Steam In-Home Streaming Client Options were set to the following:
- Limit Bandwidth to 50 Mbit/s
- Limit resolution to Display resolution
- Enable hardware decoding
- Display performance information
The first thing I noticed is that the game looked very good overall! The display made it feel as if I was playing on my actual hardware instead of streaming from the cloud. It’s quite amazing to think that I was playing a game on a computer that’s hundreds of miles away!
DiRT has a built-in benchmark test that I used to test the performance of the GPUs. I ran the benchmark with the game set to 1920×1080 and graphics settings set to Ultra. This revealed that the NVIDIA GRID K520 isn’t the best card when it comes to high-end gaming. Instead of the desired constant of 60+ fps, the average framerate was only 45fps. While this would technically be acceptable for gaming locally, it’s not the best for a cloud gaming experience. I turned the graphics settings down to Medium to get a framerate that was constantly above 60fps.
The next thing I noticed was the latency between my keyboard input and when the car would move. I would see a turn coming up, press the arrow key to move the car, but the car wouldn’t respond fast enough. So, I’d end up holding the arrow key down for longer. When the car would finally start turning, I’d release the key. But by this time, it was already too late. The latency between my input and streamed video caused me to constantly overcorrect and lose control of the car in the game.
Initially, I ran my cloud gaming machine in the Oregon region (us-west-2). I did an additional set of tests in the N. California region (us-west-1) because my latency to N. California was lower (you can find your lowest latency region by visiting cloudping.info). My ping latencies were 50ms and 32ms to Oregon and California respectively.
The difference between Oregon and N. California regions was slightly noticeable. The display latency was not as much in N. California as it was in Oregon, but it was still noticeable. In Oregon, the display latency was about 76ms, while in California display latency was about 54ms.
EA Star Wars Battlefront
Battlefront also looked amazing! I felt the same immersive experience of the Star Wars world as I do when I play the game locally.
Like I mentioned above, the K520 GPUs aren’t the best for high-end gaming. I started off Battlefront with the display set to 1920×1080 and graphics settings set to Ultra. Because Battlefront doesn’t have a built-in benchmarking utility, I turned on the FPS counter and eyed it closely. As best as I could tell, the average framerate was around 45fps, but sometimes as low as 30fps. To get above 60fps I had to turn the graphics settings down to Medium and Resolution down to 1680×1050.
I experienced the same display and input lag here as I did while playing DiRT. In single player missions, the lag was bearable and it was still fairly easy to play the game. However, fast paced online play would be extremely difficult and probably result in frustration.
There is a large amount of overhead that goes into gaming on Amazon EC2. Lots of little tweaks and tricks are required to get everything just right. It’s not quite as simple as powering on your gaming rig and opening a game.
The cost of gaming in the cloud is surprisingly affordable. You can play for a couple hours for only a few dollars instead of spending $1000+ for a gaming machine. For the occasional gamer, this is totally cost effective. However, more serious gamers may want to invest in building their own gaming machines until cloud gaming catches up.
While I did my testing with more latency-sensitive games, I’d imagine console style games (these are usually a bit more forgiving with latency) may be completely playable from the cloud. This is something that I plan to test more in the future.
Cloud gaming is still in its early stages. My short experience with it has my hopes high for the future. The quality of the graphics that streamed from AWS was far better than I expected. However, the input and display latency left me with much more to be desired. Is cloud gaming for you? I’d say that unless you have a low latency connection to an AWS region, wait for the technologies to mature a little more. There are some technologies on the horizon that seem to be very promising.