3.6 KiB
tuned-amdgpu
Hacky solution to integrate AMDGPU power/clock control into tuned profiles
with Ansible.
Extends every tuned profile found in /usr/lib/tuned
using the AMDGPU hwmon interfaces:
default: the out-of-the-box GPU clock/power configurationoverclock: the optimized card configuration. Includes the clock/voltage/power settings outlined below.peak: the same asoverclock, but with clock gating removed. May help profiling.
Contrary to the name, the overclock profiles can be used to de-tune the card as well.
Warning: This is only tested with RX6000 series GPUs, others may not work properly. Use at your own risk!
Profiles
Two 'profiles' are in each name:
- before
amdgpuis the source profile provided withtuned - after
amdgputells the GPU clock profile offered, outlined below
| Output profile | Description |
|---|---|
balanced-amdgpu-default |
Includes the (assumed) existing balanced tuned profile.Only adjusts the GPU power limit (typically lower). Clocks/voltage curve remain the default. |
desktop-amdgpu-overclock |
Includes the (assumed) existing desktop tuned profile.Adjusts the GPU power limit, clocks, and the voltage curve. |
desktop-amdgpu-peak |
Includes the (assumed) existing desktop tuned profile.Same as the overclock profile, but locks clocks to their highest configured values |
Config
The playbook will render/make effective this config file: /etc/tuned/amdgpu-profile-vars.conf
Here is a preview:
tuned_amdgpu_clock_min=500
tuned_amdgpu_clock_max=2715
tuned_amdgpu_memclock_static=1075
tuned_amdgpu_power_multi_def=0.869969040247678
tuned_amdgpu_power_multi_oc=1.0
tuned_amdgpu_mv_offset=+60
These are the result of Variables below; changes outside of Ansible are not immediately effective. Switching tuned profiles or restarting the service would be required.
One can use gamemode for dynamic switching. Sample ~/.config/gamemode.ini below:
[custom]
start=tuned-adm profile latency-performance-amdgpu-overclock
end=tuned-adm profile latency-performance-amdgpu-default
See this Arch Wiki link for more comprehensive information.
Variables
These are the variables you'll want to change/consider.
| Variable | Description |
|---|---|
tuned_amdgpu_clock_min |
Sets the min (dynamic) GPU clock (in Mhz) for the non-default amdgpu profiles |
tuned_amdgpu_clock_max |
Sets the max (dynamic) GPU clock (in MHz) for the non-default amdgpu profiles |
tuned_amdgpu_memclock_static |
Sets the static memory clock for the GPU (in MHz). This is not the effective data rate. That would be a multiple of this depending on the type of VRAM.To avoid flickering this is not allowed to change with load, only between default and overclock/peak profiles. |
tuned_amdgpu_mv_offset |
GPU core voltage offset. Takes +/- some integer in millivolts. Can be used to both over and under volt. eg: -50 (undervolt 50mV or 0.05V) |
tuned_amdgpu_power_multi_def |
Float between 0.0 and 1.0; controls power limit relative to the board capability. For 'default'-named power profiles. |
tuned_amdgpu_power_multi_oc |
Similar to tuned_amdgpu_power_multi_def, for resulting _overclock and peak power profiles. |