AMD P-State EPP Driver Updated For More Power/Performance Control On Linux
AMD P-State EPP is an evolution of the AMD P-State driver code they've been working on the past year. P-State EPP (Energy Performance Preference) aims to further enhance the performance and power control for modern Zen laptops, desktops, and servers.
The AMD P-State EPP driver extends the initial P-State CPU frequency scaling driver implementation by making use of ACPI CPPC's Energy Preference Performance (EPP) information that is a hint to the hardware whether the software prefers a bias to performance or energy efficiency. Benchmark results provided by AMD with their initial P-State EPP patches using an AMD EPYC "Rome" (Zen 2) server showed this new driver code delivering significantly better performance-per-Watt than amd-pstate (passive) or acpi-cpufreq across various governors.
With the v4 patches there is additional code changes as a result of the code review process, allow setting the amd-pstate driver more easily via a kernel parameter, and other fixes.
The AMD P-State EPP v4 patches are now out for review via this kernel mailing list thread.
With the latest patch revisions, the AMD P-State EPP functionality on patched kernels can be enabled by setting the "amd-pstate=active" option as a kernel argument. The energy performance preference can then be controlled at runtime via the /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference interface. As with passive AMD P-State, this functionality requires Zen 2 CPUs and newer due to dependence on ACPI CPPC.
It will be very interesting to put this P-State EPP driver through some rigorous testing as it nears the mainline kernel. It will also be interesting to see how well AMD P-State EPP works out for the just-announced AMD EPYC 4th Gen "Genoa" processors -- see my EPYC 9654/9554 Linux review from yesterday in case you missed it.
Not directly related to this AMD P-State EPP work, but this week AMD also posted Linux kernel patches to provide new infrastructure around hardware sleep state time. This infrastructure would work for both AMD and Intel CPUs to be able to report the amount of time spent in suspend-to-idle (s2idle) sleep states. Exposed conveniently via sysfs would be the duration of the hardware sleep state and the total sleep duration of the system since it was booted. User-space can then query this information after s2idle for evaluating the amount of time spent in a hardware sleep state. More details on that separate kernel work via this patch series.