All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Yuanhan Liu <yuanhan.liu@linux.intel.com>,
	mingo@kernel.org, hpa@zytor.com, linux-kernel@vger.kernel.org,
	tglx@linutronix.de, linux-tip-commits@vger.kernel.org,
	Fengguang Wu <fengguang.wu@intel.com>,
	Huang Ying <ying.huang@intel.com>,
	lkp@linux.intel.com
Subject: Re: [PATCH] ftrace, sched: Add TRACE_FLAG_PREEMPT_RESCHED
Date: Fri, 4 Oct 2013 11:57:12 -0400	[thread overview]
Message-ID: <20131004115712.40c62743@gandalf.local.home> (raw)
In-Reply-To: <20131004152826.GP3081@twins.programming.kicks-ass.net>

On Fri, 4 Oct 2013 17:28:26 +0200
Peter Zijlstra <peterz@infradead.org> wrote:

> On Fri, Oct 04, 2013 at 10:53:42AM -0400, Steven Rostedt wrote:
> > In other words, what does these flags in the trace actually mean?
> > Probably need to add comments in the code and/or update the
> > Documentation section
> 
> If "task need resched" is supposed to explain things; the below too will
> suffice... muwhahaha!

Damn! You caught on. (/me fails to get Peter to explain my
documentation better)

> 
> ---
> Subject: ftrace, sched: Add TRACE_FLAG_PREEMPT_RESCHED
> From: Peter Zijlstra <peterz@infradead.org>
> Date: Fri Sep 27 17:11:00 CEST 2013
> 
> Since the introduction of PREEMPT_NEED_RESCHED; see commit:
> f27dde8deef3 ("sched: Add NEED_RESCHED to the preempt_count") we need
> to be able to look at both TIF_NEED_RESCHED and PREEMPT_NEED_RESCHED
> to understand the full preemption behaviour. Add it to the trace
> output.

This is much better than your previous change log. At least now we have
a pointer to what to read to understand this change.

> 
> Cc: Steven Rostedt <rostedt@goodmis.org>
> Signed-off-by: Peter Zijlstra <peterz@infradead.org>
> Link: http://lkml.kernel.org/n/tip-1tys5rfpbpi7ky20b7msh4qy@git.kernel.org
> ---
>  Documentation/trace/ftrace.txt |    6 +++++-
>  kernel/trace/trace.c           |    3 ++-
>  kernel/trace/trace.h           |    1 +
>  kernel/trace/trace_output.c    |   13 +++++++++++--
>  4 files changed, 19 insertions(+), 4 deletions(-)
> 
> --- a/Documentation/trace/ftrace.txt
> +++ b/Documentation/trace/ftrace.txt
> @@ -655,7 +655,11 @@ explains which is which.
>  		  read the irq flags variable, an 'X' will always
>  		  be printed here.
>  
> -  need-resched: 'N' task need_resched is set, '.' otherwise.
> +  need-resched:
> +	'N' both TIF_NEED_RESCHED and PREEMPT_NEED_RESCHED is set,
> +	'n' only TIF_NEED_RESCHED is set,
> +	'p' only PREEMPT_NEED_RESCHED is set,
> +	'.' otherwise.

Yes this is actually good enough. I'll have to spend time to explain
this better. But I'll let you off the hook from doing it for me ;-)

