Re: [patch] Re: scheduler oddity [bug?]

From: Mike Galbraith
Date: Mon Mar 09 2009 - 13:28:30 EST


On Mon, 2009-03-09 at 17:12 +0100, Peter Zijlstra wrote:
> On Mon, 2009-03-09 at 16:30 +0100, Mike Galbraith wrote:
> > +static void put_prev_task(struct rq *rq, struct task_struct *prev)
> > +{
> > + if (prev->state == TASK_RUNNING) {
> > + u64 runtime = prev->se.sum_exec_runtime;
> > +
> > + runtime -= prev->se.prev_sum_exec_runtime;
> > + runtime = min_t(u64, runtime, 2*sysctl_sched_migration_cost);
> > +
> > + /*
> > + * In order to avoid avg_overlap growing stale when we are
> > + * indeed overlapping and hence not getting put to sleep, grow
> > + * the avg_overlap on preemption.
> > + */
> > + update_avg(&prev->se.avg_overlap, runtime);
> > + }
> > + prev->sched_class->put_prev_task(rq, prev);
> > +}
>
> Right, so we both found it worked quite well, I'm still slightly puzzled
> but it.
>
> If something gets preempted a lot and will therefore have short runtimes
> it will be seen as sync even though it might not at all be.

Yes, and the netperf on 2 CPUs with shared cache numbers show that's
happening. It just so happens that in the non-shared case, netperf's
cache pain far outweighs the benefit of having more CPU available :-/

-Mike

--
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/