On 02/08/2019 13:56, Vincent Guittot wrote: > utilization is used to detect a misfit task but the load is then used to > select the task on the CPU which can lead to select a small task with > high weight instead of the task that triggered the misfit migration. > > Signed-off-by: Vincent Guittot <vincent.guit...@linaro.org> > --- > Keep tracking load instead of utilization but check that > task doesn't fit CPU's capacity when selecting the task to detach as > suggested by Valentin > > kernel/sched/fair.c | 12 +++--------- > 1 file changed, 3 insertions(+), 9 deletions(-) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index 53e64a7..8496118 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -7487,15 +7487,9 @@ static int detach_tasks(struct lb_env *env) > break; > > case migrate_misfit: > - load = task_h_load(p); > - > - /* > - * utilization of misfit task might decrease a bit > - * since it has been recorded. Be conservative in the > - * condition. > - */ > - if (load < env->imbalance) > - goto next; > + /* This is not a misfit task */ > + if (task_fits_capacity(p, capacity_of(env->src_cpu))) ^^^^^^^^^^^^^^^^^^^^^^^ Just noticed those are spaces for some reason (I think my original diff is to blame)
> + goto next; > > env->imbalance = 0; > break; >