From 4a2c606e12a7f156786ed2b86c9a491bdc2dd89d Mon Sep 17 00:00:00 2001 From: Abhijeet Dharmapurikar Date: Tue, 14 Sep 2021 01:15:03 -0700 Subject: [PATCH] sched/walt: Improve the scheduler This change is for general scheduler improvement. Change-Id: I7e2f06b0f93d6c3c2cc439f895083f4b7cb96212 Signed-off-by: Abhijeet Dharmapurikar --- kernel/sched/walt/sysctl.c | 10 ++++++++++ kernel/sched/walt/walt.h | 1 + kernel/sched/walt/walt_lb.c | 7 +++++++ 3 files changed, 18 insertions(+) diff --git a/kernel/sched/walt/sysctl.c b/kernel/sched/walt/sysctl.c index 96bb39bfe91d..724a3849e4df 100644 --- a/kernel/sched/walt/sysctl.c +++ b/kernel/sched/walt/sysctl.c @@ -64,6 +64,7 @@ unsigned int sysctl_sched_sync_hint_enable = 1; unsigned int sysctl_sched_bug_on_rt_throttle; unsigned int sysctl_panic_on_walt_bug; unsigned int sysctl_sched_suppress_region2; +unsigned int sysctl_sched_skip_sp_newly_idle_lb; /* range is [1 .. INT_MAX] */ static int sysctl_task_read_pid = 1; @@ -732,6 +733,15 @@ struct ctl_table walt_table[] = { .extra1 = SYSCTL_ZERO, .extra2 = SYSCTL_ONE, }, + { + .procname = "sched_skip_sp_newly_idle_lb", + .data = &sysctl_sched_skip_sp_newly_idle_lb, + .maxlen = sizeof(unsigned int), + .mode = 0644, + .proc_handler = proc_dointvec_minmax, + .extra1 = SYSCTL_ZERO, + .extra2 = SYSCTL_ONE, + }, { .procname = "panic_on_walt_bug", .data = &sysctl_panic_on_walt_bug, diff --git a/kernel/sched/walt/walt.h b/kernel/sched/walt/walt.h index 64c097f92ab3..dd335d0cc299 100644 --- a/kernel/sched/walt/walt.h +++ b/kernel/sched/walt/walt.h @@ -288,6 +288,7 @@ extern unsigned int sysctl_walt_low_latency_task_threshold; /* disabled by defau extern unsigned int sysctl_sched_sync_hint_enable; extern unsigned int sysctl_sched_bug_on_rt_throttle; extern unsigned int sysctl_sched_suppress_region2; +extern unsigned int sysctl_sched_skip_sp_newly_idle_lb; extern struct ctl_table walt_table[]; extern struct ctl_table walt_base_table[]; extern void walt_tunables(void); diff --git a/kernel/sched/walt/walt_lb.c b/kernel/sched/walt/walt_lb.c index 29830f65a90c..f8adcce301bd 100644 --- a/kernel/sched/walt/walt_lb.c +++ b/kernel/sched/walt/walt_lb.c @@ -690,6 +690,13 @@ static void walt_newidle_balance(void *unused, struct rq *this_rq, busy_cpu = walt_lb_find_busiest_cpu(this_cpu, &cpu_array[order_index][cluster]); + if (sysctl_sched_skip_sp_newly_idle_lb) { + if (busy_cpu == -1 && + ((order_index == 0 && cluster > 0) || + (order_index == 2 && cluster > 0 && !help_min_cap))) + break; + } + /* we got the busy/src cpu here. */ if (busy_cpu != -1 || this_rq->nr_running > 0) break;