From 1b760f751e0293b3e8961012d947cf1caf328e26 Mon Sep 17 00:00:00 2001 From: Alexander Stefanov Date: Wed, 13 Sep 2023 20:11:14 +0000 Subject: [PATCH] cpupower now is a working tool drop cpupower.path --- cpupower-start.sh | 63 ++++++++++++++++++----------------------------- cpupower.config | 35 +++++++++++++++++++++----- cpupower.path | 9 ------- cpupower.service | 2 +- kernel.spec | 13 +++------- 5 files changed, 58 insertions(+), 64 deletions(-) delete mode 100644 cpupower.path diff --git a/cpupower-start.sh b/cpupower-start.sh index c478bd6..c7266f0 100644 --- a/cpupower-start.sh +++ b/cpupower-start.sh @@ -1,47 +1,32 @@ #!/bin/bash +# Copyright © 2012, Sébastien Luttringer +# SPDX-License-Identifier: GPL-2.0-or-later -# A wrapper for cpupower to set the appropriate governor for frequency -# scaling. Sets 'ondemand', 'powersave' or 'performance' if available -# (checks availablility in this order). -# The user can override this behaviour by specifying the governor in -# CPUPOWER_GOVERNOR variable. -# -# CPUPOWER_OTHER_ARGS can be used to provide additional arguments to -# cpupower. +declare -i fail=0 -AVAIL_FILE=/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors -USE_GOVERNOR="" +# parse frequency options +declare -a params=() +params+=(${governor:+-g $governor}) +params+=(${min_freq:+-d $min_freq}) +params+=(${max_freq:+-u $max_freq}) +params+=(${freq:+-f $freq}) -if ! test -e "${AVAIL_FILE}"; then - printf "CPU frequency scaling is not supported.\n" - exit 1 +# apply frequency options +if ((${#params[@]} > 0)); then + cpupower frequency-set "${params[@]}" >/dev/null || fail=1 fi -if test -n "${CPUPOWER_GOVERNOR}"; then - if grep "${CPUPOWER_GOVERNOR}" "${AVAIL_FILE}" >/dev/null 2>&1; then - USE_GOVERNOR="${CPUPOWER_GOVERNOR}" - else - printf "Unknown governor: ${CPUPOWER_GOVERNOR}.\n" - printf "Available governors: " - cat "${AVAIL_FILE}" - printf "\n" - exit 1 - fi -elif grep "ondemand" "${AVAIL_FILE}" >/dev/null 2>&1; then - USE_GOVERNOR=ondemand -elif grep "powersave" "${AVAIL_FILE}" >/dev/null 2>&1; then - USE_GOVERNOR=powersave -elif grep "performance" "${AVAIL_FILE}" >/dev/null 2>&1; then - USE_GOVERNOR=performance -else - printf "Failed to select the governor automatically, " - printf "please specify it explicitly in CPUPOWER_GOVERNOR variable.\n" - printf "Available governors: " - cat "${AVAIL_FILE}" - printf "\n" - exit 1 +# parse cpu options +declare -a params=() +params+=(${mc_scheduler:+-m $mc_scheduler}) +params+=(${smp_scheduler:+-s $smp_scheduler}) +params+=(${perf_bias:+-b $perf_bias}) + +# apply cpu options +if ((${#params[@]} > 0)); then + cpupower set "${params[@]}" >/dev/null || fail=1 fi -# Set the governor at last. -printf "Using \"${USE_GOVERNOR}\" governor.\n" -/usr/bin/cpupower frequency-set -g ${USE_GOVERNOR} ${CPUPOWER_OTHER_ARGS} +exit $fail + +# vim:set ts=2 sw=2 ft=sh et: diff --git a/cpupower.config b/cpupower.config index 91f2d54..63b8aa2 100644 --- a/cpupower.config +++ b/cpupower.config @@ -1,7 +1,30 @@ -# If you would like to use a particular CPU frequency scaling governor -# rather than the default one, specify it here. -# CPUPOWER_GOVERNOR= +# Define CPUs governor +# valid governors: ondemand, performance, powersave, conservative, userspace. +# governor='powersave' -# Other command-line arguments to cpupower. -# See 'cpupower help' and cpupower(1) for more info. -# CPUPOWER_OTHER_ARGS= +# Limit frequency range +# Valid suffixes: Hz, kHz (default), MHz, GHz, THz +# do not set ondemand if you use this +# min_freq="2.25GHz" +# max_freq="3.25GHz" + +# Specific frequency to be set. +# Requires userspace governor to be available. +# Do not set governor field if you use this one. +# freq= + +# Utilizes cores in one processor package/socket first before processes are +# scheduled to other processor packages/sockets. +# See man (1) CPUPOWER-SET for additional details. +# mc_scheduler= + +# Utilizes thread siblings of one processor core first before processes are +# scheduled to other cores. See man (1) CPUPOWER-SET for additional details. +# smp_scheduler= + +# Sets a register on supported Intel processore which allows software to convey +# its policy for the relative importance of performance versus energy savings to +# the processor. See man (1) CPUPOWER-SET for additional details. +# perf_bias= + +# vim:set ts=2 sw=2 ft=sh et: diff --git a/cpupower.path b/cpupower.path deleted file mode 100644 index 26e11d3..0000000 --- a/cpupower.path +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=cpupower - wait for the list of frequency governors -After=syslog.target - -[Path] -PathExists=/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors - -[Install] -WantedBy=multi-user.target diff --git a/cpupower.service b/cpupower.service index 9a8aa5c..df5f0ec 100644 --- a/cpupower.service +++ b/cpupower.service @@ -2,6 +2,7 @@ Description=Configure CPU frequency settings After=syslog.target ConditionPathExists=/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors +ConditionVirtualization=!container [Service] Type=oneshot @@ -11,4 +12,3 @@ ExecStart=/usr/bin/cpupower-start.sh [Install] WantedBy=multi-user.target -Also=cpupower.path diff --git a/kernel.spec b/kernel.spec index e1392b7..3c8867b 100644 --- a/kernel.spec +++ b/kernel.spec @@ -298,7 +298,6 @@ Source114: kernel-riscv64.config Source50: cpupower.service Source51: cpupower.config Source52: cpupower-start.sh -Source53: cpupower.path Source80: kernel.rpmlintrc @@ -791,16 +790,14 @@ The cpupower tools. %post -n cpupower if [ $1 -ge 0 ]; then -# Do not enable/disable cpupower.service directly, because it should start -# when cpupower.path triggers it. - /bin/systemctl enable cpupower.path >/dev/null 2>&1 || : - /bin/systemctl start cpupower.path >/dev/null 2>&1 || : + /bin/systemctl enable cpupower.service >/dev/null 2>&1 || : + /bin/systemctl start cpupower.service >/dev/null 2>&1 || : fi %preun -n cpupower if [ $1 -eq 0 ]; then - /bin/systemctl --no-reload disable cpupower.path > /dev/null 2>&1 || : - /bin/systemctl stop cpupower.path > /dev/null 2>&1 || : + /bin/systemctl --no-reload disable cpupower.service > /dev/null 2>&1 || : + /bin/systemctl stop cpupower.service > /dev/null 2>&1 || : fi %files -n cpupower -f cpupower.lang @@ -810,7 +807,6 @@ fi %{_libdir}/libcpupower.so.0 %{_libdir}/libcpupower.so.0.0.1 %{_unitdir}/cpupower.service -%{_unitdir}/cpupower.path %{_datadir}/bash-completion/completions/cpupower %{_mandir}/man[1-8]/cpupower* @@ -1798,7 +1794,6 @@ mv cpupower.lang ../ chmod 0755 %{buildroot}%{_libdir}/libcpupower.so* mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig install -m644 %{SOURCE50} %{buildroot}%{_unitdir}/cpupower.service -install -m644 %{SOURCE53} %{buildroot}%{_unitdir}/cpupower.path install -m644 %{SOURCE51} %{buildroot}%{_sysconfdir}/sysconfig/cpupower install -m755 %{SOURCE52} %{buildroot}%{_bindir}/cpupower-start.sh %endif