>  
>    hardirq/softirq:
>  	'H' - hard irq occurred inside a softirq.
> --- a/kernel/trace/trace.c
> +++ b/kernel/trace/trace.c
> @@ -1509,7 +1509,8 @@ tracing_generic_entry_update(struct trac
>  #endif
>  		((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) |
>  		((pc & SOFTIRQ_MASK) ? TRACE_FLAG_SOFTIRQ : 0) |
> -		(need_resched() ? TRACE_FLAG_NEED_RESCHED : 0);
> +		(tif_need_resched() ? TRACE_FLAG_NEED_RESCHED : 0) |
> +		(test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0);
>  }
>  EXPORT_SYMBOL_GPL(tracing_generic_entry_update);
>  
> --- a/kernel/trace/trace.h
> +++ b/kernel/trace/trace.h
> @@ -124,6 +124,7 @@ enum trace_flag_type {
>  	TRACE_FLAG_NEED_RESCHED		= 0x04,
>  	TRACE_FLAG_HARDIRQ		= 0x08,
>  	TRACE_FLAG_SOFTIRQ		= 0x10,
> +	TRACE_FLAG_PREEMPT_RESCHED	= 0x20,

We'll have to update libtraceevent to handle this. I'm hoping it
doesn't barf on the new flag. I don't think it would, but I need to
look at that code to make sure.

>  };
>  
>  #define TRACE_BUF_SIZE		1024
> --- a/kernel/trace/trace_output.c
> +++ b/kernel/trace/trace_output.c
> @@ -618,8 +618,17 @@ int trace_print_lat_fmt(struct trace_seq
>  		(entry->flags & TRACE_FLAG_IRQS_OFF) ? 'd' :
>  		(entry->flags & TRACE_FLAG_IRQS_NOSUPPORT) ? 'X' :
>  		'.';
> -	need_resched =
> -		(entry->flags & TRACE_FLAG_NEED_RESCHED) ? 'N' : '.';
> +
> +	if ((entry->flags & TRACE_FLAG_NEED_RESCHED) &&
> +	    (entry->flags & TRACE_FLAG_PREEMPT_RESCHED))
> +		need_resched = 'N';
> +	else if (entry->flags & TRACE_FLAG_NEED_RESCHED)
> +		need_resched = 'n';
> +	else if (entry->flags & TRACE_FLAG_PREEMPT_RESCHED)
> +		need_resched = 'p';
> +	else
> +		need_resched = '.';
> +

We could optimize the above with:

	int ns;

	ns = entry->flags & (TRACE_FLAG_NEED_RESCHED |
		TRACE_FLAG_PREEMPT_RESCHED);

	switch (ns) {
		case 0:
			need_resched = '.';
			break;
		case TRACE_FLAG_NEED_RSCHED:
			need_resched = 'n';
			break;
		case TRACE_FLAG_PREEMPT_RESCHED:
			need_resched = 'p';
			break;
		case TRACE_FLAG_NEED_RESCHED |
				TRACE_FLAG_PREEMPT_RESCHED:
			need_resched = 'N';
			break;
	}

Not sure if the above is more readable or not, or if it is worth it.

-- Steve

>  	hardsoft_irq =
>  		(hardirq && softirq) ? 'H' :
>  		hardirq ? 'h' :


  reply	other threads:[~2013-10-04 15:57 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-25 16:38 [tip:sched/core] sched: Add NEED_RESCHED to the preempt_count tip-bot for Peter Zijlstra
2013-09-27  9:14 ` Yuanhan Liu
2013-09-27 11:57   ` Peter Zijlstra
2013-09-27 12:13     ` Fengguang Wu
2013-09-27 12:20       ` Fengguang Wu
2013-09-27 15:29   ` [PATCH] ftrace, sched: Add TRACE_FLAG_PREEMPT_RESCHED Peter Zijlstra
2013-10-04  8:09     ` Peter Zijlstra
2013-10-04 14:53       ` Steven Rostedt
2013-10-04 15:16         ` Peter Zijlstra
2013-10-04 15:25           ` Steven Rostedt
2013-10-04 15:28         ` Peter Zijlstra
2013-10-04 15:57           ` Steven Rostedt [this message]
2013-10-04 16:28             ` Peter Zijlstra
2013-11-11 17:52           ` [tip:sched/core] " tip-bot for Peter Zijlstra
2013-11-06 16:37     ` [PATCH] " Steven Rostedt
2013-11-06 16:45       ` Peter Zijlstra
2013-11-06 16:58         ` Steven Rostedt
2013-11-06 17:23           ` Peter Zijlstra
2013-09-27 15:30   ` [PATCH] sched: Revert need_resched() to look at TIF_NEED_RESCHED Peter Zijlstra
2013-09-28  8:28     ` [tip:sched/core] " tip-bot for Peter Zijlstra
2013-12-09  6:41     ` [PATCH] " Aneesh Kumar K.V
2013-12-10 15:52       ` Peter Zijlstra
2013-11-28 13:26 ` [PATCH] sched: Remove PREEMPT_NEED_RESCHED from generic code Peter Zijlstra
2013-11-28 15:24   ` Alexander Graf
2013-12-09  6:29   ` Benjamin Herrenschmidt
2013-12-12  9:51   ` [tip:sched/urgent] " tip-bot for Peter Zijlstra

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=20131004115712.40c62743@gandalf.local.home \
    --to=rostedt@goodmis.org \
    --cc=fengguang.wu@intel.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=lkp@linux.intel.com \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=ying.huang@intel.com \
    --cc=yuanhan.liu@linux.intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.