public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Frederic Weisbecker <fweisbec@gmail.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Tim Bird <tim.bird@am.sony.com>, Ingo Molnar <mingo@elte.hu>
Subject: Re: [PATCH][RFC] ftrace: add tracing_thresh support to function_graph tracer (v3)
Date: Sat, 27 Feb 2010 09:55:58 +0100	[thread overview]
Message-ID: <20100227085551.GA5130@nowhere> (raw)
In-Reply-To: <1267234355.6328.155.camel@gandalf.stny.rr.com>

On Fri, Feb 26, 2010 at 08:32:35PM -0500, Steven Rostedt wrote:
> Frederic,
> 
> Can you take look at this patch, and if you agree, can you give it your
> ACK?  Applying this on top of my pull request gives a nice output:
> 
> [root@bxrhel51 tracing]# echo 300 > tracing_thresh 
> [root@bxrhel51 tracing]# cat trace | head -30
> # tracer: function_graph
> #
> # CPU  DURATION                  FUNCTION CALLS
> # |     |   |                     |   |   |   |
>  1) ! 3630.044 us |          } (__dentry_open)
>  1) ! 3632.456 us |        } (nameidata_to_filp)
>  1) ! 3685.980 us |      } (do_filp_open)
>  1) ! 3701.625 us |    } (do_sys_open)
>  1) ! 3702.830 us |  } (sys_open)
>  ------------------------------------------
>  1)   bash-4190    =>   events/-16  
>  ------------------------------------------
> 
>  1) ! 4152.329 us |  } (schedule)
>  ------------------------------------------
>  1)   events/-16   =>   bash-4190   
>  ------------------------------------------
> 
>  1) ! 461.230 us  |            } (_raw_spin_unlock_irqrestore)
>  1) ! 466.865 us  |          } (tty_ldisc_try)
>  1) ! 468.948 us  |        } (tty_ldisc_ref_wait)
>  0) ! 333.541 us  |                  } (walk_tg_tree)
>  0) ! 339.638 us  |                } (update_shares)
>  0) ! 488.176 us  |              } (rebalance_domains)
>  0) ! 490.382 us  |            } (run_rebalance_domains)
>  0) ! 532.406 us  |          } (__do_softirq)
>  0) ! 536.246 us  |        } (do_softirq)
>  0) ! 540.842 us  |      } (irq_exit)
>  0) ! 593.286 us  |    } (smp_apic_timer_interrupt)



Cool!



