Hello,
I’m adjusting pp_table settings to get most out of my GPU (RX 6800 XT) and it works but every time I restart PC the changes revert back to default. Any idea how I could make them persist?
For me pp_table is located in /sys/class/drm/card1/device/pp_table
I have to use chmod to be able to make changes:
sudo chmod o+w /sys/class/drm/card1/device/pp_table
Then I’m able to write in changes with upp:
upp -p /sys/class/drm/card1/device/pp_table set --write smc_pptable/SocketPowerLimitAc/0=312 smc_pptable/SocketPowerLimitDc/0=293 smc_pptable/TdcLimit/0=300 smc_pptable/FreqTableSocclk/1=1350 smc_pptable/FreqTableFclk/1=2000 smc_pptable/FclkBoostFreq=2000
And just in case you’re wondering if the effort even makes sene, yes it does:
Max OC with LACT with max default limits (left) vs max OC with edited pp_table (right) in the picture.
I’m not familiar with Radeon PowerPlay, so I don’t know if there is a proper way to solve this, but you should be able to make a systemd system service to run the
upp
command on boot.To do so, I think you can use the following:
[Unit] Description=Run my_user_script After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target [Service] Type=oneshot ExecStart=upp -p /sys/class/drm/card1/device/pp_table set --write smc_pptable/SocketPowerLimitAc/0=312 smc_pptable/SocketPowerLimitDc/0=293 smc_pptable/TdcLimit/0=300 smc_pptable/FreqTableSocclk/1=1350 smc_pptable/FreqTableFclk/1=2000 smc_pptable/FclkBoostFreq=2000 [Install] WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
To configure this service:
.service
file in/etc/systemd/service
. (e.g./etc/systemd/system/my_update_pp.service
)sudo systemctl daemon-reload
to tell systemd to re-read the service filessudo systemctl restart my_update_pp.service
to manually run the servicesudo systemctl enable my_update_pp.service
to tell systemd to run your service automatically on boot/wake (WantedBy
tells systemd when it should include the unit/service,After
,Wants
,Requires
, andBefore
help systemd decide the order to run all the units/services)Notes
After
and setWantedBy
to justWantedBy=multi-user.target
, but if you also need to runupp
after sleep or hibernate, then you probably need something more complex. I copied theAfter
andWantedBy
from a stackexchange answer, but I haven’t tried using those targets before. You might have to addmulti-user.target
to theWantedBy
list.upp
after sleep/hibernate. Running on boot might be sufficient.chmod
if you runupp
as sudo/root. Systemd system services run as root by default.References:
Thanks a lot. I will look into this.
Reason why I use chmod is because I cant for the life of me figure out why I can’t just use sudo. Even when I set environment variable for the upp.py it refuses to run it. Even when I directly want to run it via sudo it refuses, I can only run it without sudo for whatever reason… but to overwrite pp_table I need sudo privileges and I’ve been only able to get around with chmod.
Also I’ve tried to make a script that I will just run and will execute the commands… but I get immediately hard lock and black screen and I need to do hard reset. Same when I try to copy and overwrite the pp_table with sudo priviledges with a pre-modified pp_table.
So I’m kinda hesitant to now run the commands on runtime, it’s possible it will hardlock during boot. I will give it more though tommorrow.
edit:
I just found out how to write the pp_table into VBIOS so I will try flashing modified VBIOS on the card and hope it will work. I’ll leave that for tomorrow though.