A set of patches posted today to the Linux kernel mailing list implement per-core Energy Performance Preference (EPP) boosting for recently-busy CPUs. This feature is designed to have a dramatic impact for Linux gaming and helping especially with the 1% low frame-rates improving by 31.8% on the Valve Steam Deck...

A set of patches posted today to the Linux kernel mailing list implement per-core Energy Performance Preference (EPP) boosting for recently-busy CPUs. This feature is designed to have a dramatic impact for Linux gaming and helping especially with the 1% low frame-rates improving by 31.8% on the Valve Steam Deck.
David Vernet who is a Linux kernel hacker at Meta by day has taken to improving the AMD P-State driver with the proposed "epp_boost" feature for helping with the Linux gaming performance. Vernet sums up the situation well with the current AMD P-State CPU frequency scaling driver behavior and the motivation for this dynamic EPP boost mode:
"In active (EPP) mode the platform autonomously picks the operating point between min_perf and max_perf, biased by the EPP hint, and the kernel only rewrites the CPPC request on policy or limit changes. A workload dominated by one mostly-busy thread that takes frequent short sleeps (common in gaming workloads, for example) can fare poorly under this strategy. Each sleep decays the hardware's performance signal, causing post-wakeup bursts to start at a low operating point and inflating tail latency even though the CPU is essentially fully busy while work is available.As mentioned above, the motivating case here is gaming. A game's main or render thread typically blocks briefly on a futex or a GPU fence every frame, and the resulting frequency droop shows up directly as stale frames and inflated frame-time percentiles.
Solving this at the cpufreq layer requires walking a fairly narrow path. Globally forcing EPP=performance fixes the tail but burns power on every core for every workload, which matters on handhelds where the CPU and GPU share a power budget. Raising min_perf on the busy core seems like the obvious surgical fix, but it pins the core at or above nominal even during micro-idle and vsync waits. On Van Gogh (Steam Deck) experiments that I ran, that perturbs the SMU's shared CPU/GPU boost management enough to regress the frame-time tail relative to doing nothing.
This series instead adds an opt-in, per-core EPP boost. When the epp_boost module parameter is enabled, an update-util hook samples each core's C0 residency (delta MPERF over delta TSC) at most once every 10 ms. If a sample shows the core at least 50% busy, the EPP field of its MSR_AMD_CPPC_REQ is set to performance (0) and held there until 300 ms pass without another busy sample, at which point the hook restores the request that policy management last stored in cppc_req_cached."
The end result is quite exciting with using the Civilization VI game benchmark, the 1%-low FPS is improved by 31.8% while the p99 frame time is better by 4.1%. This is on the Steam Deck while other modern AMD Ryzen handhelds and systems at large would benefit too.
This patch series provides that improvement to the AMD P-State driver. Besides needing those patches, amd_pstate.epp_boost=1 also needs to be set for activating that mode. With patched kernels, the status of the feature can be checked (or set at run-time) via /sys/module/amd_pstate/parameters/epp_boost. It will be interesting to see the impact for a wider selection of games while Civilization VI was used as the test candidate for this AMD epp_boost feature due to its ease and reproducibility.
This promising work still needs to undergo patch review especially by the AMD Linux kernel engineers, but hopefully it will manage to be mainlined in the not too distant future for further enhancing the AMD Linux gaming experience.