From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.haj.ipfire.org (localhost [127.0.0.1]) by mail02.haj.ipfire.org (Postfix) with ESMTP id 4bm9C72QpFz30NY for ; Mon, 21 Jul 2025 19:17:39 +0000 (UTC) Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) client-signature RSA-PSS (4096 bits)) (Client CN "mail01.haj.ipfire.org", Issuer "R11" (verified OK)) by mail02.haj.ipfire.org (Postfix) with ESMTPS id 4bm9C368Lcz2xh0 for ; Mon, 21 Jul 2025 19:17:35 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail01.ipfire.org (Postfix) with ESMTPSA id 4bm9C23GYNzd8; Mon, 21 Jul 2025 19:17:34 +0000 (UTC) DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=ipfire.org; s=202003ed25519; t=1753125455; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PycwoTbAJyCkH7raI0UP78LlLRc0ogwiffz9FmPIyk0=; b=diBwE4aP1UN++oD4s/8OMKbq/2lR3R9a1C+doBRgrv7ibiId+6fhsGMGNyjW8fl1YgBzLp TPFH4z2QhF3c/cBA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ipfire.org; s=202003rsa; t=1753125455; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PycwoTbAJyCkH7raI0UP78LlLRc0ogwiffz9FmPIyk0=; b=QeayFiL6ZGMlxHx1td/D053Ragq50G6WQVqKhQSr7ZIibHn9kMuW/sNVpWSuekHp4NXROi nSTye4zqeoeEoF1Oqp+nDmGjs2RDuk75i60DmTrG9elSvrbt4+pR4KBNkFfYsR2iDqCcfH fdfHG2InMMXFScMmAJil00qxKG0nT80QVe/wdArZGt7Ig0Sv2ugTYybxnFdsc6QEtPfzxh RAI4NEF6vrrL3VD1u//ml1lNYSI8W/Uxb3o/mSsuWWWff4bFT5YfKlFqR7dYxUbZMg9z3g Sh+E7DT0uZ4v67CP6Ltbe/y82ro+PaKaAbannLOEwIh3Uzk8FueI+Uqf2sOAfw== From: "Jon Murphy" To: "Charles Brown" Subject: Re[2]: [PATCH 1/3] initscripts: Automatically enable CPU power saving features Cc: "IPFire: Development-List" , "Michael Tremer" Date: Mon, 21 Jul 2025 19:17:31 +0000 Message-Id: In-Reply-To: <49E27F13-2E7D-40C4-9C8D-5BB066BCFA85@ipfire.org> References: <20250717173032.3442618-1-michael.tremer@ipfire.org> <3bf7411d-ad0b-43af-97c8-ab70342d9a46@yahoo.com> <49E27F13-2E7D-40C4-9C8D-5BB066BCFA85@ipfire.org> Reply-To: "Jon Murphy" Precedence: list List-Id: List-Subscribe: , List-Unsubscribe: , List-Post: List-Help: Sender: Mail-Followup-To: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable I added a wiki page: Just curious about find_governor() ... how/where would the variable=20 "GOVERNOR" be getting configured? Charles - If/when you make a change, please add your changes to the=20 above Wiki page as an example. Jon ------ Original Message ------ >From "Michael Tremer" To "Charles Brown" Cc development@lists.ipfire.org Date 7/21/2025 4:10:56=E2=80=AFAM Subject Re: [PATCH 1/3] initscripts: Automatically enable CPU power=20 saving features >Hello Charles, > >Thanks for your question. > >The variable is by default not set. But at the top of the file, we optiona= lly load a configuration file. So if someone wants to hard-code a custom go= vernor (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 wrote: >> >> Just curious about find_governor() ... how/where would the variable "GO= VERNOR" 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 >>> --- >>> 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/root= files/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/root= files/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/rootf= iles/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 = # >>> +# = # >>> +# This program is free software: you can redistribute it and/or modif= y # >>> +# it under the terms of the GNU General Public License as published b= y # >>> +# 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 . # >>> +# = # >>> +#####################################################################= ########## >>> + >>> +. /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" ]; the= n >>> + driver=3D"$(>> + 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=3D"$(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 >> > >