Cyberpunk 2077 on Surface Go 2: RTX Online?

This was going to be an extended review of my Microsoft Surface Go 2, with performance benchmarks and comparisons to other computers, outlining its strengths and flaws, investigating the odd quirks that inevitably make every computer less-than-perfect. But after using this as my secondary PC for a month I realised that such a review would be boring because the Surface Go 2 is so unremarkably perfect.

It’s a 10.5 inch tablet PC running Windows 10 with about as much computing performance as my desktop PC had 10 years ago. You could do lots of things with your PC in the year 2010. This can do those things. And it’s the size of a magazine, with battery life between 3 and 12 hours depending on usage.

I chose the non-LTE model with Intel Pentium Gold 4425Y because the faster CPU in the LTE model is still too weak for serious computing, so it didn’t seem worth the extra cost. The hotspot feature on my phone works well for the rare occasion I’m away from Wifi. 8GB RAM should be the minium requirement for running Windows 10 and a web browser in 2020. The 128GB NVMe SSD is fast enough, and it has a microSDXC slot for additional media storage. I guess the cheaper 4GB model with slower eMMC storage could work if you install Linux instead and don’t open too many browser tabs.

The Type Cover keyboard is just a little too small for my large hands. After five minutes of Pacman DX on the tiny arrow keys my hand was actually hurting. As a highly portable device that allows me to write code literally anywhere, it gets the job done, but I would plan ahead and take a larger keyboard if I had to use this all day.

My only real criticism is that the USB boot menu only worked one time, then never again. Holding volume-down while turning on the device just boots into Windows ignoring my request for alternate boot options. Seems like a BIOS bug. I can still boot into Linux on USB by holding shift when I restart from within Windows.

This is my first time using Windows 10 Home edition instead of Pro. I’m very pleased to see that WSL 2 works with Hyper-V. So does BitLocker device encryption with the inbuilt TPM. Hyper-V and BitLocker used to be the reasons I would upgrade to Windows 10 Pro, now there’s no need. I can also install the Hyper-V version of BlueStacks to play Android games with mouse and keyboard, gamepad, or touch-screen support. One thing missing is the ability to create BitLocker-protected removable drives, but I can still create one on another machine with Pro and then use it on Home.

Here’s some footage of old games running on the Surface Go 2 at 720p, captured on the tablet with OBS using the Intel Quick Sync Video encoder. Hurray for old games!

Now let’s see if a Surface Go 2 can play CD Projekt Red’s new game Cyberpunk 2077

Of course it can’t. That’s silly. Here’s how you can really play Cyberpunk 2077 and other high-end games with RTX ray tracing on a low-end computer: Set up your own personal cloud gaming server using a Nvidia Tesla T4 GPU with Tensor cores, RT cores, and 16GB VRAM.

You will require the following:

  • A Windows/Linux/Mac device with Steam installed.
  • An account at Amazon Web Services and some money to spend.
  • 25Mbit internet download speed.
  • Ethernet, or good 5GHz Wifi.
  • Ping time less than 50ms to an AWS datacentre (see cloudping).

Start by logging in to the AWS Management Console. Switch to the region that has the lowest ping time for you. Go to the EC2 service, Security Groups, Create security group. Name the security group something like “Allow all”. Add an inbound rule with type ‘All traffic’ and source 0.0.0.0/0, there should already be a similar outbound rule. Press Create security group.

Now go to Instances and press Launch instances. Select the AWS Marketplace and search for “NVIDIA Gaming PC – Windows Server 2019” then press Select.

Take note of the pricing on the next screen, in US Dollars. EBS volume storage in my region is $0.12 per GB-month, or $12 per month for a 100GB volume that should be enough for one large game. I have to pay this regardless of whether or not I’m actually using it. The other cost is the hourly fee by instance type. I am selecting the g4dn.2xlarge instance type with 8 CPU cores (at only 2.5GHz, maybe not great for certain games), 32GB RAM, and 25Mbit internet bandwidth. The standard price is $1.346 per hour that the instance is running. If I play for 1 hour every day (on average) and always remember to shut down the instance when I’m not using it, the running cost will be about $40 per month on top of storage cost. That works out to a total cost of $635 in a year, less than the current price of a Nvidia 2080 Super, and far less than an entire high-end gaming PC.

Star Trek invented the Tablet PC about 30 years ago.

On the next page choose the g4dn.2xlarge instance type then press Next. Tick ‘Request Spot Instances’. The standard price for this instance is $1.346, but you can get a significant discount if you bid for spot pricing. You will pay a lower rate when there is less demand for these instances, at the risk of having your instance stopped (and being kicked from your game) if demand pushes the spot price higher than your bid. To be safe, set your Maximum price to be the regular price of the instance. You will almost always end up paying less. At the current spot price in my region, that yearly cost estimate works out to be only $384.

Another problem with spot instances is that sometimes you will be unable to start, even if the spot price appears to be lower than your bid. The spot price is a smoothed average and doesn’t reflect sudden surges in demand. You might just have to try again later.

