From 01d3c1ee847818e27e9777e97420676ccdabdeea Mon Sep 17 00:00:00 2001 From: Adnan Hodzic Date: Tue, 31 Dec 2019 12:15:16 +0100 Subject: [PATCH] added cpufreqctl_deploy + added cpufreqctl script --- auto-cpufreq.py | 29 +- scripts/cpufreqctl.sh | 447 +++++++++++++++++++ daemon-deploy.sh => scripts/daemon-deploy.sh | 0 3 files changed, 469 insertions(+), 7 deletions(-) mode change 100644 => 100755 auto-cpufreq.py create mode 100755 scripts/cpufreqctl.sh rename daemon-deploy.sh => scripts/daemon-deploy.sh (100%) diff --git a/auto-cpufreq.py b/auto-cpufreq.py old mode 100644 new mode 100755 index 037787d..f7bd33f --- a/auto-cpufreq.py +++ b/auto-cpufreq.py @@ -21,17 +21,29 @@ import click # - go thru all other ToDo's # - copy cpufreqctl script if it doesn't exist # - write whole output to log, read live data from log +# - in case of daemon deploy check if it's already running/daemon script exists +# - put scripts in scripts dir # global var p = psutil s = subprocess tool_run = "python3 auto-cpufreq.py" -# deploy auto-cpufreq daemon scrip +def cpufreqctl_deploy(): + if os.path.isfile("/usr/bin/cpufreqctl"): + pass + else: + os.system("scripts/cpufreqctl.sh /usr/bin/cpufreqctl") + +# deploy auto-cpufreq daemon script def daemon_deploy(): - # ToDo: add check if file exists, skip - os.system('cp daemon-deploy.sh /usr/bin/auto-cpufreq') + if os.path.isfile("/usr/bin/auto-cpufreq"): + pass + else: + os.system("cp scripts/daemon-deploy.sh /usr/bin/auto-cpufreq") + + # ToDo: add auto-cpufreq to run on boot def footer(l): print("\n" + "-" * l + "\n") @@ -190,6 +202,7 @@ def cli(live, daemon): root_check() driver_check() gov_check() + cpufreqctl_deploy() sysinfo() autofreq() countdown(15) @@ -198,13 +211,15 @@ def cli(live, daemon): elif daemon: while True: print("daemon ...") - daemon_deploy() root_check() driver_check() gov_check() - sysinfo() - autofreq() - countdown(15) + cpufreqctl_deploy() + daemon_deploy() + #daemon_run() + #sysinfo() + #autofreq() + #countdown(15) else: print("remove ...") diff --git a/scripts/cpufreqctl.sh b/scripts/cpufreqctl.sh new file mode 100755 index 0000000..81c5453 --- /dev/null +++ b/scripts/cpufreqctl.sh @@ -0,0 +1,447 @@ +#!/usr/bin/env bash + +VERSION='20' +cpucount=`cat /proc/cpuinfo|grep processor|wc -l` +FLROOT=/sys/devices/system/cpu +DRIVER=auto +VERBOSE=0 + +## parse special options +for i in "$@" +do +case $i in + -v|--verbose) + VERBOSE=1 + shift + ;; + --set=*) + VALUE="${i#*=}" + shift + ;; + -c=*|--core=*) + CORE="${i#*=}" + shift + ;; + --available) + AVAILABLE=1 + shift + ;; + -*) + OPTION=$i + shift + ;; + *) # unknown + ;; +esac +done + +function help () { + echo "Package version: "$VERSION + echo "Usage:" + echo " cpufreqctl [OPTION[=VALUE]...]" + echo "" + echo " --help Show help options" + echo " --version Package version" + echo " --verbose, -v Verbose output" + echo "" + echo " --set=VALUE Set VALUE for selected option" + echo " --core=NUMBER Apply selected option just for the core NUMBER (0 ~ N - 1)" + echo " --available Get available values instand of default: current" + echo "" + echo " --driver Current processor driver" + echo " --governor Scaling governor's options" + echo " --frequency Frequency options" + echo " --on Turn on --core=NUMBER" + echo " --off Turn off --core=NUMBER" + echo " --frequency-min Minimal frequency options" + echo " --frequency-max Maximum frequency options" + echo " --boost Current cpu boost value" + echo "" + echo "intel_pstate options" + echo " --no-turbo Current no_turbo value" + echo " --min-perf Current min_perf_pct options" + echo " --max-perf Current max_perf_pct options" + echo "" + echo "Package options" + echo " --install Install extra components for all users" + echo " --uninstall Uninstall extra components for all users" + echo " --update-fonts Update font cache" + echo " --reset Reset to defaults for current user" + echo "" + echo "Events options" + echo " --throttle Get thermal throttle counter" + echo " --throttle-event Get kernel thermal throttle events counter" + echo " --irqbalance Get irqbalance presence" +} + +function info () { + echo "CPU driver: "`driver` + echo "Governors: "`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors` + echo "Frequencies: "`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies` + echo "" + echo "Usage:" + echo "## list scaling governors:" + echo "cpufreqctl --governor" + echo "" + echo "## Set all active cpu cores to the 'performance' scaling governor:" + echo "cpufreqctl --governor --set=performance" + echo "" + echo "## Set 'performance' scaling governor for the selected core:" + echo "cpufreqctl --governor --set=performance --core=0" + echo "" + echo "Use --help argument to see available options" +} + +verbose () { + if [ $VERBOSE = 1 ] + then + echo $1 + fi +} + +function driver () { + cat $FLROOT/cpu0/cpufreq/scaling_driver +} + +function set_driver () { + DRIVER=`driver` + case $DRIVER in + intel*|*pstate*) DRIVER=pstate;; + *)DRIVER=acpi;; + esac +} + +function get_governor () { + if [ -z $CORE ] + then + i=0 + ag='' + while [ $i -ne $cpucount ] + do + if [ $i = 0 ] + then + ag=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor` + else + ag=$ag' '`cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor` + fi + i=`expr $i + 1` + done + echo $ag + else + cat /sys/devices/system/cpu/cpu$CORE/cpufreq/scaling_governor + fi +} + +function set_governor () { + if [ -z $CORE ] + then + i=0 + while [ $i -ne $cpucount ] + do + FLNM="$FLROOT/cpu"$i"/cpufreq/scaling_governor" + echo $VALUE > $FLNM + i=`expr $i + 1` + done + else + echo $VALUE > /sys/devices/system/cpu/cpu$CORE/cpufreq/scaling_governor + fi +} + +function get_frequency () { + if [ -z $CORE ] + then + i=0 + V=0 + M=$(cat "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq") + while [ $i -ne $cpucount ] + do + V=$(cat "/sys/devices/system/cpu/cpu"$i"/cpufreq/scaling_cur_freq") + if [[ $V > $M ]] + then + M=$V + fi + i=`expr $i + 1` + done + echo "$M" + else + cat /sys/devices/system/cpu/cpu$CORE/cpufreq/scaling_cur_freq + fi +} + +function set_frequency () { + set_driver + if [ $DRIVER = 'pstate'] + then + echo "Unavaible function for intel_pstate" + return + fi + if [ -z $CORE ] + then + i=0 + while [ $i -ne $cpucount ] + do + FLNM="$FLROOT/cpu"$i"/cpufreq/scaling_setspeed" + echo $VALUE > $FLNM + i=`expr $i + 1` + done + else + echo $VALUE > /sys/devices/system/cpu/cpu$CORE/cpufreq/scaling_setspeed + fi +} + +function get_frequency_min () { + if [ -z $CORE ] + then + CORE=0 + fi + cat /sys/devices/system/cpu/cpu$CORE/cpufreq/scaling_min_freq +} + +function set_frequency_min () { + if [ -z $CORE ] + then + i=0 + while [ $i -ne $cpucount ] + do + FLNM="$FLROOT/cpu"$i"/cpufreq/scaling_min_freq" + echo $VALUE > $FLNM + i=`expr $i + 1` + done + else + echo $VALUE > /sys/devices/system/cpu/cpu$CORE/cpufreq/scaling_min_freq + fi +} + +function get_frequency_max () { + if [ -z $CORE ] + then + CORE=0 + fi + cat /sys/devices/system/cpu/cpu$CORE/cpufreq/scaling_max_freq +} + +function set_frequency_max () { + if [ -z $CORE ] + then + i=0 + while [ $i -ne $cpucount ] + do + FLNM="$FLROOT/cpu"$i"/cpufreq/scaling_max_freq" + echo $VALUE > $FLNM + i=`expr $i + 1` + done + else + echo $VALUE > /sys/devices/system/cpu/cpu$CORE/cpufreq/scaling_max_freq + fi +} + +if [ -z $OPTION ] # No options +then + info + exit +fi +if [ $OPTION = "--help" ] +then + help + exit +fi +if [ $OPTION = "--version" ] +then + echo $VERSION + exit +fi +if [ $OPTION = "--driver" ] +then + driver + exit +fi +if [ $OPTION = "--governor" ] +then + if [ ! -z $AVAILABLE ] + then + cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors + exit + fi + if [ -z $VALUE ] + then + verbose "Getting CPU"$CORE" governors" + get_governor + else + verbose "Setting CPU"$CORE" governors to "$VALUE + set_governor + fi + exit +fi +if [ $OPTION = "--frequency" ] +then + if [ ! -z $AVAILABLE ] + then + cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies + exit + fi + if [ -z $VALUE ] + then + verbose "Getting CPU"$CORE" frequency" + get_frequency + else + verbose "Setting CPU"$CORE" frequency to "$VALUE + set_frequency + fi + exit +fi +if [ $OPTION = "--no-turbo" ] +then + if [ -z $VALUE ] + then + verbose "Getting no_turbo value" + cat /sys/devices/system/cpu/intel_pstate/no_turbo + else + verbose "Setting no_turbo value "$VALUE + echo $VALUE > /sys/devices/system/cpu/intel_pstate/no_turbo + fi + exit +fi +if [ $OPTION = "--boost" ] +then + if [ -z $VALUE ] + then + verbose "Getting boost value" + cat /sys/devices/system/cpu/cpufreq/boost + else + verbose "Setting boost value "$VALUE + echo $VALUE > /sys/devices/system/cpu/cpufreq/boost + fi + exit +fi +if [ $OPTION = "--frequency-min" ] +then + if [ -z $VALUE ] + then + verbose "Getting CPU"$CORE" minimal frequency" + get_frequency_min + else + verbose "Setting CPU"$CORE" minimal frequency to "$VALUE + set_frequency_min + fi + exit +fi +if [ $OPTION = "--frequency-max" ] +then + if [ -z $VALUE ] + then + verbose "Getting CPU"$CORE" maximal frequency" + get_frequency_max + else + verbose "Setting CPU"$CORE" maximal frequency to "$VALUE + set_frequency_max + fi + exit +fi +if [ $OPTION = "--min-perf" ] +then + if [ -z $VALUE ] + then + verbose "Getting min_perf_pct value" + cat /sys/devices/system/cpu/intel_pstate/min_perf_pct + else + verbose "Setting min_perf_pct value "$VALUE + echo $VALUE > /sys/devices/system/cpu/intel_pstate/min_perf_pct + fi + exit +fi +if [ $OPTION = "--max-perf" ] +then + if [ -z $VALUE ] + then + verbose "Getting max_perf_pct value" + cat /sys/devices/system/cpu/intel_pstate/max_perf_pct + else + verbose "Setting max_perf_pct value "$VALUE + echo $VALUE > /sys/devices/system/cpu/intel_pstate/max_perf_pct + fi + exit +fi +if [ $OPTION = "--on" ] +then + if [ -z $CORE ] + then + verbose "Should be specify --core=NUMBER" + else + verbose "Power on CPU Core"$CORE + echo "1" > $FLROOT/cpu"$CORE"/online + fi + exit +fi +if [ $OPTION = "--off" ] +then + if [ -z $CORE ] + then + verbose "Should be specify --core=NUMBER" + else + verbose "Power off CPU Core"$CORE + echo "0" > $FLROOT/cpu"$CORE"/online + fi + exit +fi + +if [ $OPTION = "--throttle" ] +then + i=1 + V=0 + M=$(cat "/sys/devices/system/cpu/cpu0/thermal_throttle/core_throttle_count") + while [ $i -ne $cpucount ] + do + V=$(cat "/sys/devices/system/cpu/cpu"$i"/thermal_throttle/core_throttle_count") + M=`expr $M + $V` + i=`expr $i + 1` + done + echo "$M" + exit +fi +if [ $OPTION = "--throttle-events" ] +then + M=$(journalctl --dmesg --boot --since=yesterday | grep "cpu clock throttled" | wc -l) + echo "$M" + exit +fi +if [ $OPTION = "--irqbalance" ] +then + M=$(ps -A |grep irqbalance) + echo "$M" + exit +fi + +if [ $OPTION = "--install" ] +then + echo 'installing helpers...' + cp $0 /usr/bin/ + echo 'installing policy...' + cp $(dirname "$(readlink -f "$0")")/konkor.cpufreq.policy /usr/share/polkit-1/actions/ + echo 'installing fonts...' + mkdir -p /usr/share/fonts/truetype/cpufreq + cp $(dirname "$(readlink -f "$0")")/fonts/cpufreq.ttf /usr/share/fonts/truetype/cpufreq/ + echo "done" + exit +fi +if [ $OPTION = "--update-fonts" ] +then + fc-cache -f + exit +fi +if [ $OPTION = "--uninstall" ] +then + echo 'uninstalling cpufreqctl helper...' + rm /usr/bin/cpufreqctl + echo 'uninstalling policy...' + rm /usr/share/polkit-1/actions/konkor.cpufreq.policy + echo 'uninstalling fonts...' + rm -rf /usr/share/fonts/truetype/cpufreq + echo "done" + exit +fi +if [ $OPTION = "--reset" ] +then + echo 'reset to default values...' + dconf reset -f "/org/gnome/shell/extensions/cpufreq/" + exit +fi diff --git a/daemon-deploy.sh b/scripts/daemon-deploy.sh similarity index 100% rename from daemon-deploy.sh rename to scripts/daemon-deploy.sh