FREE Steam Deck Performance Improvements!
|Right out of the box the Steam Deck is an amazing console with pretty remarkable performance. It can play AAA titles like Cyberpunk – an incredibly intensive game – admittedly only at 30 FPS on low settings, but still. No Man’s Sky can run at 60 FPS! GTA V averages over 60 FPS without a frame rate cap. All of that is incredible – but what if I told you there were a few completely free tweaks you can do to make that even better? Interested? Let’s go.
First, we’ll need Decky, the excellent plugin loader. Switch to desktop mode, head to their Github and download the .desktop file – sticking it on your desktop. Run the installer, let it install the latest stable version, then you can switch back to game mode. In the options menu on the right you’ll see a new plug icon – that’s Decky. From there you can browse all the available plugins – there are some really cool ones like vibrantDeck, a plugin to tweak the Deck’s colour profile, controller tools, a plugin to give you a proper controller menu, and loads more. The main one we are after though is PowerTools.
This lets you tweak a whole lot about the CPU, GPU and even the battery. If you do a lot of emulation, you might find that disabling SMT – hyperthreading – might give you better performance especially at the low end. You should find you get less dips and stutters which is excellent. Some games and emulators might also benefit from parking some of the cores – you can do that either with the slider or in the advanced settings. You can also limit the frequency, limit the GPU power or frequency, and even limit charging current if you want to extend the life of your battery.
Most of these tweaks are specific to each game, so I’ll leave the tweaking on that to you – but one tool that does help pretty much every game is CryoUtilities. To install that, you’ll need to swap back to desktop mode, and this time open a console and use the passwd command to set a root password. This won’t affect game mode, but is needed for the tool to be able to execute the commands as admin. Once you’ve set a password, head to their Github and download their .desktop file. Again run it and let it install. Once it’s done, open the app, click accept and enter your new admin password. You can just click the recommended settings button – or reset to stock if you want to – but I’m going to quickly run through what settings it changes and why so you know what it’s doing to your Deck.
The majority of its changes are all about the swap file and memory management. In short, the swap file – or page file in Windows – is the place where your system stores data it wants to keep in RAM, but either doesn’t have the space or isn’t frequently used enough to actually keep it your RAM. It gets stored on your main drive – in my case my 1TB SSD – and by default SteamOS sets it at just 1GB. Bearing in mind the Deck has 16GB of RAM, 1GB of swap is pretty damn small. CryoUtilities checks how much space you have available, then sets it to either how much space you have (minus 1GB – so if you have 5GB free your swap file becomes 4GB), or as close to 16GB as it can. In my case I have like 700GB of space free, so I think I can spare 16GB. Just..
The next setting is called “Swappiness”. You’ve got to be careful what syllables you emphasise on that one. Anyway, swappiness is basically the setting that controls how aggressive the system is in pushing data store in RAM to the swap file. SteamOS, for some reason, sets that to a value of 100. That’s really pretty high, and means it’s very aggressive in dumping the RAM to swap. That’s a bad thing though, because data store in swap – basically data on your SSD – is much, much slower than RAM, so if something gets dumped to swap then is immediately called for, that’s going to take a lot longer than if it was just left in RAM. Cryo sets this to 1, which not only gives you better SSD life since data won’t get written to swap as often, it also means lower latency in fetching data, which means better performance.
The next setting is called HugePages – or specifically Transparent HugePages. In short, the OS can normally only address 4KB worth of data at a time – a “page”. HugePages lets it address up to 1GB at a time instead. This reduces overhead when assigning memory to a program – like your game – which lets assets load in much faster, generally meaning less dips in framerate when those assets are loaded in. There’s an additional setting for shared memory – by default data that’s stored in memory that multiple processes need access to is normally excluded from HugePages – this tells the kernel to allow shared memory to use HugePages if it wants to.
Next on the list is “compaction proactiveness” – this is basically like defragmentation for your memory. While the compaction process is designed to help speed up access to the data in RAM, the process of rearranging everything is slow and can cause massive lag spikes when your game tries to load some data that’s currently being shuffled around in memory. CryoUltilites disables that feature. The same goes for the HugePage defragmentation – it’s the same idea, and the same disabled state from Cryo.
Finally there is Page lock unfairness. Again, in short this basically means a the OS normally lets processes exclusively have access to a page 5 times before the OS forces that process to let go of that page. This basically means processes can hog data again causing latency, often seen as stuttering or jitter. Cryo sets this to 1, so a process can only hold onto a block twice before the OS moves the block to the next process that wants it.
There is one more tweak that CryoUtilities recommends – although can’t set itself. This one requires you to shutdown your Deck, then holding the volume up button and tapping the power button, boot into the BIOS. Under the settings, and advanced settings, you’ll find an entry for the “UMA Frame Buffer”. By default it’s set to 1GB, but Cryo recommends the maximum of 4GB. This is basically how much of the 16GB of RAM you are allocating exclusively to the GPU. The GPU can use up to half of the RAM, or 8GB, but the CPU has priority, so if your game needs, say, 10GB of RAM, your GPU now only has 6GB to play with. In extreme cases, the CPU can take up to 15GB of that RAM, starving your GPU down to just 1GB. That’s not good – so setting the UMA Frame Buffer to 4GB means your GPU always has at least 4GB of VRAM to play with – and thanks to the increased swap file size, the CPU doesn’t end up starved either.
So, does all of that actually work? Well I ran a couple games with and without the settings to find out. In GTA V, with the framerate limiter removed, in almost all situations I had a better average and maximum frame times – making for a better, smoother gaming experience. I’m still working out how best to capture performance data so if anyone has any suggestions please do let me know in the comments. Still, from the playing experience and the performance overlay, I’d say it’s better. In a game with VSYNC enabled like No Man’s Sky, generally speaking you’ll find the game runs a little smoother with less random dips especially as new content loads in, and I also noticed slightly lower power draw too – 1-2 W less in the same sorts of actions and environments. Interestingly, in Cyberpunk I can’t say I saw much difference. I’m not measuring things like latency here so I can’t say if that’s affected – it wasn’t noticeable if it was – and the performance seems to be pretty much identical on either setup.
But that nicely brings me onto the final point. As a general rule, none of these settings can hurt performance – they can only improve it. There is something to be said for decreasing the lifespan of your SSD with a larger page file, but when you combine that with the much lower swappiness setting that mostly negates that danger. Basically, it can’t hurt to enable these settings, so you may as well, and for the games where it does make a difference, sweet. Free performance. In games, like Cyberpunk, where it doesn’t seem to make a difference. Ah well. No harm done.