Tick the box Persistent request and Change Interruption behaviour to ‘Stop’, otherwise your EBS volume and all your data there will be deleted when you shut down your instance. Press Next. Change the size of your root volume to 100GB (it can be increased later). Ignore the ephemeral0 volume, it is a high-speed temporary volume that is wiped when your instance is stopped (meaning it will survive reboot, but not shutdown). Press Next, add tags if you need to, Next, now select the existing security group you configured earlier. Press Review and Launch.

You will be asked to choose an existing key pair or create a new one. This will prompt you to download a file. Save this file somewhere, it is required to retrieve the login password later.

Your instance is now starting up. Wait 5 minutes.

Go to Instances and see your new instance in the list. Press the refresh button until the Status check column shows a green tick. Give your instance a name if you like. Tick the box next to your new instance, then at the top press Actions, Security, Get Windows password. Use your key file here to decrypt your new Windows password.

Find the public IPv4 address of your instance in the instance details. This address will change every time your instance is stopped and started. On your computer launch Remote Desktop Connection and enter your instance IP address. The username is Administrator. You should now be logged in to the remote desktop of your new personal cloud gaming server! The rest of these instructions take place inside the remote desktop session.

Microsoft Surface product placement in Ghost in the Shell: Arise.

Firefox is already installed for you. Open it and download the virtual sound device VB-CABLE. Extract the zip then run VBCABLE_Setup_x64.exe to install it. Restart and re-connect to the remote desktop. You won’t notice any difference here because local sound devices are hidden from the remote desktop.

Click the start menu and type ‘Services’. Find the service called Windows Audio. Start this service now and set it to start automatically.

Click start menu again and type ‘Device Manager’. Disable the Microsoft Basic Display Adapter.

Right-click on the desktop and select New Shortcut. Enter this:
tscon.exe %sessionname% /dest:console

Give the shortcut a name like “Disconnect without locking”. This is very important. If you close the remote desktop connection the normal way, the remote screen will lock and you cannot stream games. Use this shortcut to close your remote desktop while keeping the remote screen unlocked.

Install Steam and log in to your account. Install Cyberpunk 2077.

If you purchased the game from GOG or some other non-Steam store, you might run into problems here. GOG Galaxy doesn’t work in remote desktop. You could try alternate remote desktop software (VNC, Chrome Remote Desktop) and/or alternate game streaming services (Rainway, Moonlight). It might help to establish a VPN connection between your home PC and the cloud instance. I chose to use Steam for this experiment because most of the time, for most games purchased through the Steam store, it just works. You can even stream games to the Steam Link app on your Android phone or TV!

In Steam (in the remote desktop) open Settings, Remote Play, Advanced Host Options. Untick Enable hardware encoding to improve streaming quality. Try it both ways and see what works for you.

Finally, use the shortcut on the desktop to close the remote desktop session without locking the remote screen. Each time you start (or restart) the instance you will need to log in to its remote desktop, make sure Steam is running, and use the shortcut to close without locking.

You can now log in to Steam on your Surface Go 2 or other low-end device at home. Mac and Linux can do it too. Steam should automatically detect that you are also logged in to your cloud instance, and any games you have installed there should show up in your local games library. Select your game and press the big green button that says STREAM.

Remember to Stop (not Terminate) your instance when you are not using it, to avoid being charged the hourly fee. You can either shut down from the remote desktop, or change the instance state in the EC2 management console.

To permanently delete your instance and the EBS storage volume go to Spot Requests, select the request associated with your instance, press Actions, then Cancel request. If you just try to Terminate the instance itself, your Spot Request will automatically start another instance for you.

I strongly recommend that you also set up AWS budget alerts to notify you when your monthly spend exceeds a certain amount. This will help to warn you if you accidentally left the instance running longer than intended, or misconfigured it in some way that would incur higher costs.

Since Cyberpunk 2077 isn’t actually released yet, here’s Wolfenstein Youngblood running on my private cloud server at 1080p highest graphics settings. Film grain and motion blur are disabled to improve video streaming quality.

The following table compares the frame rate of some RTX games on high settings at 1080p running on the Nvidia Tesla T4 in the cloud, as well as a Nvidia GTX 1660 Ti Laptop, and a Radeon RX 580 8GB Desktop. Only the T4 supports accelerated ray tracing, the 1660 Ti is compatible with RTX but without acceleration.

Frames Per SecondTesla T4
RTX On
1660 Ti
RTX On
Tesla T4
RTX Off
1660 Ti
RTX Off
580 8GB
RTX Off
Quake II RTX3512
Wolfenstein Youngblood643172137101
Metro Exodus3921558675
Ghostrunner Demo2020518255

The T4 is ahead with RTX enabled, however it falls behind in traditional rendering likely due to its lower board power limit. While these results are underwhelming, with some adjustments to the graphics settings you could achieve a result comparable to a local gaming PC.

The streaming input latency is 3.9ms and display latency is 23.5ms as reported by Steam’s performance overlay. This is an imperceptible delay for most people, good enough for single-player or casual multiplayer gaming.

In part 2 I will compare visual quality in Cyberpunk 2077 running in the cloud, versus a local gaming PC. I might even try to run it natively on the Surface Go 2.