Re: [PATCH 1/2 v2] sched: fix find_idlest_group for fork

From: Morten Rasmussen
Date: Tue Nov 29 2016 - 09:46:25 EST


On Tue, Nov 29, 2016 at 12:42:43PM +0100, Peter Zijlstra wrote:
> On Tue, Nov 29, 2016 at 10:57:59AM +0000, Morten Rasmussen wrote:
> > > @@ -5708,13 +5708,6 @@ static int select_idle_cpu(struct task_struct *p, struct sched_domain *sd, int t
> > >
> > > avg_cost = this_sd->avg_scan_cost;
> > >
> > > - /*
> > > - * Due to large variance we need a large fuzz factor; hackbench in
> > > - * particularly is sensitive here.
> > > - */
> > > - if ((avg_idle / 512) < avg_cost)
> > > - return -1;
> > > -
> > > time = local_clock();
> > >
> > > for_each_cpu_wrap(cpu, sched_domain_span(sd), target, wrap) {
> >
> > I don't quite get this fix, but it is very likely because I haven't paid
> > enough attention.
> >
> > Are you saying that removing the avg_cost check is improving hackbench
> > performance? I thought it was supposed to help hackbench? I'm confused
> > :-(
>
> IIRC, and my pounding head really doesn't remember much, the comment
> reads like we need the large fudge factor because hackbench. That is,
> hackbench would like this test to go away, but others benchmarks will
> tank.

Thanks, that seems in line with Vincent's reply.

The last bit that isn't clear to me is whether /512 is a 'large' fuzz
factor. I guess it is, as we can have many wake-ups, i.e. many times
avg_cost, over the period where avg_idle is calculated. No?