Also mal grundsätzlich scheinst du alles richtig gemacht zu haben… AberFrage an dich: der Code oben, ist der von dir richtig adaptiert und nichts übersehen?
Ich nehme mal an damit ist gemeint, dass du in MPT unter „Power“ → „Power Limit (W)“ den Wert 150 eingetragen hast, nicht „OC Limits“ → „Overdrive“ → „Power Limit“ → „Min“ / „Max“?Ich hab mir also eine bestehende MPT Datei mit 150W Powerlimit genommen und über diese Schritte in die Live-Powertable geschrieben.
MPT überschreibt dann die Werte
smc_pptable.SocketPowerLimitAc[PPT_THROTTLER_PPT0]
und smc_pptable.SocketPowerLimitDc[PPT_THROTTLER_PPT0]
in der PPT mit dem eingegebenen Wert. Diese beiden Werte scheinen den Linux Treiber allerdings nicht großartig zu beeindrucken: Sowohl power1_cap_default
, als auch power1_cap
bleiben unverändert.Also alles Essig? Nicht wirklich: Es gibt (imo) keinen guten Grund dafür überhaupt die PPT zu verwenden. Das Powerlimit kannst du auch jederzeit via
power1_cap
beliebig ändern, solange der neue Wert innerhalb von power1_cap_min
bis power1_cap_max
liegt.Diese beiden Werte werden dagegen tatsächlich aus der PPT übernommen. Wenn du dein Powerlimit auf 150W senken willst müsstest du also
smu_11_0_7_overdrive_table.min[SMU_11_0_7_ODSETTING_POWERPERCENTAGE]
(overdrive_table.min.8
in upp; „OC LImits“ → „Overdrive“ → „Power Limit“ → „Min“ in MPT) in der PPT auf einen passenden Wert setzen (Wenn deine GPU 285 W als Standard hat also mindestens 48)power1_cap_min
sollte dann einen Wert von149000000
haben- Wenn dein Kernel älter als Linux 6.7 ist sollte da eh
0
drin stehen, dann kannst du dir den Schritt auch sparen
150000000
nachpower1_cap
schreiben- Dafür kannst du auch CoreCtrl benutzen
pp_table
, power1_cap
, etc.) überleben immer nur so lange, wie der Treiber geladen ist. Wenn du also willst, dass die nach einem Neustart noch gelten musst du dafür sorgen, dass sie nach jedem Start (nachdem amdgpu geladen wurde und die GPU initialisiert hat) neu geschrieben werden, z.B. mit einer udev-Regel.CoreCtrl kann die PPT (wie ich schon mal geschrieben habe) allein aus dem Grund schon nicht überschreiben, dass (zumindest im master Branch) kein Code existiert, um überhaupt auf die PPT zuzugreifen. Was CoreCtrl, etc. kann und tut ist Werte überschreiben, deren Default- und/oder Grenzwerte aus der PPT stammen z.B. ebenCoreCTRL, LACT und nen Lüftersteuerer hab ich deinstalliert, weil ich irgendwo gelesen hab, dass CoreCTRL bei jedem Start die Powertable wieder neu überschreibt.
power1_cap
.