Dev

AMD P-State Linux Patch Improves Minimum Gaming FPS by 31%

Meta kernel hacker David Vernet proposes the epp_boost feature for the AMD P-State driver, improving low FPS on Steam Deck by 31.8%.

4 min read Reviewed & edited by the SINGULISM Editorial Team

AMD P-State Linux Patch Improves Minimum Gaming FPS by 31%
Photo by BoliviaInteligente on Unsplash

David Vernet, a Linux kernel hacker at Meta, has submitted a series of patches to the kernel mailing list proposing a new feature called “epp_boost” for the AMD P-State driver. This change introduces a mechanism that dynamically raises the Energy Performance Preference (EPP) for recently busy CPU cores, showing significant effects, particularly in gaming workloads. According to Vernet’s tests, the benchmark for Civilization VI running on the Valve Steam Deck demonstrated a 31.8% improvement in 1% low FPS and a 4.1% enhancement in p99 frame time.

Factors Limiting Gaming Performance

The current AMD P-State CPU frequency scaling driver operates in an active (EPP) mode, where the platform autonomously selects operating points between min_perf and max_perf. While this selection is influenced by EPP hints, the kernel only rewrites the Collaborative Processor Performance Control (CPPC) requests when policies or restrictions change. This design poses challenges for workloads (such as many games) where a single thread consumes most of the load while frequently making short sleeps.

Each time the thread sleeps, the hardware performance signal diminishes, and upon waking, the burst begins at lower operating points, increasing tail latency. Vernet elaborates on this issue:

Game main threads or rendering threads typically block briefly on each frame with futex or GPU fences. The resulting frequency drop directly impacts stack frames and frame-time percentiles. Addressing this in the cpufreq layer requires a very narrow approach. Forcing EPP=performance globally improves the tail but consumes power across all workloads on all cores. This is particularly problematic for handheld devices where the CPU and GPU share a power budget. While raising the min_perf of busy cores might seem like a surgical fix, it would lock cores above nominal levels even during micro-idle or vsync waits. In my experiments on Van Gogh (Steam Deck), this approach disrupted the shared CPU/GPU boost management of the System Management Unit (SMU), worsening frame-time tails compared to doing nothing.

How epp_boost Works

To address this issue, the patch series implements an opt-in per-core EPP boost mechanism called “epp_boost.” When enabled, the update_util hook samples each core’s C0 residency rate (delta MPERF / delta TSC) at intervals no greater than 10 milliseconds. If the sample determines that a core is more than 50% busy, the EPP field in MSR_AMD_CPPC_REQ for that core is set to performance (0). This state is reverted if no busy samples are detected for 300 milliseconds, restoring the policy-managed request last saved.

Vernet’s benchmark results are clear. For Civilization VI on the Steam Deck, 1% low FPS improved by 31.8%, and p99 frame time was enhanced by 4.1%. This improvement could benefit not just the Steam Deck but also other modern AMD Ryzen-based handheld and desktop systems. For handheld gaming devices where the CPU and GPU closely share a power budget, this dynamic control is especially valuable, as it avoids relying on traditional all-core fixed boosts.

Outlook for the Kernel and Linux Gaming

Although still under review, this patch has garnered significant community interest due to its direct impact on gaming performance. Users of Linux gaming devices featuring AMD Ryzen processors (like the Steam Deck, ROG Ally, and Lenovo Legion Go) will likely benefit, as will desktop gamers using Proton. Beyond gaming, this approach could also be applied to other bursty workloads involving short sleeps—such as interactive applications or low-latency processing.

From a similar perspective, the recently discussed Linux Cache Aware Scheduling Enhancements: Up to 360% MySQL Speedup highlights the benefits of optimizing scheduling based on workload characteristics. epp_boost represents a significant improvement in frequency control and deserves attention.

Editorial Opinion

In the short term, if this patch is merged, it could greatly enhance the gaming experience on Linux, especially for Steam Deck users who would benefit from more stable frame rates. However, this feature is opt-in and must be enabled through distributions or kernel configurations. The actual adoption will hinge on whether major distributions backport this patch in the coming months.

In the long term, advancements in the AMD P-State driver enabling more granular CPU and GPU power coordination could standardize Linux support for handheld gaming devices. Additionally, this mechanism could be explored in server and edge computing environments as a way to optimize performance without sacrificing power efficiency. However, since EPP control behavior also depends on hardware microcode, further evaluation alongside AMD firmware updates will be necessary.

References

Frequently Asked Questions

Which Linux kernel version is expected to include this patch?
Currently, the patch is in the proposal stage, and no specific target version has been decided yet. Typically, new feature patches are discussed for inclusion in the next major kernel release (e.g., 6.13), but backporting is also possible.
Can epp_boost be used on Intel CPUs?
This patch is specifically for the AMD P-State driver. Intel CPUs use the intel_pstate driver, which does not currently offer a similar feature. However, the concept might be applicable.
How can I test the patch myself?
You will need to download the patch from the kernel mailing list, apply it to the source code, and rebuild the kernel. Alternatively, some experimental distributions (e.g., Arch Linux AUR) might provide test packages.
Source: Phoronix

Comments

← Back to Home