* sched: trace: update trace_sched_wakeup()
@ 2008-12-16 7:07 Peter Zijlstra
2008-12-16 7:57 ` Peter Zijlstra
0 siblings, 1 reply; 6+ messages in thread
From: Peter Zijlstra @ 2008-12-16 7:07 UTC (permalink / raw)
To: Ingo Molnar, Jason Baron, Mathieu Desnoyers; +Cc: linux-kernel, Steven Rostedt
Add the information needed to distinguish 'real' wakeups from 'false'
wakeups.
---
include/trace/sched.h | 4 ++--
kernel/sched.c | 2 +-
kernel/trace/trace_sched_switch.c | 2 +-
kernel/trace/trace_sched_wakeup.c | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/include/trace/sched.h b/include/trace/sched.h
index 9b2854a..a0861d2 100644
--- a/include/trace/sched.h
+++ b/include/trace/sched.h
@@ -17,8 +17,8 @@ DECLARE_TRACE(sched_wait_task,
TPARGS(rq, p));
DECLARE_TRACE(sched_wakeup,
- TPPROTO(struct rq *rq, struct task_struct *p),
- TPARGS(rq, p));
+ TPPROTO(struct rq *rq, struct task_struct *p, int success),
+ TPARGS(rq, p, success));
DECLARE_TRACE(sched_wakeup_new,
TPPROTO(struct rq *rq, struct task_struct *p),
diff --git a/kernel/sched.c b/kernel/sched.c
index 0eff15b..953ded9 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -2329,7 +2329,7 @@ out_activate:
success = 1;
out_running:
- trace_sched_wakeup(rq, p);
+ trace_sched_wakeup(rq, p, success);
check_preempt_curr(rq, p, sync);
p->state = TASK_RUNNING;
diff --git a/kernel/trace/trace_sched_switch.c b/kernel/trace/trace_sched_switch.c
index 8633905..d4db564 100644
--- a/kernel/trace/trace_sched_switch.c
+++ b/kernel/trace/trace_sched_switch.c
@@ -49,7 +49,7 @@ probe_sched_switch(struct rq *__rq, struct task_struct *prev,
}
static void
-probe_sched_wakeup(struct rq *__rq, struct task_struct *wakee)
+probe_sched_wakeup(struct rq *__rq, struct task_struct *wakee, int success)
{
struct trace_array_cpu *data;
unsigned long flags;
diff --git a/kernel/trace/trace_sched_wakeup.c b/kernel/trace/trace_sched_wakeup.c
index 0067b49..43586b6 100644
--- a/kernel/trace/trace_sched_wakeup.c
+++ b/kernel/trace/trace_sched_wakeup.c
@@ -211,7 +211,7 @@ static void wakeup_reset(struct trace_array *tr)
}
static void
-probe_wakeup(struct rq *rq, struct task_struct *p)
+probe_wakeup(struct rq *rq, struct task_struct *p, int success)
{
int cpu = smp_processor_id();
unsigned long flags;
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: sched: trace: update trace_sched_wakeup()
2008-12-16 7:07 sched: trace: update trace_sched_wakeup() Peter Zijlstra
@ 2008-12-16 7:57 ` Peter Zijlstra
2008-12-16 11:06 ` Ingo Molnar
2008-12-16 15:47 ` Mathieu Desnoyers
0 siblings, 2 replies; 6+ messages in thread
From: Peter Zijlstra @ 2008-12-16 7:57 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Jason Baron, Mathieu Desnoyers, linux-kernel, Steven Rostedt
On Tue, 2008-12-16 at 08:07 +0100, Peter Zijlstra wrote:
> Add the information needed to distinguish 'real' wakeups from 'false'
> wakeups.
I don't seem to be doing so well this morning...
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Thanks Dhaval!
> ---
> include/trace/sched.h | 4 ++--
> kernel/sched.c | 2 +-
> kernel/trace/trace_sched_switch.c | 2 +-
> kernel/trace/trace_sched_wakeup.c | 2 +-
> 4 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/include/trace/sched.h b/include/trace/sched.h
> index 9b2854a..a0861d2 100644
> --- a/include/trace/sched.h
> +++ b/include/trace/sched.h
> @@ -17,8 +17,8 @@ DECLARE_TRACE(sched_wait_task,
> TPARGS(rq, p));
>
> DECLARE_TRACE(sched_wakeup,
> - TPPROTO(struct rq *rq, struct task_struct *p),
> - TPARGS(rq, p));
> + TPPROTO(struct rq *rq, struct task_struct *p, int success),
> + TPARGS(rq, p, success));
>
> DECLARE_TRACE(sched_wakeup_new,
> TPPROTO(struct rq *rq, struct task_struct *p),
> diff --git a/kernel/sched.c b/kernel/sched.c
> index 0eff15b..953ded9 100644
> --- a/kernel/sched.c
> +++ b/kernel/sched.c
> @@ -2329,7 +2329,7 @@ out_activate:
> success = 1;
>
> out_running:
> - trace_sched_wakeup(rq, p);
> + trace_sched_wakeup(rq, p, success);
> check_preempt_curr(rq, p, sync);
>
> p->state = TASK_RUNNING;
> diff --git a/kernel/trace/trace_sched_switch.c b/kernel/trace/trace_sched_switch.c
> index 8633905..d4db564 100644
> --- a/kernel/trace/trace_sched_switch.c
> +++ b/kernel/trace/trace_sched_switch.c
> @@ -49,7 +49,7 @@ probe_sched_switch(struct rq *__rq, struct task_struct *prev,
> }
>
> static void
> -probe_sched_wakeup(struct rq *__rq, struct task_struct *wakee)
> +probe_sched_wakeup(struct rq *__rq, struct task_struct *wakee, int success)
> {
> struct trace_array_cpu *data;
> unsigned long flags;
> diff --git a/kernel/trace/trace_sched_wakeup.c b/kernel/trace/trace_sched_wakeup.c
> index 0067b49..43586b6 100644
> --- a/kernel/trace/trace_sched_wakeup.c
> +++ b/kernel/trace/trace_sched_wakeup.c
> @@ -211,7 +211,7 @@ static void wakeup_reset(struct trace_array *tr)
> }
>
> static void
> -probe_wakeup(struct rq *rq, struct task_struct *p)
> +probe_wakeup(struct rq *rq, struct task_struct *p, int success)
> {
> int cpu = smp_processor_id();
> unsigned long flags;
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: sched: trace: update trace_sched_wakeup()
2008-12-16 7:57 ` Peter Zijlstra
@ 2008-12-16 11:06 ` Ingo Molnar
2008-12-16 15:47 ` Mathieu Desnoyers
1 sibling, 0 replies; 6+ messages in thread
From: Ingo Molnar @ 2008-12-16 11:06 UTC (permalink / raw)
To: Peter Zijlstra
Cc: Jason Baron, Mathieu Desnoyers, linux-kernel, Steven Rostedt
* Peter Zijlstra <peterz@infradead.org> wrote:
> On Tue, 2008-12-16 at 08:07 +0100, Peter Zijlstra wrote:
> > Add the information needed to distinguish 'real' wakeups from 'false'
> > wakeups.
>
> I don't seem to be doing so well this morning...
>
> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
>
> Thanks Dhaval!
applied to tip/tracing/ftrace, thanks Peter!
I suspect you'll also then use this bit in the ftrace scheduler records?
This extension is pretty orphaned right now.
Ingo
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: sched: trace: update trace_sched_wakeup()
2008-12-16 7:57 ` Peter Zijlstra
2008-12-16 11:06 ` Ingo Molnar
@ 2008-12-16 15:47 ` Mathieu Desnoyers
2008-12-16 16:18 ` Peter Zijlstra
1 sibling, 1 reply; 6+ messages in thread
From: Mathieu Desnoyers @ 2008-12-16 15:47 UTC (permalink / raw)
To: Peter Zijlstra; +Cc: Ingo Molnar, Jason Baron, linux-kernel, Steven Rostedt
* Peter Zijlstra (peterz@infradead.org) wrote:
> On Tue, 2008-12-16 at 08:07 +0100, Peter Zijlstra wrote:
> > Add the information needed to distinguish 'real' wakeups from 'false'
> > wakeups.
>
> I don't seem to be doing so well this morning...
>
> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
>
> Thanks Dhaval!
>
Applied a modified version into the 2.6.27.9 LTTng tree. Thanks!
(remembering that I should really move to 2.6.28-rc!)
Mathieu
> > ---
> > include/trace/sched.h | 4 ++--
> > kernel/sched.c | 2 +-
> > kernel/trace/trace_sched_switch.c | 2 +-
> > kernel/trace/trace_sched_wakeup.c | 2 +-
> > 4 files changed, 5 insertions(+), 5 deletions(-)
> >
> > diff --git a/include/trace/sched.h b/include/trace/sched.h
> > index 9b2854a..a0861d2 100644
> > --- a/include/trace/sched.h
> > +++ b/include/trace/sched.h
> > @@ -17,8 +17,8 @@ DECLARE_TRACE(sched_wait_task,
> > TPARGS(rq, p));
> >
> > DECLARE_TRACE(sched_wakeup,
> > - TPPROTO(struct rq *rq, struct task_struct *p),
> > - TPARGS(rq, p));
> > + TPPROTO(struct rq *rq, struct task_struct *p, int success),
> > + TPARGS(rq, p, success));
> >
> > DECLARE_TRACE(sched_wakeup_new,
> > TPPROTO(struct rq *rq, struct task_struct *p),
> > diff --git a/kernel/sched.c b/kernel/sched.c
> > index 0eff15b..953ded9 100644
> > --- a/kernel/sched.c
> > +++ b/kernel/sched.c
> > @@ -2329,7 +2329,7 @@ out_activate:
> > success = 1;
> >
> > out_running:
> > - trace_sched_wakeup(rq, p);
> > + trace_sched_wakeup(rq, p, success);
> > check_preempt_curr(rq, p, sync);
> >
> > p->state = TASK_RUNNING;
> > diff --git a/kernel/trace/trace_sched_switch.c b/kernel/trace/trace_sched_switch.c
> > index 8633905..d4db564 100644
> > --- a/kernel/trace/trace_sched_switch.c
> > +++ b/kernel/trace/trace_sched_switch.c
> > @@ -49,7 +49,7 @@ probe_sched_switch(struct rq *__rq, struct task_struct *prev,
> > }
> >
> > static void
> > -probe_sched_wakeup(struct rq *__rq, struct task_struct *wakee)
> > +probe_sched_wakeup(struct rq *__rq, struct task_struct *wakee, int success)
> > {
> > struct trace_array_cpu *data;
> > unsigned long flags;
> > diff --git a/kernel/trace/trace_sched_wakeup.c b/kernel/trace/trace_sched_wakeup.c
> > index 0067b49..43586b6 100644
> > --- a/kernel/trace/trace_sched_wakeup.c
> > +++ b/kernel/trace/trace_sched_wakeup.c
> > @@ -211,7 +211,7 @@ static void wakeup_reset(struct trace_array *tr)
> > }
> >
> > static void
> > -probe_wakeup(struct rq *rq, struct task_struct *p)
> > +probe_wakeup(struct rq *rq, struct task_struct *p, int success)
> > {
> > int cpu = smp_processor_id();
> > unsigned long flags;
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at http://www.tux.org/lkml/
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: sched: trace: update trace_sched_wakeup()
2008-12-16 15:47 ` Mathieu Desnoyers
@ 2008-12-16 16:18 ` Peter Zijlstra
2008-12-16 17:01 ` Mathieu Desnoyers
0 siblings, 1 reply; 6+ messages in thread
From: Peter Zijlstra @ 2008-12-16 16:18 UTC (permalink / raw)
To: Mathieu Desnoyers; +Cc: Ingo Molnar, Jason Baron, linux-kernel, Steven Rostedt
On Tue, 2008-12-16 at 10:47 -0500, Mathieu Desnoyers wrote:
> * Peter Zijlstra (peterz@infradead.org) wrote:
> > On Tue, 2008-12-16 at 08:07 +0100, Peter Zijlstra wrote:
> > > Add the information needed to distinguish 'real' wakeups from 'false'
> > > wakeups.
> >
> > I don't seem to be doing so well this morning...
> >
> > Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
> >
> > Thanks Dhaval!
> >
>
> Applied a modified version into the 2.6.27.9 LTTng tree. Thanks!
> (remembering that I should really move to 2.6.28-rc!)
Ingo pointed out that this generates build crap in ftrace which made me
look at the thing again, and I just realized we don't need it.
trace_sched_wakeup() gets called before we set p->state = TASK_RUNNING,
so by checking p->state in the callback we can see if its a real of
false wakeup.
The scheduler tracer in ftrace already exploits this.
> > > --- a/kernel/sched.c
> > > +++ b/kernel/sched.c
> > > @@ -2329,7 +2329,7 @@ out_activate:
> > > success = 1;
> > >
> > > out_running:
> > > - trace_sched_wakeup(rq, p);
> > > + trace_sched_wakeup(rq, p, success);
> > > check_preempt_curr(rq, p, sync);
> > >
> > > p->state = TASK_RUNNING;
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: sched: trace: update trace_sched_wakeup()
2008-12-16 16:18 ` Peter Zijlstra
@ 2008-12-16 17:01 ` Mathieu Desnoyers
0 siblings, 0 replies; 6+ messages in thread
From: Mathieu Desnoyers @ 2008-12-16 17:01 UTC (permalink / raw)
To: Peter Zijlstra; +Cc: Ingo Molnar, Jason Baron, linux-kernel, Steven Rostedt
* Peter Zijlstra (peterz@infradead.org) wrote:
> On Tue, 2008-12-16 at 10:47 -0500, Mathieu Desnoyers wrote:
> > * Peter Zijlstra (peterz@infradead.org) wrote:
> > > On Tue, 2008-12-16 at 08:07 +0100, Peter Zijlstra wrote:
> > > > Add the information needed to distinguish 'real' wakeups from 'false'
> > > > wakeups.
> > >
> > > I don't seem to be doing so well this morning...
> > >
> > > Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
> > >
> > > Thanks Dhaval!
> > >
> >
> > Applied a modified version into the 2.6.27.9 LTTng tree. Thanks!
> > (remembering that I should really move to 2.6.28-rc!)
>
> Ingo pointed out that this generates build crap in ftrace which made me
> look at the thing again, and I just realized we don't need it.
>
> trace_sched_wakeup() gets called before we set p->state = TASK_RUNNING,
> so by checking p->state in the callback we can see if its a real of
> false wakeup.
>
> The scheduler tracer in ftrace already exploits this.
>
We do something similar in LTTng : we save the state along with the
event in the trace stream and let the userspace analyzer see what was
the state of the process prior to the wakeup.
Thanks,
Mathieu
> > > > --- a/kernel/sched.c
> > > > +++ b/kernel/sched.c
> > > > @@ -2329,7 +2329,7 @@ out_activate:
> > > > success = 1;
> > > >
> > > > out_running:
> > > > - trace_sched_wakeup(rq, p);
> > > > + trace_sched_wakeup(rq, p, success);
> > > > check_preempt_curr(rq, p, sync);
> > > >
> > > > p->state = TASK_RUNNING;
>
>
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-12-16 17:01 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-16 7:07 sched: trace: update trace_sched_wakeup() Peter Zijlstra
2008-12-16 7:57 ` Peter Zijlstra
2008-12-16 11:06 ` Ingo Molnar
2008-12-16 15:47 ` Mathieu Desnoyers
2008-12-16 16:18 ` Peter Zijlstra
2008-12-16 17:01 ` Mathieu Desnoyers
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox