On Friday 06 Jul 2018 at 13:32:08 (+0200), Peter Zijlstra wrote:
> On Thu, Jun 28, 2018 at 12:40:39PM +0100, Quentin Perret wrote:
> > @@ -5384,6 +5402,7 @@ enqueue_task_fair(struct rq *rq, struct task_struct 
> > *p, int flags)
> >  {
> >     struct cfs_rq *cfs_rq;
> >     struct sched_entity *se = &p->se;
> > +   int task_new = !(flags & ENQUEUE_WAKEUP);
> >  
> >     /*
> >      * The code below (indirectly) updates schedutil which looks at
> > @@ -5431,8 +5450,12 @@ enqueue_task_fair(struct rq *rq, struct task_struct 
> > *p, int flags)
> >             update_cfs_group(se);
> >     }
> >  
> > -   if (!se)
> > +   if (!se) {
> >             add_nr_running(rq, 1);
> > +           if (!task_new)
> > +                   update_overutilized_status(rq);
> 
> I'm confused... why only for !ENQUEUE_WAKEUP

So, what we try to do here is to _not_ set the overutilized flag based
on the utilization of a new task, because its utilization is 'wrong'.
That should help avoiding spurious transitions above the overutilized
threshold.

Was there also something else Morten ?

> and why use a local
> variable for something that's used only once?

No good reasons. An older version of this patch used 'task_new' in two
different locations. This is no longer true, I'll clean that up for v5.

Thanks,
Quentin

Reply via email to