AMDGPU power/clock control with custom 'tuned' profiles
Find a file
2024-03-24 19:18:00 -05:00
host_vars handle sysctl tunable dict 2024-03-24 18:55:50 -05:00
inventories inv: localhost/workstation (map host_vars) 2024-03-24 18:30:15 -05:00
roles/tuned_amdgpu role: template common script, for header comment 2024-03-24 19:18:00 -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 vars: move to host_vars 2024-03-24 18:28:38 -05:00
power_max multi tab calculator.ods update spreadsheet w/ my card multis 2023-06-05 01:00:36 -05:00
README.md clean up table, remove duplication of maybe-current values 2023-07-08 00:02:36 -05:00

tuned-amdgpu

Hacky solution to integrate AMDGPU power control and overclocking in tuned with Ansible

Takes a list of existing tuned profiles and creates new ones based on them. These new profiles include AMDGPU power/clock parameters

An attempt is made to discover the active GPU using the 'connected' state in the DRM subsystem, example:

~ $ grep -ls ^connected /sys/class/drm/*/status | grep -o card[0-9] | sort | uniq | sort -h | tail -1
card1

Warning: This is only tested with RX6000 series GPUs, it is probable that other generations will 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

Notable variables

These are the variables you're likely to want to change. They are defined in playbook.yml

Variable Description
gpu_clock_min Sets the minimum (dynamic) GPU clock (in Mhz) for the non-default amdgpu profiles
gpu_clock_max Sets the maximum (dynamic) GPU clock (in MHz) for the non-default amdgpu profiles
gpumem_clock_static Sets the static memory clock for the GPU (in MHz). This is not the effective data rate. That is a multiple of this depending on the type of VRAM.

To avoid flickering this does not change dynamically with load.
gpu_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)
base_profiles List of base tuned profiles to clone in the new AMDGPU profiles. Defaults based on Fedora
gpu_power_multi Dictionary with two keys, default and overclock. Expects two floats to set a power limit relative to the board capability. Example: 1.0 is full board capability, 0.5 is 50%.