[RESPONDED] Correct way of limiting Ryzen TDP/PPT

I have a Framework 13 with the 7640U. I’ve experimented various way to limit the processor TDP/PPT in Linux, but I’ve found none without major drawbacks. So I’d like to ask if anyone knows a better way. I feel I lack the kernel skills and low-level system knowledge to investigate this further alone. Sorry for my bad English.

My motivation are the following:

  • when attached to AC power I’d like the TDP to be lower than the default one because I’d like to trade off some performance to reduce fan noise. I’ve found out that the fan noise is very tolerable for me when the processor is under a certain TDP
  • when on battery sometimes I’d like to save battery but without adjusting the power profiles to power saving. I’ve found some scenario where the power saving power profiles hit too much on performance.

I’d imagine that other people may have the same interest with similar or different motivations.

Here is what I tried.

Intel rapl

For AMD processor /sys/class/powercap/intel-rapl* does not contain any interface to limit TDP. So a dead end.

RyzenAdj

A small project suggested elsewhere in the forum: GitHub - FlyGoat/RyzenAdj: Adjust power management settings for Ryzen APUs

This somehow achieves the goal but with too many caveats:

  • I had to disable SecureBoot to make it work, this alone for me is enough to disqualify this for every day usage
  • Some values are reported as nan, which left me wonder whether Phoenix APUs are fully supported
  • The PPT limit appears to reset every time I plug/unplug AC power
  • I’ve found a warning in the forum about this software

Allegedly RyzenAdj not working with SecureBoot enabled comes down to a kernel security decision.

SMU options with Smokeless_UMAF

This involve changing the PPT settings in the SMU options from Auto to Manual and setting custom PPT values using GitHub - DavidS95/Smokeless_UMAF

With this solution I was able to change permanently the PPT value and I guess I can now re-enable SecureBoot but…

Here are the caveats:

  • the PPT values are set and I cannot change them without booting again into UMAF
  • the PPT values don’t change anymore where plugging/unplugging the AC power
  • I think this operation somehow interfered with Framework EC

Windows

I’ve seen various link to Windows utils allegedly capable of achieving my goal. I wonder If those will ever work from a VM. And I wonder how those are capable when on linux I couldn’t find anything.

Nothing to add as this is not something I have had time to explore myself, but monitoring.

Apparently there is a workaround for using RyzenAdj with secureboot: load a module that removes kernel lockdown. Same way you can use the ectool with portio without a patched kernel.