From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: Ingo Molnar <mingo@elte.hu>
Cc: Mike Galbraith <efault@gmx.de>,
Balazs Scheidler <bazsi@balabit.hu>,
linux-kernel@vger.kernel.org, Willy Tarreau <w@1wt.eu>
Subject: Re: [patch] Re: scheduler oddity [bug?]
Date: Mon, 09 Mar 2009 12:04:24 +0100 [thread overview]
Message-ID: <1236596664.8389.331.camel@laptop> (raw)
In-Reply-To: <20090309080714.GB24904@elte.hu>
On Mon, 2009-03-09 at 09:07 +0100, Ingo Molnar wrote:
> * Mike Galbraith <efault@gmx.de> wrote:
> > I see it as a problem, but it's your call. Dunno if I'd apply it or
> > hold back, given these conflicting reports.
>
> I think we still want it - as the purpose of the overlap metric
> is to measure reality. If preemption causes overlap in execution
> we should not ignore that.
>
> The fact that your hw triggers it currently is enough of a
> justification. Gautham's change to load-balancing might have
> shifted the preemption and migration characteristics on his box
> just enough to not trigger this - but it does not 'fix' the
> problem per se.
>
> Peter, what do you think?
Mostly confusion... trying to reverse engineer wth the patch does, and
why, as the changelog is somewhat silent on the issue, nor are there
comments added to clarify things.
Having something of a cold doesn't really help either..
OK, so staring at this:
---
diff --git a/kernel/sched.c b/kernel/sched.c
index 8e2558c..c670050 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -1712,12 +1712,17 @@ static void enqueue_task(struct rq *rq, struct task_struct *p, int wakeup)
static void dequeue_task(struct rq *rq, struct task_struct *p, int sleep)
{
+ u64 runtime;
+
if (sleep && p->se.last_wakeup) {
- update_avg(&p->se.avg_overlap,
- p->se.sum_exec_runtime - p->se.last_wakeup);
+ runtime = p->se.sum_exec_runtime - p->se.last_wakeup;
p->se.last_wakeup = 0;
+ } else {
+ runtime = p->se.sum_exec_runtime - p->se.prev_sum_exec_runtime;
}
+ update_avg(&p->se.avg_overlap, runtime);
+
sched_info_dequeued(p);
p->sched_class->dequeue_task(rq, p, sleep);
p->se.on_rq = 0;
---
The idea of avg_overlap is to measure the time between waking someone
and going to sleep yourself. If this overlap time is short for both
tasks, we infer a mutal relation and try to keep these tasks on the same
cpu.
The above patch changes this definition by adding the full run-time on !
sleep dequeues.
We reset prev_sum_exec_runtime in set_next_entity(), iow every time we
start running a task.
Now !sleep dequeues happen mostly with preemption, but also with things
like migration, nice, etc..
Take migration, that would simply add the last full runtime again, even
though it hasn't ran -- that seems most odd.
OK, talked a bit with Ingo, the reason you're doing is that avg_overlap
can easily grow stale.. I can see that happen indeed.
So the 'perfect' thing would be a task-runtime decay, barring that the
preemption thing seems a sane enough hart-beat of a task.
How does the below look to you?
---
kernel/sched.c | 15 ++++++++++++++-
1 files changed, 14 insertions(+), 1 deletions(-)
diff --git a/kernel/sched.c b/kernel/sched.c
index 4414926..ec7ffdc 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -4692,6 +4692,19 @@ static inline void schedule_debug(struct task_struct *prev)
#endif
}
+static void put_prev_task(struct rq *rq, struct task_struct *prev)
+{
+ if (prev->state == TASK_RUNNING) {
+ /*
+ * 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, sysctl_sched_migration_cost);
+ }
+ prev->sched_class->put_prev_task(rq, prev);
+}
+
/*
* Pick up the highest-prio task:
*/
@@ -4768,7 +4781,7 @@ need_resched_nonpreemptible:
if (unlikely(!rq->nr_running))
idle_balance(cpu, rq);
- prev->sched_class->put_prev_task(rq, prev);
+ put_prev_task(rq, prev);
next = pick_next_task(rq);
if (likely(prev != next)) {
next prev parent reply other threads:[~2009-03-09 11:04 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-07 17:47 scheduler oddity [bug?] Balazs Scheidler
2009-03-07 18:47 ` Balazs Scheidler
2009-03-08 19:45 ` Balazs Scheidler
2009-03-08 22:03 ` Willy Tarreau
2009-03-09 3:35 ` Mike Galbraith
2009-03-09 11:19 ` David Newall
2009-03-08 9:42 ` Mike Galbraith
2009-03-08 9:58 ` Mike Galbraith
2009-03-08 10:02 ` Mike Galbraith
2009-03-08 10:19 ` Peter Zijlstra
2009-03-08 13:35 ` Mike Galbraith
2009-03-08 15:39 ` Ingo Molnar
2009-03-08 16:20 ` Mike Galbraith
2009-03-08 17:52 ` Ingo Molnar
2009-03-08 18:39 ` Mike Galbraith
2009-03-08 18:55 ` Ingo Molnar
2009-03-09 4:10 ` Mike Galbraith
2009-03-09 6:52 ` Ingo Molnar
2009-03-09 8:02 ` [patch] " Mike Galbraith
2009-03-09 8:07 ` Ingo Molnar
2009-03-09 10:16 ` David Newall
2009-03-09 11:04 ` Peter Zijlstra [this message]
2009-03-09 13:16 ` Mike Galbraith
2009-03-09 13:27 ` Peter Zijlstra
2009-03-09 13:51 ` Mike Galbraith
2009-03-09 14:00 ` David Newall
2009-03-09 14:19 ` Peter Zijlstra
2009-03-10 0:20 ` David Newall
2009-03-09 13:37 ` Mike Galbraith
2009-03-09 13:46 ` Peter Zijlstra
2009-03-09 13:58 ` Mike Galbraith
2009-03-09 14:11 ` Mike Galbraith
2009-03-09 14:41 ` Peter Zijlstra
2009-03-09 15:30 ` Mike Galbraith
2009-03-09 16:12 ` Peter Zijlstra
2009-03-09 17:28 ` Mike Galbraith
2009-03-15 13:53 ` Balazs Scheidler
2009-03-15 17:16 ` Mike Galbraith
2009-03-15 18:57 ` Ingo Molnar
2009-03-16 11:55 ` Balazs Scheidler
2009-03-09 15:57 ` Balazs Scheidler
2009-03-10 3:16 ` Mike Galbraith
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1236596664.8389.331.camel@laptop \
--to=a.p.zijlstra@chello.nl \
--cc=bazsi@balabit.hu \
--cc=efault@gmx.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=w@1wt.eu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox