From 7afb7e4d77c1733c179b4d863eb9a35406b79375 Mon Sep 17 00:00:00 2001 From: tytydraco Date: Sat, 3 Oct 2020 21:04:35 -0700 Subject: [PATCH 01/15] Add branch information to logs Signed-off-by: tytydraco --- ktweak | 1 + 1 file changed, 1 insertion(+) diff --git a/ktweak b/ktweak index beb0690..4a4d624 100644 --- a/ktweak +++ b/ktweak @@ -38,6 +38,7 @@ fi # Log the date and time for records sake echo "Time of execution: $(date)" +echo "Branch: master" # Sync to data in the rare case a device crashes sync From 80e2317c258d716fa880440b265b21066bf98d20 Mon Sep 17 00:00:00 2001 From: tytydraco Date: Sat, 3 Oct 2020 23:21:06 -0700 Subject: [PATCH 02/15] Revert "Stretch CPU frequency bounds" This reverts commit a9d0a8c6ee41c7c4d0d3f3cb2906c690c377961b. --- ktweak | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ktweak b/ktweak index 4a4d624..1386008 100644 --- a/ktweak +++ b/ktweak @@ -141,10 +141,6 @@ do # Fetch the available governors from the CPU avail_govs="$(cat "$cpu/scaling_available_governors")" - # Stretch CPU bounds - write "$cpu/scaling_max_freq" "$(cat "$cpu/cpuinfo_max_freq")" - write "$cpu/scaling_min_freq" "$(cat "$cpu/cpuinfo_min_freq")" - # Attempt to set the governor in this order for governor in schedutil interactive do From cb7cfe81a9d84c9c041f4d3a384206e3b95edf8a Mon Sep 17 00:00:00 2001 From: Tyler Nijmeh Date: Sun, 4 Oct 2020 11:26:18 -0700 Subject: [PATCH 03/15] Fix typo Signed-off-by: Tyler Nijmeh --- ktweak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ktweak b/ktweak index 1386008..aa17aad 100644 --- a/ktweak +++ b/ktweak @@ -4,7 +4,7 @@ # Maximum unsigned integer size in C UINT_MAX="4294967295" -# Duration in nnaoseconds of one scheduling period +# Duration in nanoseconds of one scheduling period SCHED_PERIOD="$((2 * 1000 * 1000))" # How many tasks should we have at a maximum in one scheduling period From e5da30101e09bc1fa71015dec4111c7611d80bd0 Mon Sep 17 00:00:00 2001 From: tytydraco Date: Sun, 4 Oct 2020 13:46:46 -0700 Subject: [PATCH 04/15] Look for high performing CPUs on top-app Signed-off-by: tytydraco --- ktweak | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ktweak b/ktweak index aa17aad..ab1ad83 100644 --- a/ktweak +++ b/ktweak @@ -133,6 +133,9 @@ if [[ -d "/dev/stune/" ]] then # Prefer to schedule top-app tasks on idle CPUs write /dev/stune/top-app/schedtune.prefer_idle 1 + + # Mark top-app as boosted, find high-performing CPUs + write /dev/stune/top-app/schedtune.boost 1 fi # Loop over each CPU in the system From b474bb18ca0ad761a6c0aef19bd0f1a076b7bb8f Mon Sep 17 00:00:00 2001 From: tytydraco Date: Mon, 5 Oct 2020 00:09:47 -0700 Subject: [PATCH 05/15] Match sched period to dev branch Signed-off-by: tytydraco --- ktweak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ktweak b/ktweak index ab1ad83..3b73cd4 100644 --- a/ktweak +++ b/ktweak @@ -5,7 +5,7 @@ UINT_MAX="4294967295" # Duration in nanoseconds of one scheduling period -SCHED_PERIOD="$((2 * 1000 * 1000))" +SCHED_PERIOD="$((4 * 1000 * 1000))" # How many tasks should we have at a maximum in one scheduling period SCHED_TASKS="10" From 0bf37a9dd001a14f53067a889bd4e105d1034626 Mon Sep 17 00:00:00 2001 From: tytydraco Date: Mon, 5 Oct 2020 20:44:55 -0700 Subject: [PATCH 06/15] Properly scale governor sample rates to sched periods Signed-off-by: tytydraco --- ktweak | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ktweak b/ktweak index 3b73cd4..4523df8 100644 --- a/ktweak +++ b/ktweak @@ -160,9 +160,9 @@ done find /sys/devices/system/cpu/ -name schedutil -type d | while IFS= read -r governor do # Consider changing frequencies once per scheduling period - write "$governor/up_rate_limit_us" 5000 - write "$governor/down_rate_limit_us" 5000 - write "$governor/rate_limit_us" 5000 + write "$governor/up_rate_limit_us" "$((SCHED_PERIOD / 1000))" + write "$governor/down_rate_limit_us" "$((SCHED_PERIOD / 1000))" + write "$governor/rate_limit_us" "$((SCHED_PERIOD / 1000))" # Jump to max frequency at 90% load write "$governor/hispeed_load" 90 @@ -173,8 +173,8 @@ done find /sys/devices/system/cpu/ -name interactive -type d | while IFS= read -r governor do # Consider changing frequencies once per scheduling period - write "$governor/timer_rate" 5000 - write "$governor/min_sample_time" 5000 + write "$governor/timer_rate" "$((SCHED_PERIOD / 1000))" + write "$governor/min_sample_time" "$((SCHED_PERIOD / 1000))" # Jump to max frequency at 90% load write "$governor/go_hispeed_load" 90 From fcf96e2812a80e87d805e5aa4fc122033c30f9b0 Mon Sep 17 00:00:00 2001 From: Tyler Nijmeh Date: Tue, 6 Oct 2020 15:41:15 -0700 Subject: [PATCH 07/15] Revert "Disable child runs first to fix idle" This reverts commit e741439983b718aa626729b3814734960a9ffa7b. --- ktweak | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ktweak b/ktweak index 4523df8..4c6e290 100644 --- a/ktweak +++ b/ktweak @@ -63,6 +63,9 @@ write /proc/sys/kernel/perf_cpu_time_max_percent 5 # Do not group task groups automatically write /proc/sys/kernel/sched_autogroup_enabled 0 +# Execute child process before parent after fork +write /proc/sys/kernel/sched_child_runs_first 1 + # Preliminary requirement for the following values write /proc/sys/kernel/sched_tunable_scaling 0 From 2e381acf399ec4fab48d7b776b14bc9c2e8c9cc9 Mon Sep 17 00:00:00 2001 From: tytydraco Date: Wed, 7 Oct 2020 17:12:07 -0700 Subject: [PATCH 08/15] Remove hardcoded values in comments Signed-off-by: tytydraco --- ktweak | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ktweak b/ktweak index 4c6e290..b5b8480 100644 --- a/ktweak +++ b/ktweak @@ -72,7 +72,7 @@ write /proc/sys/kernel/sched_tunable_scaling 0 # Reduce the maximum scheduling period for lower latency write /proc/sys/kernel/sched_latency_ns "$SCHED_PERIOD" -# Schedule 10 tasks in the guarenteed sched period +# Schedule this ratio of tasks in the guarenteed sched period write /proc/sys/kernel/sched_min_granularity_ns "$((SCHED_PERIOD / SCHED_TASKS))" # Require preeptive tasks to surpass half of a sched period in vmruntime @@ -167,7 +167,7 @@ do write "$governor/down_rate_limit_us" "$((SCHED_PERIOD / 1000))" write "$governor/rate_limit_us" "$((SCHED_PERIOD / 1000))" - # Jump to max frequency at 90% load + # Jump to hispeed frequency at this load percentage write "$governor/hispeed_load" 90 write "$governor/hispeed_freq" "$UINT_MAX" done @@ -179,7 +179,7 @@ do write "$governor/timer_rate" "$((SCHED_PERIOD / 1000))" write "$governor/min_sample_time" "$((SCHED_PERIOD / 1000))" - # Jump to max frequency at 90% load + # Jump to hispeed frequency at this load percentage write "$governor/go_hispeed_load" 90 write "$governor/hispeed_freq" "$UINT_MAX" done From 95e3e557524e6368291f507b09f06d1a9833d537 Mon Sep 17 00:00:00 2001 From: tytydraco Date: Thu, 8 Oct 2020 18:45:50 -0700 Subject: [PATCH 09/15] Reduce sched period Signed-off-by: tytydraco --- ktweak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ktweak b/ktweak index b5b8480..962fef9 100644 --- a/ktweak +++ b/ktweak @@ -5,7 +5,7 @@ UINT_MAX="4294967295" # Duration in nanoseconds of one scheduling period -SCHED_PERIOD="$((4 * 1000 * 1000))" +SCHED_PERIOD="$((1 * 1000 * 1000))" # How many tasks should we have at a maximum in one scheduling period SCHED_TASKS="10" From 904dd5c6b6a1fc106f8544e90f7dd4de19a0cb49 Mon Sep 17 00:00:00 2001 From: tytydraco Date: Fri, 9 Oct 2020 12:46:28 -0700 Subject: [PATCH 10/15] Only ramp down every four scheduler cycles Avoid costly frequency switching if it is possible to stay at a consistent frequency for longer. Signed-off-by: tytydraco --- ktweak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ktweak b/ktweak index 962fef9..5ab447d 100644 --- a/ktweak +++ b/ktweak @@ -164,7 +164,7 @@ find /sys/devices/system/cpu/ -name schedutil -type d | while IFS= read -r gover do # Consider changing frequencies once per scheduling period write "$governor/up_rate_limit_us" "$((SCHED_PERIOD / 1000))" - write "$governor/down_rate_limit_us" "$((SCHED_PERIOD / 1000))" + write "$governor/down_rate_limit_us" "$((4 * SCHED_PERIOD / 1000))" write "$governor/rate_limit_us" "$((SCHED_PERIOD / 1000))" # Jump to hispeed frequency at this load percentage From 761770b023dd6a95b236914107e3eac7742dd8a9 Mon Sep 17 00:00:00 2001 From: tytydraco Date: Fri, 9 Oct 2020 12:57:53 -0700 Subject: [PATCH 11/15] Disable printk logging Signed-off-by: tytydraco --- ktweak | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ktweak b/ktweak index 5ab447d..fece9aa 100644 --- a/ktweak +++ b/ktweak @@ -90,6 +90,9 @@ write /proc/sys/kernel/sched_nr_migrate 8 # Disable scheduler statistics to reduce overhead write /proc/sys/kernel/sched_schedstats 0 +# Disable unnecessary printk logging +write /proc/sys/kernel/printk_devkmsg off + # Start non-blocking writeback later write /proc/sys/vm/dirty_background_ratio 10 From 0e43c297cfe13c04f8dc36a0f1607b4e26c366fc Mon Sep 17 00:00:00 2001 From: tytydraco Date: Fri, 9 Oct 2020 13:17:49 -0700 Subject: [PATCH 12/15] Only apply Android specific tweaks if we are on Android Signed-off-by: tytydraco --- ktweak | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ktweak b/ktweak index fece9aa..b9da009 100644 --- a/ktweak +++ b/ktweak @@ -35,6 +35,8 @@ then exit 1 fi +# Detect if we are running on Android +grep -q android /proc/cmdline && ANDROID=true # Log the date and time for records sake echo "Time of execution: $(date)" @@ -46,7 +48,7 @@ sync # We need to execute this multiple times because # sched_downmirate must be less than sched_upmigrate, and # sched_upmigrate must be greater than sched_downmigrate -for _ in $(seq 2) +[[ "$ANDROID" == true ]] && for _ in $(seq 2) do # Migrate tasks down at this much load write /proc/sys/kernel/sched_downmigrate "80 80" @@ -82,7 +84,7 @@ write /proc/sys/kernel/sched_wakeup_granularity_ns "$((SCHED_PERIOD / 2))" write /proc/sys/kernel/sched_migration_cost_ns 5000000 # Always allow sched boosting on top-app tasks -write /proc/sys/kernel/sched_min_task_util_for_colocation 0 +[[ "$ANDROID" == true ]] && write /proc/sys/kernel/sched_min_task_util_for_colocation 0 # Improve real time latencies by reducing the scheduler migration time write /proc/sys/kernel/sched_nr_migrate 8 @@ -135,7 +137,7 @@ then write /sys/kernel/debug/sched_features TTWU_QUEUE fi -if [[ -d "/dev/stune/" ]] +[[ "$ANDROID" == true ]] && if [[ -d "/dev/stune/" ]] then # Prefer to schedule top-app tasks on idle CPUs write /dev/stune/top-app/schedtune.prefer_idle 1 From 93151bb88bae49d12f16b8538abb42698f389290 Mon Sep 17 00:00:00 2001 From: Tyler Nijmeh Date: Thu, 15 Oct 2020 17:53:19 -0700 Subject: [PATCH 13/15] Reduce max tasks to 8 per period Signed-off-by: Tyler Nijmeh --- ktweak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ktweak b/ktweak index b9da009..6a6a94e 100644 --- a/ktweak +++ b/ktweak @@ -8,7 +8,7 @@ UINT_MAX="4294967295" SCHED_PERIOD="$((1 * 1000 * 1000))" # How many tasks should we have at a maximum in one scheduling period -SCHED_TASKS="10" +SCHED_TASKS="8" write() { # Bail out if file does not exist From 18d788a9dcc67468c847db60f62377c9e9a84a63 Mon Sep 17 00:00:00 2001 From: Tyler Nijmeh Date: Thu, 15 Oct 2020 17:54:12 -0700 Subject: [PATCH 14/15] Upmigrate more Signed-off-by: Tyler Nijmeh --- ktweak | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ktweak b/ktweak index 6a6a94e..0974f25 100644 --- a/ktweak +++ b/ktweak @@ -51,12 +51,12 @@ sync [[ "$ANDROID" == true ]] && for _ in $(seq 2) do # Migrate tasks down at this much load - write /proc/sys/kernel/sched_downmigrate "80 80" - write /proc/sys/kernel/sched_group_downmigrate 80 + write /proc/sys/kernel/sched_downmigrate "70 70" + write /proc/sys/kernel/sched_group_downmigrate 70 # Migrate tasks up at this much load - write /proc/sys/kernel/sched_upmigrate "80 80" - write /proc/sys/kernel/sched_group_upmigrate 80 + write /proc/sys/kernel/sched_upmigrate "70 70" + write /proc/sys/kernel/sched_group_upmigrate 70 done # Limit max perf event processing time to this much CPU usage From 8daccf124cb378cbad4ad00b05106880afc1551a Mon Sep 17 00:00:00 2001 From: Tyler Nijmeh Date: Thu, 15 Oct 2020 17:55:16 -0700 Subject: [PATCH 15/15] Enable autogrouping Signed-off-by: Tyler Nijmeh --- ktweak | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ktweak b/ktweak index 0974f25..9943fec 100644 --- a/ktweak +++ b/ktweak @@ -62,8 +62,8 @@ done # Limit max perf event processing time to this much CPU usage write /proc/sys/kernel/perf_cpu_time_max_percent 5 -# Do not group task groups automatically -write /proc/sys/kernel/sched_autogroup_enabled 0 +# Group tasks for less stutter but less throughput +write /proc/sys/kernel/sched_autogroup_enabled 1 # Execute child process before parent after fork write /proc/sys/kernel/sched_child_runs_first 1