Re: scheduler oddity [bug?]

From: Ingo Molnar
Date: Sun Mar 08 2009 - 11:40:28 EST



* Mike Galbraith <efault@xxxxxx> wrote:

> The problem with your particular testcase is that while one
> half has an avg_overlap (what we use as affinity hint for
> synchronous wakeups) which triggers the affinity hint, the
> other half has avg_overlap of zero, what it was born with, so
> despite significant execution overlap, the scheduler treats
> them as if they were truly synchronous tasks.

hm, why does it stay on zero?

> static void dequeue_task(struct rq *rq, struct task_struct *p, int sleep)
> {
> + u64 limit = sysctl_sched_migration_cost;
> + u64 runtime = p->se.sum_exec_runtime - p->se.prev_sum_exec_runtime;
> +
> if (sleep && p->se.last_wakeup) {
> update_avg(&p->se.avg_overlap,
> p->se.sum_exec_runtime - p->se.last_wakeup);
> p->se.last_wakeup = 0;
> - }
> + } else if (p->se.avg_overlap < limit && runtime >= limit)
> + update_avg(&p->se.avg_overlap, runtime);
>
> sched_info_dequeued(p);
> p->sched_class->dequeue_task(rq, p, sleep);

hm, that's weird. We want to limit avg_overlap maintenance to
true sleeps only.

And this patch only makes a difference in the !sleep case -
which shouldnt be that common in this workload.

What am i missing? A trace would be nice of a few millisecs of
runtime of this workload, with a few more trace_printk()'s added
showing how avg_overlap develops.

Maybe it's some task migration artifact? There we do a
dequeue/enqueue with sleep=0.

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