mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
tracing: Add funcgraph_tail option to print function name after closing braces
In the function-graph tracer, add a funcgraph_tail option to print the function name on all } lines, not just functions whose first line is no longer in the trace buffer. If a function calls other traced functions, its total time appears on its } line. This change allows grep to be used to determine the function for which the line corresponds. Update Documentation/trace/ftrace.txt to describe this new option. Link: http://lkml.kernel.org/p/20140520221041.8359.6782.stgit@beardog.cce.hp.com Signed-off-by: Robert Elliott <elliott@hp.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
parent
ccdb594653
commit
607e3a2920
3 changed files with 33 additions and 3 deletions
|
@ -2003,6 +2003,32 @@ want, depending on your needs.
|
||||||
360.774530 | 1) 0.594 us | __phys_addr();
|
360.774530 | 1) 0.594 us | __phys_addr();
|
||||||
|
|
||||||
|
|
||||||
|
The function name is always displayed after the closing bracket
|
||||||
|
for a function if the start of that function is not in the
|
||||||
|
trace buffer.
|
||||||
|
|
||||||
|
Display of the function name after the closing bracket may be
|
||||||
|
enabled for functions whose start is in the trace buffer,
|
||||||
|
allowing easier searching with grep for function durations.
|
||||||
|
It is default disabled.
|
||||||
|
|
||||||
|
hide: echo nofuncgraph-tail > trace_options
|
||||||
|
show: echo funcgraph-tail > trace_options
|
||||||
|
|
||||||
|
Example with nofuncgraph-tail (default):
|
||||||
|
0) | putname() {
|
||||||
|
0) | kmem_cache_free() {
|
||||||
|
0) 0.518 us | __phys_addr();
|
||||||
|
0) 1.757 us | }
|
||||||
|
0) 2.861 us | }
|
||||||
|
|
||||||
|
Example with funcgraph-tail:
|
||||||
|
0) | putname() {
|
||||||
|
0) | kmem_cache_free() {
|
||||||
|
0) 0.518 us | __phys_addr();
|
||||||
|
0) 1.757 us | } /* kmem_cache_free() */
|
||||||
|
0) 2.861 us | } /* putname() */
|
||||||
|
|
||||||
You can put some comments on specific functions by using
|
You can put some comments on specific functions by using
|
||||||
trace_printk() For example, if you want to put a comment inside
|
trace_printk() For example, if you want to put a comment inside
|
||||||
the __might_sleep() function, you just have to include
|
the __might_sleep() function, you just have to include
|
||||||
|
|
|
@ -725,6 +725,7 @@ extern unsigned long trace_flags;
|
||||||
#define TRACE_GRAPH_PRINT_DURATION 0x10
|
#define TRACE_GRAPH_PRINT_DURATION 0x10
|
||||||
#define TRACE_GRAPH_PRINT_ABS_TIME 0x20
|
#define TRACE_GRAPH_PRINT_ABS_TIME 0x20
|
||||||
#define TRACE_GRAPH_PRINT_IRQS 0x40
|
#define TRACE_GRAPH_PRINT_IRQS 0x40
|
||||||
|
#define TRACE_GRAPH_PRINT_TAIL 0x80
|
||||||
#define TRACE_GRAPH_PRINT_FILL_SHIFT 28
|
#define TRACE_GRAPH_PRINT_FILL_SHIFT 28
|
||||||
#define TRACE_GRAPH_PRINT_FILL_MASK (0x3 << TRACE_GRAPH_PRINT_FILL_SHIFT)
|
#define TRACE_GRAPH_PRINT_FILL_MASK (0x3 << TRACE_GRAPH_PRINT_FILL_SHIFT)
|
||||||
|
|
||||||
|
|
|
@ -55,11 +55,13 @@ static struct tracer_opt trace_opts[] = {
|
||||||
{ TRACER_OPT(funcgraph-abstime, TRACE_GRAPH_PRINT_ABS_TIME) },
|
{ TRACER_OPT(funcgraph-abstime, TRACE_GRAPH_PRINT_ABS_TIME) },
|
||||||
/* Display interrupts */
|
/* Display interrupts */
|
||||||
{ TRACER_OPT(funcgraph-irqs, TRACE_GRAPH_PRINT_IRQS) },
|
{ TRACER_OPT(funcgraph-irqs, TRACE_GRAPH_PRINT_IRQS) },
|
||||||
|
/* Display function name after trailing } */
|
||||||
|
{ TRACER_OPT(funcgraph-tail, TRACE_GRAPH_PRINT_TAIL) },
|
||||||
{ } /* Empty entry */
|
{ } /* Empty entry */
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct tracer_flags tracer_flags = {
|
static struct tracer_flags tracer_flags = {
|
||||||
/* Don't display overruns and proc by default */
|
/* Don't display overruns, proc, or tail by default */
|
||||||
.val = TRACE_GRAPH_PRINT_CPU | TRACE_GRAPH_PRINT_OVERHEAD |
|
.val = TRACE_GRAPH_PRINT_CPU | TRACE_GRAPH_PRINT_OVERHEAD |
|
||||||
TRACE_GRAPH_PRINT_DURATION | TRACE_GRAPH_PRINT_IRQS,
|
TRACE_GRAPH_PRINT_DURATION | TRACE_GRAPH_PRINT_IRQS,
|
||||||
.opts = trace_opts
|
.opts = trace_opts
|
||||||
|
@ -1167,9 +1169,10 @@ print_graph_return(struct ftrace_graph_ret *trace, struct trace_seq *s,
|
||||||
* If the return function does not have a matching entry,
|
* If the return function does not have a matching entry,
|
||||||
* then the entry was lost. Instead of just printing
|
* then the entry was lost. Instead of just printing
|
||||||
* the '}' and letting the user guess what function this
|
* the '}' and letting the user guess what function this
|
||||||
* belongs to, write out the function name.
|
* belongs to, write out the function name. Always do
|
||||||
|
* that if the funcgraph-tail option is enabled.
|
||||||
*/
|
*/
|
||||||
if (func_match) {
|
if (func_match && !(flags & TRACE_GRAPH_PRINT_TAIL)) {
|
||||||
ret = trace_seq_puts(s, "}\n");
|
ret = trace_seq_puts(s, "}\n");
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return TRACE_TYPE_PARTIAL_LINE;
|
return TRACE_TYPE_PARTIAL_LINE;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue