Hi Vincent, On 14/12/2018 16:01, Vincent Guittot wrote: > newly idle load balance is not always triggered when a cpu becomes idle. > This prevent the scheduler to get a chance to migrate task for asym packing. > Enable active migration because of asym packing during idle load balance too. > > Signed-off-by: Vincent Guittot <vincent.guit...@linaro.org> > --- > 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 c215f7a..9591e7a 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -8861,7 +8861,7 @@ static int need_active_balance(struct lb_env *env) > { > struct sched_domain *sd = env->sd; > > - if (env->idle == CPU_NEWLY_IDLE) { > + if (env->idle != CPU_NOT_IDLE) { > > /* > * ASYM_PACKING needs to force migrate tasks from busy but >
That change looks fine. However, you're mentioning newidle load_balance() not being triggered - you'd want to set root_domain->overload for any newidle pull to happen, probably with something like this: -----8<----- @@ -8398,6 +8408,9 @@ static inline void update_sd_lb_stats(struct lb_env *env, struct sd_lb_stats *sd sg = sg->next; } while (sg != env->sd->groups); + if (check_asym_packing(env, sds)) + sg_status |= SG_OVERLOAD; + #ifdef CONFIG_NO_HZ_COMMON if ((env->flags & LBF_NOHZ_AGAIN) && cpumask_subset(nohz.idle_cpus_mask, sched_domain_span(env->sd))) { ----->8----- It's similar to what is done for misfit, although that's yet another 'twisted' use of that flag which we might want to rename (I suggested something like 'need_idle_balance' a while back but it wasn't really popular).