AMDGPU power/clock control with custom 'tuned' profiles
Find a file
2024-08-27 07:12:51 -05:00
host_vars role/host_vars: properly prefix vars 2024-08-27 06:54:55 -05:00
inventories inv: localhost/workstation (map host_vars) 2024-03-24 18:30:15 -05:00
roles/tuned_amdgpu role/host_vars: properly prefix vars 2024-08-27 06:54:55 -05:00
.gitignore ignore vim swp files 2022-06-07 19:50:15 -05:00
ansible.cfg play: clock var updates, -retry files in ansible.cfg 2024-03-03 17:56:42 -06:00
LICENSE Initial commit 2022-06-07 19:42:16 -05:00
playbook.yml tuned: discover base profiles dynamically 2024-08-09 08:25:54 -05:00
power_max multi tab calculator.ods update spreadsheet w/ my card multis 2023-06-05 01:00:36 -05:00
README.md var table updates 2024-08-27 07:12:51 -05:00

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 configuration
  • overclock: the optimized card configuration. Includes the clock/voltage/power settings outlined below.
  • peak: the same as overclock, 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 amdgpu is the source profile provided with tuned
  • after amdgpu tells 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 Mininum GPU clock (in Mhz) for overclock and peak profiles
tuned_amdgpu_clock_max Maximum GPU clock (in MHz) for overclock and peak profiles`
tuned_amdgpu_memclock_static Static GPU memory clock (in MHz) for overclock and peak profiles. Not the effective data rate (multiplied by generation), but the actual clock. Static assignment avoids potential display flickering.
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 the default profiles
tuned_amdgpu_power_multi_oc Similar to tuned_amdgpu_power_multi_def, for overclock and peak profiles