Messages in this thread | | | Date | Fri, 25 Nov 2016 16:06:50 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | Re: [PATCH] perf script: Add option to stop printing callchain |
| |
Em Fri, Nov 25, 2016 at 09:36:27AM -0700, David Ahern escreveu: > From: David Ahern <dsa@cumulusnetworks.com> > > Allow user to specify list of symbols which cause the dump of callchains > to stop at that symbol.
Not applying, please refresh acme/perf/core and resend,
Thanks,
- Arnaldo
> Signed-off-by: David Ahern <dsa@cumulusnetworks.com> > --- > tools/perf/Documentation/perf-script.txt | 3 +++ > tools/perf/builtin-script.c | 2 ++ > tools/perf/util/evsel_fprintf.c | 8 ++++++++ > tools/perf/util/symbol.c | 8 ++++++++ > tools/perf/util/symbol.h | 6 ++++-- > 5 files changed, 25 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt > index c01904f388ce..0f6ee09f7256 100644 > --- a/tools/perf/Documentation/perf-script.txt > +++ b/tools/perf/Documentation/perf-script.txt > @@ -212,6 +212,9 @@ OPTIONS > --hide-call-graph:: > When printing symbols do not display call chain. > > +--stop-bt:: > + Stop display of callgraph at these symbols > + > -C:: > --cpu:: Only report samples for the list of CPUs provided. Multiple CPUs can > be provided as a comma-separated list with no space: 0,1. Ranges of > diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c > index e1daff36d070..066b4bf73780 100644 > --- a/tools/perf/builtin-script.c > +++ b/tools/perf/builtin-script.c > @@ -2151,6 +2151,8 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused) > "system-wide collection from all CPUs"), > OPT_STRING('S', "symbols", &symbol_conf.sym_list_str, "symbol[,symbol...]", > "only consider these symbols"), > + OPT_STRING(0, "stop-bt", &symbol_conf.bt_stop_list_str, "symbol[,symbol...]", > + "Stop display of callgraph at these symbols"), > OPT_STRING('C', "cpu", &cpu_list, "cpu", "list of cpus to profile"), > OPT_STRING('c', "comms", &symbol_conf.comm_list_str, "comm[,comm...]", > "only display events for these comms"), > diff --git a/tools/perf/util/evsel_fprintf.c b/tools/perf/util/evsel_fprintf.c > index 53bb614feafb..123fed7e5143 100644 > --- a/tools/perf/util/evsel_fprintf.c > +++ b/tools/perf/util/evsel_fprintf.c > @@ -162,6 +162,14 @@ int sample__fprintf_callchain(struct perf_sample *sample, int left_alignment, > if (!print_oneline) > printed += fprintf(fp, "\n"); > > + if (symbol_conf.bt_stop_list && > + node->sym && > + node->sym->name && > + strlist__has_entry(symbol_conf.bt_stop_list, > + node->sym->name)) { > + break; > + } > + > callchain_cursor_advance(cursor); > first = false; > } > diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c > index aecff69a510d..a7cb8090ff78 100644 > --- a/tools/perf/util/symbol.c > +++ b/tools/perf/util/symbol.c > @@ -2032,6 +2032,10 @@ int symbol__init(struct perf_env *env) > symbol_conf.sym_list_str, "symbol") < 0) > goto out_free_tid_list; > > + if (setup_list(&symbol_conf.bt_stop_list, > + symbol_conf.bt_stop_list_str, "symbol") < 0) > + goto out_free_sym_list; > + > /* > * A path to symbols of "/" is identical to "" > * reset here for simplicity. > @@ -2049,6 +2053,8 @@ int symbol__init(struct perf_env *env) > symbol_conf.initialized = true; > return 0; > > +out_free_sym_list: > + strlist__delete(symbol_conf.sym_list); > out_free_tid_list: > intlist__delete(symbol_conf.tid_list); > out_free_pid_list: > @@ -2064,6 +2070,7 @@ void symbol__exit(void) > { > if (!symbol_conf.initialized) > return; > + strlist__delete(symbol_conf.bt_stop_list); > strlist__delete(symbol_conf.sym_list); > strlist__delete(symbol_conf.dso_list); > strlist__delete(symbol_conf.comm_list); > @@ -2071,6 +2078,7 @@ void symbol__exit(void) > intlist__delete(symbol_conf.pid_list); > vmlinux_path__exit(); > symbol_conf.sym_list = symbol_conf.dso_list = symbol_conf.comm_list = NULL; > + symbol_conf.bt_stop_list = NULL; > symbol_conf.initialized = false; > } > > diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h > index dec7e2d44885..bbbda3da2f77 100644 > --- a/tools/perf/util/symbol.h > +++ b/tools/perf/util/symbol.h > @@ -131,14 +131,16 @@ struct symbol_conf { > *pid_list_str, > *tid_list_str, > *sym_list_str, > - *col_width_list_str; > + *col_width_list_str, > + *bt_stop_list_str; > struct strlist *dso_list, > *comm_list, > *sym_list, > *dso_from_list, > *dso_to_list, > *sym_from_list, > - *sym_to_list; > + *sym_to_list, > + *bt_stop_list; > struct intlist *pid_list, > *tid_list; > const char *symfs; > -- > 2.7.4 (Apple Git-66)
| |