On Tue, 19 Jan 2021 at 13:08, Qais Yousef <[email protected]> wrote: > > If the task is pinned to a cpu, setting the misfit status means that > we'll unnecessarily continuously attempt to migrate the task but fail. > > This continuous failure will cause the balance_interval to increase to > a high value, and eventually cause unnecessary significant delays in > balancing the system when real imbalance happens. > > Caught while testing uclamp where rt-app calibration loop was pinned to > cpu 0, shortly after which we spawn another task with high util_clamp > value. The task was failing to migrate after over 40ms of runtime due to > balance_interval unnecessary expanded to a very high value from the > calibration loop. > > Not done here, but it could be useful to extend the check for pinning to > verify that the affinity of the task has a cpu that fits. We could end > up in a similar situation otherwise. > > Fixes: 3b1baa6496e6 ("sched/fair: Add 'group_misfit_task' load-balance type") > Signed-off-by: Qais Yousef <[email protected]> > --- > kernel/sched/fair.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index 197a51473e0c..9379a481dd8c 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -4060,7 +4060,7 @@ static inline void update_misfit_status(struct > task_struct *p, struct rq *rq) > if (!static_branch_unlikely(&sched_asym_cpucapacity)) > return; > > - if (!p) { > + if (!p || p->nr_cpus_allowed == 1) {
Side question: What happens if there is 2 misfit tasks and the current one is pinned but not the other waiting one > rq->misfit_task_load = 0; > return; > } > -- > 2.25.1 >

