From f27caaddc1637d00c983fda8b7e11513d20f9e7e Mon Sep 17 00:00:00 2001 From: Ian Leonard Date: Fri, 11 Oct 2019 22:07:51 +0000 Subject: [PATCH 1/3] systemd: use a cpufreq service to configure cpu governor Signed-off-by: Ian Leonard --- packages/sysutils/busybox/scripts/init | 9 --------- packages/sysutils/systemd/package.mk | 4 ++++ packages/sysutils/systemd/scripts/cpufreq | 17 +++++++++++++++++ .../sysutils/systemd/system.d/cpufreq.service | 11 +++++++++++ 4 files changed, 32 insertions(+), 9 deletions(-) create mode 100755 packages/sysutils/systemd/scripts/cpufreq create mode 100644 packages/sysutils/systemd/system.d/cpufreq.service diff --git a/packages/sysutils/busybox/scripts/init b/packages/sysutils/busybox/scripts/init index b3b99bb083..8bf37fb789 100755 --- a/packages/sysutils/busybox/scripts/init +++ b/packages/sysutils/busybox/scripts/init @@ -963,15 +963,6 @@ prepare_sysroot() { # hide kernel log messages on console echo '1 4 1 7' > /proc/sys/kernel/printk -# set ondemand up_threshold -if [ -e /sys/devices/system/cpu/cpufreq/ondemand/up_threshold ]; then - echo 50 > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold -else - for f in $(ls /sys/devices/system/cpu/cpufreq/policy*/ondemand/up_threshold 2>/dev/null) ; do - echo 50 > $f - done -fi - # run platform_init script if exists if [ -f "./platform_init" ]; then ./platform_init diff --git a/packages/sysutils/systemd/package.mk b/packages/sysutils/systemd/package.mk index 2a2c8c825f..77a6061699 100644 --- a/packages/sysutils/systemd/package.mk +++ b/packages/sysutils/systemd/package.mk @@ -206,6 +206,9 @@ post_makeinstall_target() { cp $PKG_DIR/scripts/userconfig-setup $INSTALL/usr/bin cp $PKG_DIR/scripts/usercache-setup $INSTALL/usr/bin + # use systemd to set cpufreq governor and tunables + find_file_path scripts/cpufreq && cp -PRv $FOUND_PATH $INSTALL/usr/bin + mkdir -p $INSTALL/usr/sbin cp $PKG_DIR/scripts/kernel-overlays-setup $INSTALL/usr/sbin @@ -268,4 +271,5 @@ post_install() { enable_service usercache.service enable_service kernel-overlays.service enable_service hwdb.service + enable_service cpufreq.service } diff --git a/packages/sysutils/systemd/scripts/cpufreq b/packages/sysutils/systemd/scripts/cpufreq new file mode 100755 index 0000000000..c39eb4e12f --- /dev/null +++ b/packages/sysutils/systemd/scripts/cpufreq @@ -0,0 +1,17 @@ +#!/bin/sh + +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2009-2015 Stephan Raue (stephan@openelec.tv) +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) + +SYS_CPUFREQ_GOV=$( cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor ) +SYS_CPUFREQ_DIR="/sys/devices/system/cpu/cpufreq" + +# Configure frequency scaling properties +if [ $SYS_CPUFREQ_GOV = "ondemand" ]; then + for policy in ${SYS_CPUFREQ_DIR}/ondemand ${SYS_CPUFREQ_DIR}/policy*/; do + if [ -e $policy/up_threshold ]; then + echo 50 > $policy/up_threshold + fi + done +fi diff --git a/packages/sysutils/systemd/system.d/cpufreq.service b/packages/sysutils/systemd/system.d/cpufreq.service new file mode 100644 index 0000000000..46c3cf0a6c --- /dev/null +++ b/packages/sysutils/systemd/system.d/cpufreq.service @@ -0,0 +1,11 @@ +[Unit] +Description=Set CPU frequency governor and its tunables +ConditionPathExists=/usr/bin/cpufreq + +[Service] +Type=oneshot +ExecStart=/usr/bin/cpufreq +RemainAfterExit=yes + +[Install] +WantedBy=basic.target From db6ebeedbfae465def604fbf2183eab3c7e75c0e Mon Sep 17 00:00:00 2001 From: Ian Leonard Date: Fri, 11 Oct 2019 21:01:22 +0000 Subject: [PATCH 2/3] rpi: use systemd for cpufreq tuning Signed-off-by: Ian Leonard --- projects/RPi/initramfs/platform_init | 13 ------------- projects/RPi/packages/systemd/scripts/cpufreq | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 13 deletions(-) delete mode 100755 projects/RPi/initramfs/platform_init create mode 100755 projects/RPi/packages/systemd/scripts/cpufreq diff --git a/projects/RPi/initramfs/platform_init b/projects/RPi/initramfs/platform_init deleted file mode 100755 index b44e1dcfd4..0000000000 --- a/projects/RPi/initramfs/platform_init +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2015 Stephan Raue (stephan@openelec.tv) - -# Enable io_is_busy for improved sdhost performance - essentially, equivalent of force_turbo=1 but for mmc -echo 1 > /sys/devices/system/cpu/cpufreq/ondemand/io_is_busy - -# Configure frequency scaling properties - should improve performance a little (turbo, in most cases) -echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor -echo 50 > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold -echo 100000 > /sys/devices/system/cpu/cpufreq/ondemand/sampling_rate -echo 50 > /sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor diff --git a/projects/RPi/packages/systemd/scripts/cpufreq b/projects/RPi/packages/systemd/scripts/cpufreq new file mode 100755 index 0000000000..8fb2b3976a --- /dev/null +++ b/projects/RPi/packages/systemd/scripts/cpufreq @@ -0,0 +1,18 @@ +#!/bin/sh + +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2009-2015 Stephan Raue (stephan@openelec.tv) +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) + +SYS_CPUFREQ_GOV=$( cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor ) +SYS_ONDEMAND_DIR="/sys/devices/system/cpu/cpufreq/ondemand/" + +# Configure frequency scaling properties +if [ "${SYS_CPUFREQ_GOV}" = "ondemand" ]; then + echo 1 > "${SYS_ONDEMAND_DIR}/io_is_busy" + echo 50 > "${SYS_ONDEMAND_DIR}/up_threshold" + echo 100000 > "${SYS_ONDEMAND_DIR}/sampling_rate" + echo 50 > "${SYS_ONDEMAND_DIR}/sampling_down_factor" +else + echo "cpufreq: settings not found for current cpu governor." | systemd-cat -p info +fi From 2118568348c61b2d7c15f4474ae55cf20438261a Mon Sep 17 00:00:00 2001 From: Ian Leonard Date: Sat, 12 Oct 2019 13:47:28 +0000 Subject: [PATCH 3/3] amlogic: add cpufreq tuning script Signed-off-by: Ian Leonard --- .../Amlogic/packages/systemd/scripts/cpufreq | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100755 projects/Amlogic/packages/systemd/scripts/cpufreq diff --git a/projects/Amlogic/packages/systemd/scripts/cpufreq b/projects/Amlogic/packages/systemd/scripts/cpufreq new file mode 100755 index 0000000000..8fb2b3976a --- /dev/null +++ b/projects/Amlogic/packages/systemd/scripts/cpufreq @@ -0,0 +1,18 @@ +#!/bin/sh + +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2009-2015 Stephan Raue (stephan@openelec.tv) +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) + +SYS_CPUFREQ_GOV=$( cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor ) +SYS_ONDEMAND_DIR="/sys/devices/system/cpu/cpufreq/ondemand/" + +# Configure frequency scaling properties +if [ "${SYS_CPUFREQ_GOV}" = "ondemand" ]; then + echo 1 > "${SYS_ONDEMAND_DIR}/io_is_busy" + echo 50 > "${SYS_ONDEMAND_DIR}/up_threshold" + echo 100000 > "${SYS_ONDEMAND_DIR}/sampling_rate" + echo 50 > "${SYS_ONDEMAND_DIR}/sampling_down_factor" +else + echo "cpufreq: settings not found for current cpu governor." | systemd-cat -p info +fi