diff --git a/ansible/roles/cpu/files/cpu_set_perf_perc_linux_amd b/ansible/roles/cpu/files/cpu_set_perf_perc_linux_amd new file mode 100644 index 0000000..1b38de7 --- /dev/null +++ b/ansible/roles/cpu/files/cpu_set_perf_perc_linux_amd @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# +# Tell hardware p-states whether to maximize CPU performance (100) or +# energy efficiency (0). +set -euo pipefail +IFS=$'\n\t' +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +perc=$1 + +if [ "$perc" -gt 80 ]; then + echo performance | tee /sys/firmware/acpi/platform_profile +elif [ "$perc" -ge 20 ]; then + echo balanced | tee /sys/firmware/acpi/platform_profile +else + echo low-power | tee /sys/firmware/acpi/platform_profile +fi + +if [ "$perc" -ge 80 ]; then + echo "performance" | tee /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference +elif [ "$perc" -ge 60 ]; then + echo "balance_performance" | tee /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference +elif [ "$perc" -ge 40 ]; then + echo "default" | tee /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference +elif [ "$perc" -ge 20 ]; then + echo "balance_power" | tee /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference +else + echo "power" | tee /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference +fi diff --git a/ansible/roles/cpu/files/cpu_set_perf_perc_linux b/ansible/roles/cpu/files/cpu_set_perf_perc_linux_intel similarity index 100% rename from ansible/roles/cpu/files/cpu_set_perf_perc_linux rename to ansible/roles/cpu/files/cpu_set_perf_perc_linux_intel diff --git a/ansible/roles/cpu/files/platform_profile_tmpfiles.conf b/ansible/roles/cpu/files/platform_profile_tmpfiles.conf new file mode 100644 index 0000000..326a808 --- /dev/null +++ b/ansible/roles/cpu/files/platform_profile_tmpfiles.conf @@ -0,0 +1,2 @@ +# Favor energy efficiency for platform profile (EC / system, not CPU) +w- /sys/firmware/acpi/platform_profile - - - - low-power diff --git a/ansible/roles/cpu/tasks/linux_amd.yaml b/ansible/roles/cpu/tasks/linux_amd.yaml index b521f5a..5305a6a 100644 --- a/ansible/roles/cpu/tasks/linux_amd.yaml +++ b/ansible/roles/cpu/tasks/linux_amd.yaml @@ -3,3 +3,38 @@ name: - powertop state: present + +- name: Favor energy efficiency for hardware p-states + when: hwpstate is defined and hwpstate and cores is defined + template: + src: "templates/{{ item.src }}.j2" + dest: "{{ item.dest }}" + mode: 0644 + owner: root + group: wheel + loop: + - src: energy_performance_preference.conf + dest: /etc/tmpfiles.d/energy_performance_preference.conf + +- name: Install tmpfiles.d configuration + when: hwpstate is defined and hwpstate and cores is defined + copy: + src: "files/{{ item }}_tmpfiles.conf" + dest: "/etc/tmpfiles.d/{{ item }}.conf" + mode: 0644 + owner: root + group: wheel + loop: + - platform_profile + +- name: Install scripts + when: hwpstate is defined and hwpstate + copy: + src: "files/{{ item.src }}" + dest: "{{ item.dest }}" + mode: 0755 + owner: root + group: wheel + loop: + - src: cpu_set_perf_perc_linux_amd + dest: /usr/local/bin/cpu_set_perf_perc diff --git a/ansible/roles/cpu/tasks/linux_intel.yaml b/ansible/roles/cpu/tasks/linux_intel.yaml index f49196c..03ec383 100644 --- a/ansible/roles/cpu/tasks/linux_intel.yaml +++ b/ansible/roles/cpu/tasks/linux_intel.yaml @@ -19,7 +19,7 @@ template: src: "templates/{{ item.src }}.j2" dest: "{{ item.dest }}" - mode: 0755 + mode: 0644 owner: root group: wheel loop: @@ -35,5 +35,5 @@ owner: root group: wheel loop: - - src: cpu_set_perf_perc_linux + - src: cpu_set_perf_perc_linux_intel dest: /usr/local/bin/cpu_set_perf_perc diff --git a/ansible/roles/cpu/templates/energy_performance_preference.conf.j2 b/ansible/roles/cpu/templates/energy_performance_preference.conf.j2 index b5a4239..bb97375 100644 --- a/ansible/roles/cpu/templates/energy_performance_preference.conf.j2 +++ b/ansible/roles/cpu/templates/energy_performance_preference.conf.j2 @@ -1,4 +1,4 @@ -# Favor energy efficiency for Speed Shift +# Favor energy efficiency for hardware p-states {% for core in range(0, cores, 1) %} w- /sys/devices/system/cpu/cpufreq/policy{{core}}/energy_performance_preference - - - - power {% endfor %}