lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20100309151516.GB1982@jolsa.lab.eng.brq.redhat.com>
Date:	Tue, 9 Mar 2010 16:15:16 +0100
From:	Jiri Olsa <jolsa@...hat.com>
To:	Steven Rostedt <rostedt@...dmis.org>
Cc:	mingo@...e.hu, fweisbec@...il.com, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/4] tracing: adding ftrace events for graph tracer

On Mon, Mar 08, 2010 at 02:29:46PM -0500, Steven Rostedt wrote:
> On Mon, 2010-02-22 at 13:56 +0100, Jiri Olsa wrote:
> > hi,
> > 
> > this patch adds ftrace events for graph tracer, so the graph output
> > could be shared within other tracers.
> > 
> 
> Sorry but NAK to this,

right, I haven't realized this to be a problem,
I'll send new version shortly

wbr,
jirka

> 
> What use to be:
> 
>  2) + 25.633 us   |                        }
>  3) ! 252.132 us  |              } /* do_softirq */
>  2) ! 898.211 us  |                      } /* rcu_process_callbacks */
>  2)               |                      /* softirq_exit: vec=9 [action=RCU] */
>  3)   5.534 us    |              rcu_irq_exit();
>  2)   6.405 us    |                      preempt_schedule();
>  3)   5.221 us    |              idle_cpu();
>  2)   6.014 us    |                      rcu_bh_qs();
>  3) ! 289.729 us  |            } /* irq_exit */
>  2)               |                      /* softirq_entry: vec=1 [action=TIMER] */
>  3) ! 860.416 us  |          } /* smp_apic_timer_interrupt */
>  3)   <========== |
>  2)   5.785 us    |                      preempt_schedule();
> 
> 
> Is now:
> 
>       gdmgreeter-3382  [002]   119.609346:  2) + 25.633 us   |                        }
>            pcscd-2849  [003]   119.609352:  3) ! 252.132 us  |              } /* do_softirq */
>       gdmgreeter-3382  [002]   119.609353:  2) ! 898.211 us  |                      } /* rcu_process_callbacks */
>       gdmgreeter-3382  [002]   119.609357: softirq_exit: vec=9 [action=RCU]
>            pcscd-2849  [003]   119.609360:  3)   5.534 us    |              rcu_irq_exit();
>       gdmgreeter-3382  [002]   119.609363:  2)   6.405 us    |                      preempt_schedule();
>            pcscd-2849  [003]   119.609370:  3)   5.221 us    |              idle_cpu();
>       gdmgreeter-3382  [002]   119.609376:  2)   6.014 us    |                      rcu_bh_qs();
>            pcscd-2849  [003]   119.609383:  3) ! 289.729 us  |            } /* irq_exit */
>       gdmgreeter-3382  [002]   119.609387: softirq_entry: vec=1 [action=TIMER]
>            pcscd-2849  [003]   119.609389:  3) ! 860.416 us  |          } /* smp_apic_timer_interrupt */
>  3)   <========== |
>       gdmgreeter-3382  [002]   119.609393:  2)   5.785 us    |                      preempt_schedule();
> 
> 
> Keep the function graph output as is. You can still add the event
> callbacks but do not remove the print_line of the function graph tracer.
> That simply breaks what we worked hard to format nicely.
> 
> -- Steve
> 
> 
> > 
> > Signed-off-by: Jiri Olsa <jolsa@...hat.com>
> > ---
> >  kernel/trace/trace.h                 |    3 ++-
> >  kernel/trace/trace_functions_graph.c |   25 ++++++++++++++++++++++---
> >  2 files changed, 24 insertions(+), 4 deletions(-)
> > 
> > diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
> > index b477fce..1feda87 100644
> > --- a/kernel/trace/trace.h
> > +++ b/kernel/trace/trace.h
> > @@ -490,7 +490,8 @@ extern int trace_clock_id;
> >  
> >  /* Standard output formatting function used for function return traces */
> >  #ifdef CONFIG_FUNCTION_GRAPH_TRACER
> > -extern enum print_line_t print_graph_function(struct trace_iterator *iter);
> > +extern enum print_line_t print_graph_function(struct trace_iterator *iter,
> > +					      int flags);
> >  extern enum print_line_t
> >  trace_print_graph_duration(unsigned long long duration, struct trace_seq *s);
> >  
> > diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
> > index 616b135..41cec17 100644
> > --- a/kernel/trace/trace_functions_graph.c
> > +++ b/kernel/trace/trace_functions_graph.c
> > @@ -38,7 +38,7 @@ struct fgraph_data {
> >  #define TRACE_GRAPH_PRINT_OVERHEAD	0x4
> >  #define TRACE_GRAPH_PRINT_PROC		0x8
> >  #define TRACE_GRAPH_PRINT_DURATION	0x10
> > -#define TRACE_GRAPH_PRINT_ABS_TIME	0X20
> > +#define TRACE_GRAPH_PRINT_ABS_TIME	0x20
> >  
> >  static struct tracer_opt trace_opts[] = {
> >  	/* Display overruns? (for self-debug purpose) */
> > @@ -985,7 +985,7 @@ print_graph_comment(struct trace_seq *s,  struct trace_entry *ent,
> >  
> > 
> >  enum print_line_t
> > -print_graph_function(struct trace_iterator *iter)
> > +print_graph_function(struct trace_iterator *iter, int flags)
> >  {
> >  	struct ftrace_graph_ent_entry *field;
> >  	struct fgraph_data *data = iter->private;
> > @@ -1143,6 +1143,16 @@ static void graph_trace_close(struct trace_iterator *iter)
> >  	}
> >  }
> >  
> > +static struct trace_event graph_trace_entry_event = {
> > +	.type		= TRACE_GRAPH_ENT,
> > +	.trace		= print_graph_function,
> > +};
> > +
> > +static struct trace_event graph_trace_ret_event = {
> > +	.type		= TRACE_GRAPH_RET,
> > +	.trace		= print_graph_function,
> > +};
> > +
> >  static struct tracer graph_trace __read_mostly = {
> >  	.name		= "function_graph",
> >  	.open		= graph_trace_open,
> > @@ -1152,7 +1162,6 @@ static struct tracer graph_trace __read_mostly = {
> >  	.wait_pipe	= poll_wait_pipe,
> >  	.init		= graph_trace_init,
> >  	.reset		= graph_trace_reset,
> > -	.print_line	= print_graph_function,
> >  	.print_header	= print_graph_headers,
> >  	.flags		= &tracer_flags,
> >  #ifdef CONFIG_FTRACE_SELFTEST
> > @@ -1164,6 +1173,16 @@ static __init int init_graph_trace(void)
> >  {
> >  	max_bytes_for_cpu = snprintf(NULL, 0, "%d", nr_cpu_ids - 1);
> >  
> > +	if (!register_ftrace_event(&graph_trace_entry_event)) {
> > +		pr_warning("Warning: could not register graph trace events\n");
> > +		return 1;
> > +	}
> > +
> > +	if (!register_ftrace_event(&graph_trace_ret_event)) {
> > +		pr_warning("Warning: could not register graph trace events\n");
> > +		return 1;
> > +	}
> > +
> >  	return register_tracer(&graph_trace);
> >  }
> >  
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