> 
> 
> 
> (note, I forgot to update the changelog, I'll do that next)
> 
> -- Steve
> 
> 
> commit c020a9a11ec44e0c81f1aa16781d2d42c6c5e560
> Author: Tim Bird <tim.bird@am.sony.com>
> Date:   Thu Feb 25 15:36:43 2010 -0800
> 
>     ftrace: add tracing_thresh support to function_graph tracer (v3)
>     
>     Add support for tracing_thresh to the function_graph tracer.  This
>     version of this feature isolates the checks into new entry and
>     return functions, to avoid adding more conditional code into the
>     main function_graph paths.
>     
>     Also, add support for specifying tracing_thresh on the kernel
>     command line.  When used like so: "tracing_thresh=200 ftrace=function_graph"
>     this can be used to analyse system startup.  It is important to disable
>     tracing soon after boot, in order to avoid losing the trace data.
>     
>     Note: the elimination of 'notrace' in the definition of '__init'
>     may be controversial.  This can be removed, or made conditional,
>     if it's a bit too scary, but it worked OK for me.  Tracing during
>     kernel startup still works, just with no visibility of routines
>     declared __init.
>     
>     Signed-off-by: Tim Bird <tim.bird@am.sony.com>
>     LKML-Reference: <4B87098B.4040308@am.sony.com>
>     Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
> 
> diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
> index 032c57c..34ead59 100644
> --- a/kernel/trace/trace.c
> +++ b/kernel/trace/trace.c
> @@ -374,6 +374,21 @@ static int __init set_buf_size(char *str)
>  }
>  __setup("trace_buf_size=", set_buf_size);
>  
> +static int __init set_tracing_thresh(char *str)
> +{
> +	unsigned long threshhold;
> +	int ret;
> +
> +	if (!str)
> +		return 0;
> +	ret = strict_strtoul(str, 0, &threshhold);
> +	if (ret < 0)
> +		return 0;
> +	tracing_thresh = threshhold * 1000;
> +	return 1;
> +}
> +__setup("tracing_thresh=", set_tracing_thresh);
> +
>  unsigned long nsecs_to_usecs(unsigned long nsecs)
>  {
>  	return nsecs / 1000;
> @@ -579,9 +594,10 @@ static ssize_t trace_seq_to_buffer(struct trace_seq *s, void *buf, size_t cnt)
>  static arch_spinlock_t ftrace_max_lock =
>  	(arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
>  
> +unsigned long __read_mostly	tracing_thresh;
> +
>  #ifdef CONFIG_TRACER_MAX_TRACE
>  unsigned long __read_mostly	tracing_max_latency;
> -unsigned long __read_mostly	tracing_thresh;
>  
>  /*
>   * Copy the new maximum trace into the separate maximum-trace
> @@ -4248,10 +4264,10 @@ static __init int tracer_init_debugfs(void)
>  #ifdef CONFIG_TRACER_MAX_TRACE
>  	trace_create_file("tracing_max_latency", 0644, d_tracer,
>  			&tracing_max_latency, &tracing_max_lat_fops);
> +#endif
>  
>  	trace_create_file("tracing_thresh", 0644, d_tracer,
>  			&tracing_thresh, &tracing_max_lat_fops);
> -#endif
>  
>  	trace_create_file("README", 0444, d_tracer,
>  			NULL, &tracing_readme_fops);
> diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
> index fd05bca..1bc8cd1 100644
> --- a/kernel/trace/trace.h
> +++ b/kernel/trace/trace.h
> @@ -396,9 +396,10 @@ extern int process_new_ksym_entry(char *ksymname, int op, unsigned long addr);
>  
>  extern unsigned long nsecs_to_usecs(unsigned long nsecs);
>  
> +extern unsigned long tracing_thresh;
> +
>  #ifdef CONFIG_TRACER_MAX_TRACE
>  extern unsigned long tracing_max_latency;
> -extern unsigned long tracing_thresh;
>  
>  void update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu);
>  void update_max_tr_single(struct trace_array *tr,
> diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
> index e998a82..aaf580c 100644
> --- a/kernel/trace/trace_functions_graph.c
> +++ b/kernel/trace/trace_functions_graph.c
> @@ -237,6 +237,14 @@ int trace_graph_entry(struct ftrace_graph_ent *trace)
>  	return ret;
>  }
>  
> +int trace_graph_thresh_entry(struct ftrace_graph_ent *trace)
> +{
> +	if (tracing_thresh)
> +		return 1;
> +	else
> +		return trace_graph_entry(trace);
> +}
> +
>  static void __trace_graph_return(struct trace_array *tr,
>  				struct ftrace_graph_ret *trace,
>  				unsigned long flags,
> @@ -290,13 +298,26 @@ void set_graph_array(struct trace_array *tr)
>  	smp_mb();
>  }
>  
> +void trace_graph_thresh_return(struct ftrace_graph_ret *trace)
> +{
> +	if (tracing_thresh &&
> +	    (trace->rettime - trace->calltime < tracing_thresh))
> +		return;
> +	else
> +		trace_graph_return(trace);
> +}
> +
>  static int graph_trace_init(struct trace_array *tr)
>  {
>  	int ret;
>  
>  	set_graph_array(tr);
> -	ret = register_ftrace_graph(&trace_graph_return,
> -				    &trace_graph_entry);
> +	if (tracing_thresh)
> +		ret = register_ftrace_graph(&trace_graph_thresh_return,
> +					    &trace_graph_thresh_entry);
> +	else
> +		ret = register_ftrace_graph(&trace_graph_return,
> +					    &trace_graph_entry);
>  	if (ret)
>  		return ret;
>  	tracing_start_cmdline_record();
> 
> 


The parts that deal with the tracing_thresh file and the output
seem missing?

Other than that this all looks good to me.

Thanks.

Acked-by: Frederic Weisbecker <fweisbec@gmail.com>


  reply	other threads:[~2010-02-27  8:56 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-27  1:32 [PATCH][RFC] ftrace: add tracing_thresh support to function_graph tracer (v3) Steven Rostedt
2010-02-27  8:55 ` Frederic Weisbecker [this message]
2010-03-05 23:08 ` Timothy.Bird
2010-03-06  1:37   ` Steven Rostedt

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=20100227085551.GA5130@nowhere \
    --to=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=rostedt@goodmis.org \
    --cc=tim.bird@am.sony.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox