Smooth Gaming on Linux

Gaming on Linux is a double-edged sword. On one hand, it offers complete control over the environment in which games run. However, it doesn't reap the benefits of the hardware vendors' default enhancements baked into Windows drivers and applications. Achieving an optimal gaming environment on Linux often requires some tweaking. In my case, it took considerable research and trial-and-error to get the operating system environment to a point that I'm satisfied with.

Current PC Specifications

Garlt from the Witcher 3 game standing in front of a village

My primary objectives were twofold: to maximise the use of my hardware and ensure a smooth gaming experience without excessive fan noise. I knew that my current setup wasn't optimal as I could hear the fans spinning up and down during gameplay, and the frame pacing wasn't as smooth as it was on Windows.

'MangoHud' became an invaluable tool, not only for monitoring in-game performance but also for forcing certain graphical settings on the fly. Alongside in-game monitoring, I used amdgpu_top to delve deeper into what the GPU was doing while gaming. For CPU monitoring, I used cpupower to check the frequency governor being utilised and the frequencies.

I won't go into detail about the experimental process or how each tool was employed; instead, I'll document my final setup:

Here's my local MangoHud.conf, which simply limits the displayed information to what I care about: frame rate, pacing, and hardware temperatures.

# Disable vertical synchronization
vsync=0

# Set two FPS limits: 162 FPS and 83 FPS
fps_limit=162,83

# Use the "early" method for frame rate limiting (smoother)
fps_limit_method=early

# Enable display of throttling status information
throttling_status=1

# Show the current FPS limit on the overlay
show_fps_limit=1