]> git.baikalelectronics.ru Git - kernel.git/commit
sched/fair: handle case of task_h_load() returning 0
authorVincent Guittot <vincent.guittot@linaro.org>
Fri, 10 Jul 2020 15:24:26 +0000 (17:24 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Thu, 16 Jul 2020 21:19:48 +0000 (23:19 +0200)
commit00a836d38b9146a44263a8f6b5b7c804b1a7b428
tree1e14dfeca6f69e6c3ce3b0c3f46f2742c7678432
parent2aaa57cf3dca2487b75e4f56bd9ef2dfef01bb52
sched/fair: handle case of task_h_load() returning 0

task_h_load() can return 0 in some situations like running stress-ng
mmapfork, which forks thousands of threads, in a sched group on a 224 cores
system. The load balance doesn't handle this correctly because
env->imbalance never decreases and it will stop pulling tasks only after
reaching loop_max, which can be equal to the number of running tasks of
the cfs. Make sure that imbalance will be decreased by at least 1.

misfit task is the other feature that doesn't handle correctly such
situation although it's probably more difficult to face the problem
because of the smaller number of CPUs and running tasks on heterogenous
system.

We can't simply ensure that task_h_load() returns at least one because it
would imply to handle underflow in other places.

Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>
Reviewed-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
Tested-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
Cc: <stable@vger.kernel.org> # v4.4+
Link: https://lkml.kernel.org/r/20200710152426.16981-1-vincent.guittot@linaro.org
kernel/sched/fair.c