host_vars | ||
inventories | ||
roles/tuned_amdgpu | ||
.gitignore | ||
ansible.cfg | ||
LICENSE | ||
playbook.yml | ||
power_max multi tab calculator.ods | ||
README.md |
tuned-amdgpu
Hacky solution to integrate AMDGPU power control and overclocking in
tuned
with Ansible.
TLDR: See my host_vars for an overview.
A host will have a collection of tuned
profiles.
For example: desktop
, balanced
, virt-host
This role extends those with AMD GPU power/clock/voltage control.
Each gets default
, overclock
, and peak
variations.
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 withtuned
- 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 this config file: /etc/tuned/amdgpu-profile-vars.conf
Here is a preview:
gpu_clock_min=500
gpu_clock_max=2715
gpumem_clock_static=1075
gpu_power_multi_def=0.869969040247678
gpu_power_multi_oc=1.0
gpu_mv_offset=+60
Changes will require switching tuned
profiles to re-read/apply the config.
One can use gamemode to do this automatically on start/stop.
Sample ~/.config/gamemode.ini
:
[custom]
start=tuned-adm profile latency-performance-amdgpu-overclock
end=tuned-adm profile latency-performance-amdgpu-default
Variables
These are the variables you'll want to change/consider.
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_def | Float between 0.0 and 1.0 ; controls power limit relative to the board capability. For 'default'-named power profiles. |
gpu_power_multi_oc | Similar to gpu_power_multi_def , for 'overclock'-named power profiles. |