tuned-amdgpu/README.md

77 lines
3.6 KiB
Markdown
Raw Normal View History

2021-10-13 01:14:30 +00:00
# tuned-amdgpu
2024-03-25 00:27:59 +00:00
Hacky solution to integrate AMDGPU power control and overclocking in
`tuned` with Ansible.
2024-03-25 00:27:59 +00:00
_TLDR:_ See [my host_vars](./host_vars/localhost.yml) for an overview.
2024-03-25 00:27:59 +00:00
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:
2023-06-03 22:40:20 +00:00
```bash
~ $ grep -ls ^connected /sys/class/drm/*/status | grep -o card[0-9] | sort | uniq | sort -h | tail -1
card1
```
2024-03-25 00:27:59 +00:00
_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
2023-07-08 04:54:20 +00:00
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 |
2022-08-03 07:18:22 +00:00
|:---|---|
| `balanced-amdgpu-default` | Includes the (assumed) existing `balanced` tuned profile.<br/><br/>Only adjusts the GPU power limit (typically lower). Clocks/voltage curve remain the default. |
| `desktop-amdgpu-overclock` | Includes the (assumed) existing `desktop` tuned profile.<br/><br/>Adjusts the GPU power limit, clocks, _and_ the voltage curve. |
2023-07-08 04:50:28 +00:00
| `desktop-amdgpu-peak` | Includes the (assumed) existing `desktop` tuned profile.<br/><br/>Same as the `overclock` profile, but locks clocks to their highest configured values |
2022-08-03 06:11:02 +00:00
## Config
2022-08-03 08:05:18 +00:00
2024-08-05 13:34:59 +00:00
The playbook will render/make effective this config file: `/etc/tuned/amdgpu-profile-vars.conf`
Here is a preview:
```ini
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
```
2024-08-05 13:34:59 +00:00
Changes outside of _Ansible_ are not immediately effective. Switching `tuned` profiles or restarting the service would be required.
2024-08-05 13:34:59 +00:00
One can use `gamemode` for dynamic switching. Sample `~/.config/gamemode.ini` below:
```ini
[custom]
start=tuned-adm profile latency-performance-amdgpu-overclock
end=tuned-adm profile latency-performance-amdgpu-default
```
See this [Arch Wiki](https://wiki.archlinux.org/title/Gamemode) link for more comprehensive information.
## Variables
These are the variables you'll want to change/consider.
2022-08-03 08:05:18 +00:00
| Variable | Description |
|------------------------|---------------------------------------------------------------------------------------|
2024-08-05 13:17:46 +00:00
| gpu_clock_min | Sets the min (dynamic) GPU clock (in `Mhz`) for the non-default `amdgpu` profiles |
| gpu_clock_max | Sets the max (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_ would be a multiple of _this_ depending on the type of VRAM.<br/><br/>To avoid flickering this is *not* allowed to change with load, only between `default` and `overclock`/`peak` profiles. |
| 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. |