tuned: discover base profiles dynamically
This commit is contained in:
parent
983d2339f2
commit
2d314fd691
3 changed files with 22 additions and 21 deletions
12
README.md
12
README.md
|
@ -3,15 +3,8 @@
|
||||||
Hacky solution to integrate AMDGPU power/clock control into `tuned` profiles
|
Hacky solution to integrate AMDGPU power/clock control into `tuned` profiles
|
||||||
with Ansible.
|
with Ansible.
|
||||||
|
|
||||||
Extends existing profiles, such as:
|
Provides three variations of the `tuned` profiles found in `/usr/lib/tuned`
|
||||||
|
using the [AMDGPU hwmon interfaces](https://docs.kernel.org/gpu/amdgpu/thermal.html):
|
||||||
- `balanced`
|
|
||||||
- `desktop`
|
|
||||||
- `latency-performance`
|
|
||||||
- `network-latency`
|
|
||||||
- `powersave`, and so on
|
|
||||||
|
|
||||||
Creating three variations of each, using the [AMDGPU hwmon interfaces](https://docs.kernel.org/gpu/amdgpu/thermal.html):
|
|
||||||
|
|
||||||
- `default`: the out-of-the-box configuration
|
- `default`: the out-of-the-box configuration
|
||||||
- `overclock`: the optimized card configuration. Includes all of the clock/voltage/power settings
|
- `overclock`: the optimized card configuration. Includes all of the clock/voltage/power settings
|
||||||
|
@ -71,6 +64,5 @@ These are the variables you'll want to change/consider.
|
||||||
| gpu_clock_max | Sets the max (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. |
|
| 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`)_ |
|
| 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_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. |
|
| gpu_power_multi_oc | Similar to `gpu_power_multi_def`, for _'overclock'_-named power profiles. |
|
||||||
|
|
13
playbook.yml
13
playbook.yml
|
@ -1,16 +1,7 @@
|
||||||
---
|
---
|
||||||
- hosts: localhost
|
- name: "Configure 'tuned' with AMD GPU control"
|
||||||
name: "Configure 'tuned' with AMD GPU control"
|
hosts: localhost
|
||||||
roles:
|
roles:
|
||||||
# role prepares/modifies 'tuned' with AMD GPU power/clock parameters
|
# role prepares/modifies 'tuned' with AMD GPU power/clock parameters
|
||||||
# creates a new tuned profile made for each permutation of (base) 'tuned' profile + AMD powerplay profile
|
# creates a new tuned profile made for each permutation of (base) 'tuned' profile + AMD powerplay profile
|
||||||
- role: tuned_amdgpu
|
- role: tuned_amdgpu
|
||||||
# list of source tuned profiles available on Fedora (TODO: should dynamically discover)
|
|
||||||
base_profiles:
|
|
||||||
- balanced
|
|
||||||
- desktop
|
|
||||||
- latency-performance
|
|
||||||
- network-latency
|
|
||||||
- network-throughput
|
|
||||||
- powersave
|
|
||||||
- virtual-host
|
|
||||||
|
|
|
@ -27,6 +27,24 @@
|
||||||
state: present
|
state: present
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
|
- name: Find bundled 'tuned' profiles
|
||||||
|
ansible.builtin.find:
|
||||||
|
paths:
|
||||||
|
- /usr/lib/tuned/ # this may change/benefit from var/defaults; packaging should generally prefer this path
|
||||||
|
patterns:
|
||||||
|
- 'tuned.conf'
|
||||||
|
recurse: true
|
||||||
|
register: tuned_bundled_configs
|
||||||
|
|
||||||
|
- name: Set fact with included profile names
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
base_profiles: "{{ base_profiles | default([]) + profile_name }}"
|
||||||
|
loop: "{{ tuned_bundled_configs.files }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ profile_name }}"
|
||||||
|
vars:
|
||||||
|
profile_name: "{{ [item.path | dirname | basename] }}"
|
||||||
|
|
||||||
- name: Ensure dynamic tuning is disabled
|
- name: Ensure dynamic tuning is disabled
|
||||||
ansible.builtin.lineinfile:
|
ansible.builtin.lineinfile:
|
||||||
path: /etc/tuned/tuned-main.conf
|
path: /etc/tuned/tuned-main.conf
|
||||||
|
|
Loading…
Reference in a new issue