From 933b8d24e5f6acf98e92e24de507da4093191962 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 15 Oct 2022 20:24:56 -0400 Subject: [PATCH 1/4] Add intel power management for FreeBSD. --- ansible/roles/cpu/files/aesni_loader.conf | 1 + ansible/roles/cpu/files/cpuctl_loader.conf | 1 + ansible/roles/cpu/files/powerdxxrc.conf | 2 ++ ansible/roles/cpu/tasks/freebsd_intel.yaml | 28 ++++++++++++++++++++++ 4 files changed, 32 insertions(+) create mode 100644 ansible/roles/cpu/files/aesni_loader.conf create mode 100644 ansible/roles/cpu/files/cpuctl_loader.conf create mode 100644 ansible/roles/cpu/files/powerdxxrc.conf diff --git a/ansible/roles/cpu/files/aesni_loader.conf b/ansible/roles/cpu/files/aesni_loader.conf new file mode 100644 index 0000000..9a33c93 --- /dev/null +++ b/ansible/roles/cpu/files/aesni_loader.conf @@ -0,0 +1 @@ +aesni_load="YES" diff --git a/ansible/roles/cpu/files/cpuctl_loader.conf b/ansible/roles/cpu/files/cpuctl_loader.conf new file mode 100644 index 0000000..7fb2279 --- /dev/null +++ b/ansible/roles/cpu/files/cpuctl_loader.conf @@ -0,0 +1 @@ +cpuctl_load="YES" diff --git a/ansible/roles/cpu/files/powerdxxrc.conf b/ansible/roles/cpu/files/powerdxxrc.conf new file mode 100644 index 0000000..dd18785 --- /dev/null +++ b/ansible/roles/cpu/files/powerdxxrc.conf @@ -0,0 +1,2 @@ +powerdxx_enable=YES +powerdxx_flags="-n adaptive -a adaptive -b adaptive" diff --git a/ansible/roles/cpu/tasks/freebsd_intel.yaml b/ansible/roles/cpu/tasks/freebsd_intel.yaml index e47cbcb..9fdc73e 100644 --- a/ansible/roles/cpu/tasks/freebsd_intel.yaml +++ b/ansible/roles/cpu/tasks/freebsd_intel.yaml @@ -1,3 +1,10 @@ +- name: Install packages + package: + name: + - lscpu # need to kldload cpuctl + - powermon # need to kldload cpuctl + state: present + - name: Install loader.conf copy: src: "files/{{ item }}_loader.conf" @@ -7,6 +14,8 @@ group: wheel loop: - coretemp + - cpuctl + - aesni - name: Install Configuration copy: @@ -18,3 +27,22 @@ loop: - src: power_profile.conf dest: /etc/rc.conf.d/power_profile + +- name: Install packages + when: not hwpstate + package: + name: + - powerdxx + state: present + +- name: Install service configuration + when: not hwpstate + copy: + src: "files/{{ item.src }}" + dest: "{{ item.dest }}" + mode: 0644 + owner: root + group: wheel + with_items: + - src: powerdxxrc.conf + dest: /etc/rc.conf.d/powerdxx From ece2ac4920e6cdd723cd236919f738793a1b00a0 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 15 Oct 2022 20:26:07 -0400 Subject: [PATCH 2/4] Remove powerd. --- ansible/roles/base/files/homeserver_rc.conf | 2 +- ansible/roles/base/files/odofreebsd_rc.conf | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/ansible/roles/base/files/homeserver_rc.conf b/ansible/roles/base/files/homeserver_rc.conf index 0633277..4da2afc 100644 --- a/ansible/roles/base/files/homeserver_rc.conf +++ b/ansible/roles/base/files/homeserver_rc.conf @@ -4,6 +4,6 @@ sendmail_enable="NONE" hostname="computer" local_unbound_enable="YES" sshd_enable="YES" -powerd_enable="YES" +# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable dumpdev="NO" zfs_enable="YES" diff --git a/ansible/roles/base/files/odofreebsd_rc.conf b/ansible/roles/base/files/odofreebsd_rc.conf index 25fd6cf..476c16b 100644 --- a/ansible/roles/base/files/odofreebsd_rc.conf +++ b/ansible/roles/base/files/odofreebsd_rc.conf @@ -4,7 +4,6 @@ sendmail_enable="NONE" hostname="odo" local_unbound_enable="YES" sshd_enable="YES" -powerd_enable="YES" # Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable dumpdev="NO" zfs_enable="YES" From c45e4cc3fa66b914acbc2558b8bea3a86dd9c05c Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 15 Oct 2022 20:39:59 -0400 Subject: [PATCH 3/4] fix conditionals for hwpstate. --- ansible/environments/laptop/host_vars/odofreebsd | 1 + ansible/roles/cpu/tasks/freebsd_intel.yaml | 4 ++-- ansible/roles/ntp/handlers/main.yaml | 4 ---- ansible/roles/ntp/tasks/freebsd.yaml | 1 - 4 files changed, 3 insertions(+), 7 deletions(-) delete mode 100644 ansible/roles/ntp/handlers/main.yaml diff --git a/ansible/environments/laptop/host_vars/odofreebsd b/ansible/environments/laptop/host_vars/odofreebsd index a2e070a..07f9f49 100644 --- a/ansible/environments/laptop/host_vars/odofreebsd +++ b/ansible/environments/laptop/host_vars/odofreebsd @@ -11,3 +11,4 @@ network_rc: "odofreebsd_network.conf" rc_conf: "odofreebsd_rc.conf" loader_conf: "odofreebsd_loader.conf" cputype: "intel" +hwpstate: true diff --git a/ansible/roles/cpu/tasks/freebsd_intel.yaml b/ansible/roles/cpu/tasks/freebsd_intel.yaml index 9fdc73e..b3f7891 100644 --- a/ansible/roles/cpu/tasks/freebsd_intel.yaml +++ b/ansible/roles/cpu/tasks/freebsd_intel.yaml @@ -29,14 +29,14 @@ dest: /etc/rc.conf.d/power_profile - name: Install packages - when: not hwpstate + when: hwpstate is defined and not hwpstate package: name: - powerdxx state: present - name: Install service configuration - when: not hwpstate + when: hwpstate is defined and not hwpstate copy: src: "files/{{ item.src }}" dest: "{{ item.dest }}" diff --git a/ansible/roles/ntp/handlers/main.yaml b/ansible/roles/ntp/handlers/main.yaml deleted file mode 100644 index 6a4732d..0000000 --- a/ansible/roles/ntp/handlers/main.yaml +++ /dev/null @@ -1,4 +0,0 @@ -- name: restart ntpdate - service: - name: ntpdate - state: restarted diff --git a/ansible/roles/ntp/tasks/freebsd.yaml b/ansible/roles/ntp/tasks/freebsd.yaml index ac5b062..610f47f 100644 --- a/ansible/roles/ntp/tasks/freebsd.yaml +++ b/ansible/roles/ntp/tasks/freebsd.yaml @@ -1,5 +1,4 @@ - name: Install Configuration - notify: restart ntpdate copy: src: "files/{{ item.src }}" dest: "{{ item.dest }}" From f965a125e6e9f636eb529abfe3a2c51f8917655b Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 15 Oct 2022 20:54:58 -0400 Subject: [PATCH 4/4] Add support for speedshift (hardware p-states). --- .../environments/home/host_vars/homeserver | 1 + .../environments/laptop/host_vars/odofreebsd | 1 + ansible/roles/cpu/files/cpu_set_perf_perc | 14 ++++++++ .../cpu/files/percorespeedshift_loader.conf | 2 ++ ansible/roles/cpu/tasks/freebsd_intel.yaml | 32 +++++++++++++++++++ 5 files changed, 50 insertions(+) create mode 100644 ansible/roles/cpu/files/cpu_set_perf_perc create mode 100644 ansible/roles/cpu/files/percorespeedshift_loader.conf diff --git a/ansible/environments/home/host_vars/homeserver b/ansible/environments/home/host_vars/homeserver index f7829ae..e9f1645 100644 --- a/ansible/environments/home/host_vars/homeserver +++ b/ansible/environments/home/host_vars/homeserver @@ -11,3 +11,4 @@ network_rc: "homeserver_network.conf" rc_conf: "homeserver_rc.conf" loader_conf: "homeserver_loader.conf" cputype: "intel" +hwpstate: false diff --git a/ansible/environments/laptop/host_vars/odofreebsd b/ansible/environments/laptop/host_vars/odofreebsd index 07f9f49..cf80901 100644 --- a/ansible/environments/laptop/host_vars/odofreebsd +++ b/ansible/environments/laptop/host_vars/odofreebsd @@ -12,3 +12,4 @@ rc_conf: "odofreebsd_rc.conf" loader_conf: "odofreebsd_loader.conf" cputype: "intel" hwpstate: true +cores: 8 diff --git a/ansible/roles/cpu/files/cpu_set_perf_perc b/ansible/roles/cpu/files/cpu_set_perf_perc new file mode 100644 index 0000000..28ad2f9 --- /dev/null +++ b/ansible/roles/cpu/files/cpu_set_perf_perc @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +# +# Tell speedshift 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 +epp=$((100 - perc)) + +sysctl -N dev.hwpstate_intel | grep -E 'dev.hwpstate_intel.[0-9]+.epp' | while read var; do + sysctl "$var=$epp" +done diff --git a/ansible/roles/cpu/files/percorespeedshift_loader.conf b/ansible/roles/cpu/files/percorespeedshift_loader.conf new file mode 100644 index 0000000..dd0645c --- /dev/null +++ b/ansible/roles/cpu/files/percorespeedshift_loader.conf @@ -0,0 +1,2 @@ +# Control each core individually +machdep.hwpstate_pkg_ctrl=0 diff --git a/ansible/roles/cpu/tasks/freebsd_intel.yaml b/ansible/roles/cpu/tasks/freebsd_intel.yaml index b3f7891..9b743c1 100644 --- a/ansible/roles/cpu/tasks/freebsd_intel.yaml +++ b/ansible/roles/cpu/tasks/freebsd_intel.yaml @@ -46,3 +46,35 @@ with_items: - src: powerdxxrc.conf dest: /etc/rc.conf.d/powerdxx + +- name: Favor energy efficiency for Speed Shift + when: hwpstate is defined and hwpstate and cores is defined + sysctl: + name: "dev.hwpstate_intel.{{ item }}.epp" + value: 100 + state: present + sysctl_file: "/etc/sysctl.conf.local" + loop: "{{ range(0, cores, 1)|list }}" + +- 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 + dest: /usr/local/bin/cpu_set_perf_perc + +- name: Install loader.conf + when: hwpstate is defined and hwpstate + copy: + src: "files/{{ item }}_loader.conf" + dest: "/boot/loader.conf.d/{{ item }}.conf" + mode: 0644 + owner: root + group: wheel + loop: + - percorespeedshift