Thank you Jon for creating the wiki page. I don’t think that people will generally have to change this. This is either if the default setting is causing crashes or for testing.
-Michael > On 21 Jul 2025, at 21:31, Charles Brown <[email protected]> wrote: > > Hi Jon, I am perfectly satisfied with Michael's default implementation in > src/initscripts/system/cpupower. > I see no personal need to override that in |/etc/sysconfig/cpupower.| > -cab > > On 7/21/2025 2:15 PM, [email protected] wrote: >> I added a wiki page: <https://www.ipfire.org/docs/pkgs/cpupower> >> >>>> Just curious about find_governor() ... how/where would the variable >>>> "GOVERNOR" be getting configured? >> >> Charles - If/when you make a change, please add your changes to the above >> Wiki page as an example. >> >> >> Jon >> >> >>> On Jul 21, 2025, at 4:10 AM, Michael Tremer <[email protected]> >>> wrote: >>> >>> Hello Charles, >>> >>> Thanks for your question. >>> >>> The variable is by default not set. But at the top of the file, we >>> optionally load a configuration file. So if someone wants to hard-code a >>> custom governor (even if it is just for testing), they can set the variable >>> in /etc/sysconfig/cpupower. >>> >>> -Michael >>> >>>> On 20 Jul 2025, at 15:05, Charles Brown <[email protected]> wrote: >>>> >>>> Just curious about find_governor() ... how/where would the variable >>>> "GOVERNOR" be getting configured? >>>> >>>> On 7/17/2025 12:30 PM, Michael Tremer wrote: >>>>> This is a cleaned up implementation of the script that was previously >>>>> packaged in the cpufrequtils package. >>>>> >>>>> Signed-off-by: Michael Tremer <[email protected]> >>>>> --- >>>>> config/rootfiles/common/aarch64/initscripts | 2 + >>>>> config/rootfiles/common/riscv64/initscripts | 2 + >>>>> config/rootfiles/common/x86_64/initscripts | 2 + >>>>> lfs/initscripts | 1 + >>>>> src/initscripts/system/cpupower | 89 +++++++++++++++++++++ >>>>> 5 files changed, 96 insertions(+) >>>>> create mode 100644 src/initscripts/system/cpupower >>>>> >>>>> diff --git a/config/rootfiles/common/aarch64/initscripts >>>>> b/config/rootfiles/common/aarch64/initscripts >>>>> index 1fd1f076f..fa43d4fe1 100644 >>>>> --- a/config/rootfiles/common/aarch64/initscripts >>>>> +++ b/config/rootfiles/common/aarch64/initscripts >>>>> @@ -18,6 +18,7 @@ etc/rc.d/init.d/collectd >>>>> etc/rc.d/init.d/connectd >>>>> etc/rc.d/init.d/conntrackd >>>>> etc/rc.d/init.d/console >>>>> +etc/rc.d/init.d/cpupower >>>>> etc/rc.d/init.d/dhcp >>>>> etc/rc.d/init.d/dhcrelay >>>>> etc/rc.d/init.d/fcron >>>>> @@ -183,6 +184,7 @@ etc/rc.d/rcsysinit.d/S42fsresize >>>>> etc/rc.d/rcsysinit.d/S43mounttmpfs >>>>> etc/rc.d/rcsysinit.d/S44smt >>>>> etc/rc.d/rcsysinit.d/S45udev_retry >>>>> +etc/rc.d/rcsysinit.d/S46cpupower >>>>> etc/rc.d/rcsysinit.d/S50cleanfs >>>>> etc/rc.d/rcsysinit.d/S60setclock >>>>> etc/rc.d/rcsysinit.d/S70console >>>>> diff --git a/config/rootfiles/common/riscv64/initscripts >>>>> b/config/rootfiles/common/riscv64/initscripts >>>>> index 694207257..a31359134 100644 >>>>> --- a/config/rootfiles/common/riscv64/initscripts >>>>> +++ b/config/rootfiles/common/riscv64/initscripts >>>>> @@ -18,6 +18,7 @@ etc/rc.d/init.d/collectd >>>>> etc/rc.d/init.d/connectd >>>>> etc/rc.d/init.d/conntrackd >>>>> etc/rc.d/init.d/console >>>>> +etc/rc.d/init.d/cpupower >>>>> etc/rc.d/init.d/dhcp >>>>> etc/rc.d/init.d/dhcrelay >>>>> etc/rc.d/init.d/fcron >>>>> @@ -182,6 +183,7 @@ etc/rc.d/rcsysinit.d/S42fsresize >>>>> etc/rc.d/rcsysinit.d/S43mounttmpfs >>>>> etc/rc.d/rcsysinit.d/S44smt >>>>> etc/rc.d/rcsysinit.d/S45udev_retry >>>>> +etc/rc.d/rcsysinit.d/S46cpupower >>>>> etc/rc.d/rcsysinit.d/S50cleanfs >>>>> etc/rc.d/rcsysinit.d/S60setclock >>>>> etc/rc.d/rcsysinit.d/S70console >>>>> diff --git a/config/rootfiles/common/x86_64/initscripts >>>>> b/config/rootfiles/common/x86_64/initscripts >>>>> index 694207257..a31359134 100644 >>>>> --- a/config/rootfiles/common/x86_64/initscripts >>>>> +++ b/config/rootfiles/common/x86_64/initscripts >>>>> @@ -18,6 +18,7 @@ etc/rc.d/init.d/collectd >>>>> etc/rc.d/init.d/connectd >>>>> etc/rc.d/init.d/conntrackd >>>>> etc/rc.d/init.d/console >>>>> +etc/rc.d/init.d/cpupower >>>>> etc/rc.d/init.d/dhcp >>>>> etc/rc.d/init.d/dhcrelay >>>>> etc/rc.d/init.d/fcron >>>>> @@ -182,6 +183,7 @@ etc/rc.d/rcsysinit.d/S42fsresize >>>>> etc/rc.d/rcsysinit.d/S43mounttmpfs >>>>> etc/rc.d/rcsysinit.d/S44smt >>>>> etc/rc.d/rcsysinit.d/S45udev_retry >>>>> +etc/rc.d/rcsysinit.d/S46cpupower >>>>> etc/rc.d/rcsysinit.d/S50cleanfs >>>>> etc/rc.d/rcsysinit.d/S60setclock >>>>> etc/rc.d/rcsysinit.d/S70console >>>>> diff --git a/lfs/initscripts b/lfs/initscripts >>>>> index 99fe2f1be..49215c0ae 100644 >>>>> --- a/lfs/initscripts >>>>> +++ b/lfs/initscripts >>>>> @@ -176,6 +176,7 @@ $(TARGET) : >>>>> ln -sf ../init.d/mounttmpfs /etc/rc.d/rcsysinit.d/S43mounttmpfs >>>>> ln -sf ../init.d/smt /etc/rc.d/rcsysinit.d/S44smt >>>>> ln -sf ../init.d/udev_retry /etc/rc.d/rcsysinit.d/S45udev_retry >>>>> + ln -sf ../init.d/cpupower /etc/rc.d/rcsysinit.d/S46cpupower >>>>> ln -sf ../init.d/cleanfs /etc/rc.d/rcsysinit.d/S50cleanfs >>>>> ln -sf ../init.d/setclock /etc/rc.d/rcsysinit.d/S60setclock >>>>> ln -sf ../init.d/console /etc/rc.d/rcsysinit.d/S70console >>>>> diff --git a/src/initscripts/system/cpupower >>>>> b/src/initscripts/system/cpupower >>>>> new file mode 100644 >>>>> index 000000000..82b62a89b >>>>> --- /dev/null >>>>> +++ b/src/initscripts/system/cpupower >>>>> @@ -0,0 +1,89 @@ >>>>> +#!/bin/sh >>>>> +############################################################################### >>>>> +# >>>>> # >>>>> +# IPFire.org - A linux based firewall >>>>> # >>>>> +# Copyright (C) 2025 IPFire Team <[email protected]> >>>>> # >>>>> +# >>>>> # >>>>> +# This program is free software: you can redistribute it and/or modify >>>>> # >>>>> +# it under the terms of the GNU General Public License as published by >>>>> # >>>>> +# the Free Software Foundation, either version 3 of the License, or >>>>> # >>>>> +# (at your option) any later version. >>>>> # >>>>> +# >>>>> # >>>>> +# This program is distributed in the hope that it will be useful, >>>>> # >>>>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of >>>>> # >>>>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >>>>> # >>>>> +# GNU General Public License for more details. >>>>> # >>>>> +# >>>>> # >>>>> +# You should have received a copy of the GNU General Public License >>>>> # >>>>> +# along with this program. If not, see <http://www.gnu.org/licenses/>. >>>>> # >>>>> +# >>>>> # >>>>> +############################################################################### >>>>> + >>>>> +. /etc/sysconfig/rc >>>>> +. ${rc_functions} >>>>> + >>>>> +# Load the configuration if it exists >>>>> +if [ -r "/etc/sysconfig/cpupower" ]; then >>>>> + . /etc/sysconfig/cpupower >>>>> +fi >>>>> + >>>>> +# This function returns which governor to use >>>>> +find_governor() { >>>>> + local driver >>>>> + >>>>> + # If a governor has been configured, we just use that one >>>>> + if [ -n "${GOVERNOR}" ]; then >>>>> + echo "${GOVERNOR}" >>>>> + return 0 >>>>> + fi >>>>> + >>>>> + # Determine the driver >>>>> + if [ -r "/sys/devices/system/cpu/cpu0/cpufreq/scaling_driver" ]; then >>>>> + driver="$(</sys/devices/system/cpu/cpu0/cpufreq/scaling_driver)" >>>>> + fi >>>>> + >>>>> + # Decide which governor to use based on the driver >>>>> + case "${driver}" in >>>>> + # If the driver could not be detected, we won't use anything >>>>> + "") >>>>> + ;; >>>>> + >>>>> + # Intel P-State only supports performace and powersave. The latter >>>>> + # is rather implemented like ondemand in other cases. >>>>> + intel_pstate) >>>>> + echo "powersave" >>>>> + ;; >>>>> + >>>>> + # For everything else use schedutil >>>>> + *) >>>>> + echo "schedutil" >>>>> + ;; >>>>> + esac >>>>> + >>>>> + return 0 >>>>> +} >>>>> + >>>>> +set_governor() { >>>>> + # Find the governor to use >>>>> + local governor="$(find_governor)" >>>>> + >>>>> + # If we could not detect a governor we don't have anything to do >>>>> + if [ -z "${governor}" ]; then >>>>> + return 0 >>>>> + fi >>>>> + >>>>> + # Set the governor >>>>> + cpupower frequency-set --governor "${governor}" >/dev/null >>>>> +} >>>>> + >>>>> +case "${1}" in >>>>> + start) >>>>> + boot_mesg "Enabling CPU Power Saving Features..." >>>>> + set_governor >>>>> + evaluate_retval >>>>> + ;; >>>>> + *) >>>>> + echo "Usage: ${0} {start}" >>>>> + exit 1 >>>>> + ;; >>>>> +esac >>>> >>> >>> >> >> Jon >> >> >> -- >> Jon Murphy >> [email protected] >> >
