public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* 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