[PATCH] sched: Consider capacity for certain load balancing decisions

From: Xi Wang
Date: Tue Jan 31 2023 - 20:21:13 EST


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@xxxxxxxxxx>
---
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