Messages in this thread | | | Date | Sat, 6 Jun 2020 22:42:53 +0800 | From | Changbin Du <> | Subject | Re: [PATCH 05/19] perf ftrace: add option '-l/--list-functions' to list available functions |
| |
On Wed, May 20, 2020 at 05:59:40PM -0300, Arnaldo Carvalho de Melo wrote: > Em Sun, May 10, 2020 at 11:06:14PM +0800, Changbin Du escreveu: > > This adds an option '-l/--list-functions' to list all available functions > > which is read from tracing file 'available_filter_functions'. > > Here, in 'perf probe' we have: > > [acme@five perf]$ perf probe -F tcp_* | head > tcp_abort > tcp_ack > tcp_ack_update_rtt.isra.0 > tcp_add_backlog > tcp_add_reno_sack > tcp_adjust_pcount > tcp_alloc_md5sig_pool > tcp_any_retrans_done.part.0 > tcp_assign_congestion_control > tcp_bpf_clone > [acme@five perf]$ perf probe -h -F > > Usage: perf probe [<options>] 'PROBEDEF' ['PROBEDEF' ...] > or: perf probe [<options>] --add 'PROBEDEF' [--add 'PROBEDEF' ...] > or: perf probe [<options>] --del '[GROUP:]EVENT' ... > or: perf probe --list [GROUP:]EVENT ... > or: perf probe [<options>] --line 'LINEDESC' > or: perf probe [<options>] --vars 'PROBEPOINT' > or: perf probe [<options>] --funcs > > -F, --funcs <[FILTER]> > Show potential probe-able functions. > > [acme@five perf]$ > > So I think we should align with this. > > - Arnaldo > Agreed. Will do that in next revision.
> > Signed-off-by: Changbin Du <changbin.du@gmail.com> > > --- > > tools/perf/builtin-ftrace.c | 43 +++++++++++++++++++++++++++++++++++++ > > 1 file changed, 43 insertions(+) > > > > diff --git a/tools/perf/builtin-ftrace.c b/tools/perf/builtin-ftrace.c > > index 1d30c2d5f88b..8133d910d5d8 100644 > > --- a/tools/perf/builtin-ftrace.c > > +++ b/tools/perf/builtin-ftrace.c > > @@ -33,6 +33,7 @@ struct perf_ftrace { > > struct evlist *evlist; > > struct target target; > > const char *tracer; > > + bool list_avail_functions; > > struct list_head filters; > > struct list_head notrace; > > struct list_head graph_funcs; > > @@ -142,6 +143,43 @@ static int write_tracing_option_file(const char *name, const char *val) > > return ret; > > } > > > > +static int read_tracing_file_to_stdout(const char *name) > > +{ > > + char buf[4096]; > > + char *file; > > + int fd; > > + int ret = -1; > > + > > + file = get_tracing_file(name); > > + if (!file) { > > + pr_debug("cannot get tracing file: %s\n", name); > > + return -1; > > + } > > + > > + fd = open(file, O_RDONLY); > > + if (fd < 0) { > > + pr_debug("cannot open tracing file: %s: %s\n", > > + name, str_error_r(errno, buf, sizeof(buf))); > > + goto out; > > + } > > + > > + /* read contents to stdout */ > > + while (true) { > > + int n = read(fd, buf, sizeof(buf)); > > + if (n <= 0) > > + goto out_close; > > + if (fwrite(buf, n, 1, stdout) != 1) > > + goto out_close; > > + } > > + ret = 0; > > + > > +out_close: > > + close(fd); > > +out: > > + put_tracing_file(file); > > + return ret; > > +} > > + > > static int reset_tracing_cpu(void); > > static void reset_tracing_filters(void); > > > > @@ -332,6 +370,9 @@ static int __cmd_ftrace(struct perf_ftrace *ftrace, int argc, const char **argv) > > signal(SIGCHLD, sig_handler); > > signal(SIGPIPE, sig_handler); > > > > + if (ftrace->list_avail_functions) > > + return read_tracing_file_to_stdout("available_filter_functions"); > > + > > if (reset_tracing_files(ftrace) < 0) { > > pr_err("failed to reset ftrace\n"); > > goto out; > > @@ -483,6 +524,8 @@ int cmd_ftrace(int argc, const char **argv) > > NULL > > }; > > const struct option ftrace_options[] = { > > + OPT_BOOLEAN('L', "list-functions", &ftrace.list_avail_functions, > > + "List available functions to filter"), > > OPT_STRING('p', "pid", &ftrace.target.pid, "pid", > > "trace on existing process id"), > > OPT_INCR('v', "verbose", &verbose, > > -- > > 2.25.1 > > > > -- > > - Arnaldo
-- Cheers, Changbin Du
| |