Re: SD_SHARE_CPUPOWER breaks scheduler fairness

From: Con Kolivas
Date: Wed Jun 01 2005 - 18:42:27 EST


On Thu, 2 Jun 2005 09:16 am, Joe Korty wrote:
> > On Thu, 2 Jun 2005 04:41, Steve Rotolo wrote:
> > > I guess the bottom-line is: given N logical cpus, 1/N of all
> > > SCHED_NORMAL tasks may get stuck on a sibling cpu with no chance to
> > > run. All it takes is one spinning SCHED_FIFO task. Sounds like a bug.
> >
> > You're right, and excuse me for missing it. We have to let SCHED_NORMAL
> > tasks run for some period with rt tasks. There shouldn't be any
> > combination of mutually exclusive tasks for siblings.
> >
> > I'll work on something.
>
> Wild thought: how about doing this for the sibling ...
>
> rp->nr_running += SOME_BIG_NUMBER
>
> when a SCHED_FIFO task starts running on some cpu, and
> undo the above when the cpu is released. This fools
> the load balancer into _gradually_ moving tasks off the
> sibling, when the cpu is hogged by some SCHED_FIFO task,
> but should have little effect if a SCHED_FIFO task takes
> little cpu time.

A good thought, and one I had considered. SOME_BIG_NUMBER needs to be
meaninful for this to work. Ideally what we do is add the effective load from
the sibling cpu to the pegged cpu. However that's not as useful as it sounds
because we need to ensure both sibling runqueues are locked every time we
check the load value of one runqueue, and the last thing I want is to
introduce yet more locking. Also the value will vary wildly depending on
whether the task is pegged or not, and this changes in mainline many times in
less than .1s which means it would throw load balancing way off as the value
will effectively become meaningless.

I already have a plan for this without really touching the load balancing.

Cheers,
Con
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/