Compare commits

...

5 commits

5 changed files with 50 additions and 46 deletions

View file

@ -1,2 +1,4 @@
[defaults]
nocows=True
nocows = True
stdout_callback = yaml
retry_files_enabled = False

41
host_vars/localhost.yml Normal file
View file

@ -0,0 +1,41 @@
---
# note: 'gpu_*' vars only apply with the 'custom' suffixed profiles created by this tooling
# profiles based on the 'default' amdgpu power profile mode use default clocks
#
# the connected AMD GPU is automatically discovered - assumes one
# on swap to other AMD cards to avoid instability:
# 'rm -rfv /etc/tuned/*amdgpu*'
#
# default 500, for best performance: near maximum. applies with 'overclock' tuned profile
gpu_clock_min: "500"
# gpu_clock_max: "2675" # default somewhere around 2529 to 2660.
gpu_clock_max: "2750"
gpumem_clock_static: "1075"
gpu_power_multi:
default: 0.869969040247678 # 281W - real default
# overclock: 0.928792569659443 # 300W - slight boost
overclock: 1.0 # 323W - full board capability
# optional, applies offset (+/-) to GPU voltage by provided mV
# only counts for peak and overlock profiles
# gpu_mv_offset: "-20"
gpu_mv_offset: "+125" # add 125mV or 0.125V
# gpu_mv_offset: "+50" # add 50mV or 0.05V
# gpu_mv_offset: "+75" # add 75mV or 0.075V
# '-50' undervolts GPU core voltage 50mV or 0.05V; untested - here be dragons/instability
# optional kernel parameters to set as well
sysctl: # quote ints/cast to string to avoid surprises
kernel.dmesg_restrict: '0' # allow regular users to see the kernel ring buffer
net.core.default_qdisc: fq # congestion control
net.ipv4.tcp_congestion_control: bbr2 # cong. control part 2
net.core.rmem_max: '33554432'
net.core.wmem_max: '33554432'
dev.raid.speed_limit_min: '2000000'
dev.raid.speed_limit_max: '6000000'
vm.compaction_proactiveness: '30' # improve THP allocation latency, compact in background
vm.page_lock_unfairness: '1' # make page lock theft slightly more fair
vm.max_map_count: '1048576' # allow some games to run (eg: DayZ)

View file

@ -1,5 +1,5 @@
---
lab:
hosts:
localhost:
workstation:
ansible_connection: local

View file

@ -5,26 +5,6 @@
# 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
- role: tuned_amdgpu
# note: 'gpu_*' vars only apply with the 'custom' suffixed profiles created by this tooling
# profiles based on the 'default' amdgpu power profile mode use default clocks
#
# the connected AMD GPU is automatically discovered - assumes one
# on swap to other AMD cards to avoid instability:
# 'rm -rfv /etc/tuned/*amdgpu*'
gpu_clock_min: "750" # default 500, for best performance: near maximum. applies with 'overclock' tuned profile
gpu_clock_max: "2675" # default somewhere around 2529 to 2660
gpumem_clock_static: "1075"
gpu_power_multi:
default: 0.869969040247678 # 281W - real default
overclock: 0.928792569659443 # 300W - slight boost
# overclock: 1.0 # 323W - full board capability
# optional, applies offset (+/-) to GPU voltage by provided mV
# gpu_mv_offset: "-25"
# gpu_mv_offset: "+50" # add 50mV or 0.05V
gpu_mv_offset: "+25" # add 25mV or 0.025V
# '-50' undervolts GPU core voltage 50mV or 0.05V
# mostly untested, there be dragons/instability
#
# list of source tuned profiles available on Fedora (TODO: should dynamically discover)
base_profiles:
- balanced

View file

@ -2,35 +2,16 @@
include={{ item.1 }}
summary={{ item.1 }} + TCP/RAID tweaks + AMDGPU {{ item.0 }}
{% if sysctl is defined %}
[sysctl]
# allow regular users to see the kernel ring buffer
kernel.dmesg_restrict=0
net.core.default_qdisc=fq
# 'bbr2' requires a [modified] supporting kernel - stock Fedora kernels do *not* support it (currently)
# eg: 'kernel-xanmode-edge' from COPR 'rmnscnce/kernel-xanmod'
net.ipv4.tcp_congestion_control=bbr2
net.core.rmem_max=33554432
net.core.wmem_max=33554432
dev.raid.speed_limit_min=1000000
dev.raid.speed_limit_max=6000000
# improve THP allocation latency, compact in background
vm.compaction_proactiveness=30
# make page lock theft slightly more fair
vm.page_lock_unfairness=1
# allow some games to run (eg: DayZ)
vm.max_map_count=1048576
{% for _sysctl, value in sysctl.items() %}
{{ _sysctl }}={{ value }}
{% endfor %}
{% endif %}
# reference/execute AMDGPU control script
# used because some sysfs interfaces are transactional
# cannot be set by a single param in 'tuned'/[sysfs]
[gpuclockscript]
type=script
script=${i:PROFILE_DIR}/amdgpu-clock.sh
# for SSDs with no RPM, set no IO scheduler
[ssdnosched]
type=disk
devices_udev_regex=(ID_ATA_ROTATION_RATE_RPM=0)
# elevator=none
elevator=kyber
# elevator=mq-deadline