From 740ff85a826f9190d993d482bcc67f142e4a5745 Mon Sep 17 00:00:00 2001 From: Song Zhang Date: Fri, 11 Nov 2022 20:14:45 +0800 Subject: [PATCH] sched/fair: Avoid offline tasks starve to death for priority load balance When priority load balance enabled for online/offline tasks co-location, offline tasks maybe starve to death by load balance detach_tasks() if env->loop exceed env->loop_max and can not be migrate to idle cpus. So we should set env->loop to 0 and detach offline tasks again. Fixes: fbfd4454efbd ("sched: Introduce priority load balance for CFS") issue reflink: https://gitee.com/openeuler/kernel/issues/I60S5R?from=project-issue Signed-off-by: Song Zhang --- kernel/sched/fair.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index d58a949c9519..83aed043cd01 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -8707,6 +8707,13 @@ static int detach_tasks(struct lb_env *env) #ifdef CONFIG_SCHED_PRIO_LB if (sysctl_sched_prio_load_balance_enabled && env->imbalance > 0) { + /* + * Avoid offline tasks starve to death if env->loop exceed + * env->loop_max, so we should set env->loop to 0 and detach + * offline tasks again. + */ + if (env->loop > env->loop_max) + env->loop = 0; loop++; if (loop == 1) { tasks = &env->src_rq->cfs_offline_tasks; -- GitLab