Add kernel-tools to optimize CPU clock (cpupower.service)

(cherry picked from commit bf0795b47b)
This commit is contained in:
Koichiro Iwao 2024-06-20 08:01:56 +00:00
parent 8cd3985781
commit e3e97252c7
4 changed files with 188 additions and 2 deletions

3
SOURCES/cpupower.config Normal file
View File

@ -0,0 +1,3 @@
# See 'cpupower help' and cpupower(1) for more info
CPUPOWER_START_OPTS="frequency-set -g ondemand"
CPUPOWER_STOP_OPTS="frequency-set -g powersave"

13
SOURCES/cpupower.service Normal file
View File

@ -0,0 +1,13 @@
[Unit]
Description=Configure CPU power related settings
After=syslog.target
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/sysconfig/cpupower
ExecStart=/usr/bin/cpupower $CPUPOWER_START_OPTS
ExecStop=/usr/bin/cpupower $CPUPOWER_STOP_OPTS
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,11 @@
/var/log/kvm_stat.csv {
size 10M
missingok
compress
maxage 30
rotate 5
nodateext
postrotate
/usr/bin/systemctl try-restart kvm_stat.service
endscript
}

View File

@ -11,7 +11,7 @@ ExclusiveArch: aarch64
%define local_version v8 %define local_version v8
%define bcmmodel 2711 %define bcmmodel 2711
%define extra_version 1 %define extra_version 2
# This originally implies Kernel 4.x for RPi 2 and is not appropriate now. # This originally implies Kernel 4.x for RPi 2 and is not appropriate now.
# Be careful to change this not to disturb the seamless package update. # Be careful to change this not to disturb the seamless package update.
@ -21,6 +21,13 @@ ExclusiveArch: aarch64
%define kversion 6.6 %define kversion 6.6
%define patchlevel 31 %define patchlevel 31
# standard kernel
%define with_up %{?_without_up: 0} %{?!_without_up: 1}
# tools
%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1}
# firmware
%define with_firmware %{?_without_firmware: 0} %{?!_without_firmware: 1}
Name: raspberrypi%{rpisuffix} Name: raspberrypi%{rpisuffix}
Version: %{kversion}.%{patchlevel} Version: %{kversion}.%{patchlevel}
Release: %{version_tag}.%{local_version}.%{extra_version}%{?dist} Release: %{version_tag}.%{local_version}.%{extra_version}%{?dist}
@ -32,6 +39,10 @@ Source0: https://github.com/raspberrypi/linux/archive/refs/tags/stable_%{
Source1: https://github.com/raspberrypi/firmware/archive/%{commit_firmware_long}.tar.gz Source1: https://github.com/raspberrypi/firmware/archive/%{commit_firmware_long}.tar.gz
Patch100: config_2711.patch Patch100: config_2711.patch
Patch101: config_2712.patch Patch101: config_2712.patch
# Sources for kernel-tools
Source2000: cpupower.service
Source2001: cpupower.config
Source2002: kvm_stat.logrotate
BuildRequires: kmod, patch, bash, coreutils, tar BuildRequires: kmod, patch, bash, coreutils, tar
BuildRequires: bzip2, xz, findutils, gzip, m4, perl, perl-Carp, make, diffutils, gawk BuildRequires: bzip2, xz, findutils, gzip, m4, perl, perl-Carp, make, diffutils, gawk
@ -41,6 +52,10 @@ BuildRequires: elfutils-devel zlib-devel binutils-devel newt-devel python3-devel
BuildRequires: audit-libs-devel BuildRequires: audit-libs-devel
BuildRequires: pciutils-devel gettext ncurses-devel BuildRequires: pciutils-devel gettext ncurses-devel
BuildRequires: openssl-devel BuildRequires: openssl-devel
%if %{with_tools}
# kernel-tools
BuildRequires: asciidoc
%endif
%description %description
Specific kernel and bootcode for Raspberry Pi Specific kernel and bootcode for Raspberry Pi
@ -74,7 +89,42 @@ Requires: perl-interpreter
This package provides kernel headers and makefiles sufficient to build modules This package provides kernel headers and makefiles sufficient to build modules
against the kernel package. against the kernel package.
%if %{with_tools}
%package kernel%{?ksuffix}-tools
Summary: Assortment of tools for the Linux kernel
Provides: cpupowerutils = 1:009-0.6.p1
Obsoletes: cpupowerutils < 1:009-0.6.p1
Provides: cpufreq-utils = 1:009-0.6.p1
Provides: cpufrequtils = 1:009-0.6.p1
Obsoletes: cpufreq-utils < 1:009-0.6.p1
Obsoletes: cpufrequtils < 1:009-0.6.p1
Obsoletes: cpuspeed < 1:1.5-16
Requires: kernel-tools-libs = %{version}-%{release}
%define __requires_exclude ^%{_bindir}/python
%description kernel%{?ksuffix}-tools
This package contains the tools/ directory from the kernel source
and the supporting documentation.
%package kernel%{?ksuffix}-tools-libs
Summary: Libraries for the kernels-tools
Provides: kernel-tools-libs
%description kernel%{?ksuffix}-tools-libs
This package contains the libraries built from the tools/ directory
from the kernel source.
%package kernel%{?ksuffix}-tools-libs-devel
Summary: Assortment of tools for the Linux kernel
Requires: kernel%{?ksuffix}-tools = %{version}-%{release}
Provides: cpupowerutils-devel = 1:009-0.6.p1
Obsoletes: cpupowerutils-devel < 1:009-0.6.p1
Requires: kernel-tools-libs = %{version}-%{release}
Provides: kernel-tools-libs-devel
%description kernel%{?ksuffix}-tools-libs-devel
This package contains the development files for the tools/ directory from
the kernel source.
%endif
%if %{with_firmware}
%package firmware %package firmware
Summary: GPU firmware for the Raspberry Pi computer Summary: GPU firmware for the Raspberry Pi computer
License: Redistributable, with restrictions; see LICENSE.broadcom License: Redistributable, with restrictions; see LICENSE.broadcom
@ -86,7 +136,7 @@ Provides: grubby=8.40-10
%description firmware %description firmware
This package contains the GPU firmware for the Raspberry Pi BCM2835 SOC This package contains the GPU firmware for the Raspberry Pi BCM2835 SOC
including the kernel bootloader. including the kernel bootloader.
%endif
%prep %prep
%setup -q -n linux-stable_%{version_tag} %setup -q -n linux-stable_%{version_tag}
@ -112,9 +162,29 @@ pathfix.py -pni "%{__python3} %{py3_shbang_opts}" tools/ tools/perf/scripts/pyth
# to support both RPi 4 and 5. # to support both RPi 4 and 5.
export KERNEL=kernel%{armtarget} export KERNEL=kernel%{armtarget}
make bcm%{bcmmodel}_defconfig make bcm%{bcmmodel}_defconfig
%if %{with_up}
make %{?_smp_mflags} HOSTCFLAGS="%{?build_cflags}" HOSTLDFLAGS="%{?build_ldflags}" %{build_image} modules dtbs make %{?_smp_mflags} HOSTCFLAGS="%{?build_cflags}" HOSTLDFLAGS="%{?build_ldflags}" %{build_image} modules dtbs
%endif
# kernel-tools
%if %{with_tools}
make %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false DEBUG=false
pushd tools/thermal/tmon/
make %{?_smp_mflags} HOSTCFLAGS="%{?build_cflags}" HOSTLDFLAGS="%{?build_ldflags}"
popd
pushd tools/iio/
make %{?_smp_mflags} HOSTCFLAGS="%{?build_cflags}" HOSTLDFLAGS="%{?build_ldflags}"
popd
pushd tools/gpio/
make %{?_smp_mflags} HOSTCFLAGS="%{?build_cflags}" HOSTLDFLAGS="%{?build_ldflags}"
popd
pushd tools/mm/
make %{?_smp_mflags} HOSTCFLAGS="%{?build_cflags}" HOSTLDFLAGS="%{?build_ldflags}" slabinfo page_owner_sort
popd
%endif
%install %install
%if %{with_up}
# kernel # kernel
mkdir -p %{buildroot}/boot/overlays/ mkdir -p %{buildroot}/boot/overlays/
mkdir -p %{buildroot}/usr/share/%{name}-kernel/%{version}-%{release}/boot/overlays mkdir -p %{buildroot}/usr/share/%{name}-kernel/%{version}-%{release}/boot/overlays
@ -172,6 +242,9 @@ touch -r %{buildroot}$DevelDir/Makefile %{buildroot}$DevelDir/include/linux/vers
ln -T -s $DevelDir %{buildroot}/lib/modules/%{version}-%{release}/build --force ln -T -s $DevelDir %{buildroot}/lib/modules/%{version}-%{release}/build --force
ln -T -s build %{buildroot}/lib/modules/%{version}-%{release}/source --force ln -T -s build %{buildroot}/lib/modules/%{version}-%{release}/source --force
%endif
%if %{with_firmware}
# firmware # firmware
# precompiled GPU firmware and bootloader # precompiled GPU firmware and bootloader
pushd %{buildroot} pushd %{buildroot}
@ -182,7 +255,55 @@ tar -xf %{_sourcedir}/%{commit_firmware_long}.tar.gz \
firmware-%{commit_firmware_long}/boot/bootcode.bin \ firmware-%{commit_firmware_long}/boot/bootcode.bin \
--strip-components=1 --strip-components=1
popd popd
%endif
%if %{with_tools}
# kernel-tools
make -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install
rm -f %{buildroot}%{_libdir}/*.{a,la}
%find_lang cpupower
install -D -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service
install -D -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower
pushd tools/thermal/tmon
make INSTALL_ROOT=%{buildroot} install
popd
pushd tools/iio
make DESTDIR=%{buildroot} install
popd
pushd tools/gpio
make DESTDIR=%{buildroot} install
popd
install -m644 -D %{SOURCE2002} %{buildroot}%{_sysconfdir}/logrotate.d/kvm_stat
pushd tools/kvm/kvm_stat
%{__make} INSTALL_ROOT=%{buildroot} install-tools
%{__make} INSTALL_ROOT=%{buildroot} install-man
install -m644 -D kvm_stat.service %{buildroot}%{_unitdir}/kvm_stat.service
popd
pushd tools/mm/
install -m755 slabinfo %{buildroot}%{_bindir}/slabinfo
install -m755 page_owner_sort %{buildroot}%{_bindir}/page_owner_sort
popd
%endif
%if %{with_tools}
%post kernel%{?ksuffix}-tools
%systemd_post cpupower.service
%preun kernel%{?ksuffix}-tools
%systemd_preun cpupower.service
%postun kernel%{?ksuffix}-tools
%systemd_postun cpupower.service
%post kernel%{?ksuffix}-tools-libs
/sbin/ldconfig
%postun kernel%{?ksuffix}-tools-libs
/sbin/ldconfig
%endif
%if %{with_up}
%files kernel%{?ksuffix} %files kernel%{?ksuffix}
%defattr(-,root,root,-) %defattr(-,root,root,-)
/lib/modules/%{version}-%{release} /lib/modules/%{version}-%{release}
@ -224,16 +345,54 @@ cp $(ls -1 /boot/config-kernel-*-*|sort -V|tail -1) /boot/config-kernel.inc
%files kernel%{?ksuffix}-devel %files kernel%{?ksuffix}-devel
%defattr(-,root,root) %defattr(-,root,root)
/usr/src/kernels/%{version}-%{release} /usr/src/kernels/%{version}-%{release}
%endif
%if %{with_tools}
%files kernel%{?ksuffix}-tools -f cpupower.lang
%{_bindir}/cpupower
%{_datadir}/bash-completion/completions/cpupower
%{_unitdir}/cpupower.service
%{_mandir}/man[1-8]/cpupower*
%config(noreplace) %{_sysconfdir}/sysconfig/cpupower
%{_bindir}/tmon
%{_bindir}/iio_event_monitor
%{_bindir}/iio_generic_buffer
%{_bindir}/lsiio
%{_bindir}/lsgpio
%{_bindir}/gpio-hammer
%{_bindir}/gpio-event-mon
%{_bindir}/gpio-watch
%{_mandir}/man1/kvm_stat*
%{_bindir}/kvm_stat
%{_unitdir}/kvm_stat.service
%config(noreplace) %{_sysconfdir}/logrotate.d/kvm_stat
%{_bindir}/page_owner_sort
%{_bindir}/slabinfo
%files kernel%{?ksuffix}-tools-libs
%{_libdir}/libcpupower.so.1
%{_libdir}/libcpupower.so.0.0.1
%files kernel%{?ksuffix}-tools-libs-devel
%{_libdir}/libcpupower.so
%{_includedir}/cpufreq.h
%{_includedir}/cpuidle.h
%{_includedir}/powercap.h
%endif
%if %{with_firmware}
%files firmware %files firmware
%defattr(-,root,root,-) %defattr(-,root,root,-)
/boot/bootcode.bin /boot/bootcode.bin
/boot/fixup* /boot/fixup*
/boot/start* /boot/start*
%doc /boot/LICENCE.broadcom %doc /boot/LICENCE.broadcom
%endif
%changelog %changelog
* Thu Jun 20 2024 Koichiro Iwao <meta@almalinux.org> - 6.6.31-20240529.v8.2
- Add kernel-tools to optimize CPU clock (cpupower.service)
* Mon Jun 10 2024 Koichiro Iwao <meta@almalinux.org> - 6.6.31-20240529.v8.1 * Mon Jun 10 2024 Koichiro Iwao <meta@almalinux.org> - 6.6.31-20240529.v8.1
- Update to v6.6.31 stable_20240529 - Update to v6.6.31 stable_20240529