[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230201012032.2874481-1-xii@google.com>
Date: Tue, 31 Jan 2023 17:20:32 -0800
From: Xi Wang <xii@...gle.com>
To: Vincent Guittot <vincent.guittot@...aro.org>,
Peter Zijlstra <peterz@...radead.org>
Cc: Juri Lelli <juri.lelli@...hat.com>, Ingo Molnar <mingo@...hat.com>,
Dietmar Eggemann <dietmar.eggemann@....com>,
Steven Rostedt <rostedt@...dmis.org>,
Mel Gorman <mgorman@...e.de>,
Daniel Bristot de Oliveira <bristot@...hat.com>,
Valentin Schneider <vschneid@...hat.com>,
Ben Segall <bsegall@...gle.com>, linux-kernel@...r.kernel.org,
linux-fsdevel@...r.kernel.org, Xi Wang <xii@...gle.com>
Subject: [PATCH] sched: Consider capacity for certain load balancing decisions
After load balancing was split into different scenarios, CPU capacity
is ignored for the "migrate_task" case, which means a thread can stay
on a softirq heavy cpu for an extended amount of time.
By comparing nr_running/capacity instead of just nr_running we can add
CPU capacity back into "migrate_task" decisions. This benefits
workloads running on machines with heavy network traffic. The change
is unlikely to cause serious problems for other workloads but maybe
some corner cases still need to be considered.
Signed-off-by: Xi Wang <xii@...gle.com>
---
kernel/sched/fair.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 0f8736991427..aad14bc04544 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -10368,8 +10368,9 @@ static struct rq *find_busiest_queue(struct lb_env *env,
break;
case migrate_task:
- if (busiest_nr < nr_running) {
+ if (busiest_nr * capacity < nr_running * busiest_capacity) {
busiest_nr = nr_running;
+ busiest_capacity = capacity;
busiest = rq;
}
break;
--
2.39.1
Powered by blists - more mailing lists