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:
- Save the text (using sudo/root) to a new
.service
file in/etc/systemd/service
. (e.g./etc/systemd/system/my_update_pp.service
) - run
sudo systemctl daemon-reload
to tell systemd to re-read the service files - run
sudo systemctl restart my_update_pp.service
to manually run the service - run
sudo 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
- Usually for simple systemd services, you can omit
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. - I don’t actually know if you need to run
upp
after sleep/hibernate. Running on boot might be sufficient. - I think you can skip the
chmod
if you runupp
as sudo/root. Systemd system services run as root by default. - I don’t know how safe it is to mess with PowerPlay during boot. My gut says it’s probably fine, but it also seems like something that could cause graphics to not work. Tread carefully.
References:
- https://unix.stackexchange.com/questions/152039/how-to-run-a-user-script-after-systemd-wakeup
- https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html
- https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html
- https://www.man7.org/linux/man-pages/man7/systemd.special.7.html
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.
- Save the text (using sudo/root) to a new