Messages in this thread | | | Date | Wed, 1 Apr 2015 13:54:53 +0200 | From | Jiri Olsa <> | Subject | Re: [PATCH V7 06/25] perf record: Extend -m option for AUX area tracing mmap pages |
| |
On Tue, Mar 31, 2015 at 02:38:35PM +0300, Adrian Hunter wrote: > Extend the -m option so that the number > of mmap pages for AUX area tracing > can be specified by adding a comma followed > by the number of pages.
Acked-by: Jiri Olsa <jolsa@kernel.org>
> > Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> > --- > tools/perf/Documentation/perf-record.txt | 2 ++ > tools/perf/builtin-record.c | 49 ++++++++++++++++++++++++++++++-- > tools/perf/util/evlist.c | 10 +++++-- > tools/perf/util/evlist.h | 1 + > 4 files changed, 56 insertions(+), 6 deletions(-) > > diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt > index 355c4f5..e78dd80 100644 > --- a/tools/perf/Documentation/perf-record.txt > +++ b/tools/perf/Documentation/perf-record.txt > @@ -108,6 +108,8 @@ OPTIONS > Number of mmap data pages (must be a power of two) or size > specification with appended unit character - B/K/M/G. The > size is rounded up to have nearest pages power of two value. > + Also, by adding a comma, the number of mmap pages for AUX > + area tracing can be specified. > > --group:: > Put all events in a single event group. This precedes the --event > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c > index 0de9432..56502e5 100644 > --- a/tools/perf/builtin-record.c > +++ b/tools/perf/builtin-record.c > @@ -771,6 +771,49 @@ static int perf_record_config(const char *var, const char *value, void *cb) > return perf_default_config(var, value, cb); > } > > +static int record__parse_mmap_pages(const struct option *opt, > + const char *str, > + int unset __maybe_unused) > +{ > + struct record_opts *opts = opt->value; > + char *s, *p; > + unsigned int mmap_pages; > + int ret; > + > + if (!str) > + return -EINVAL; > + > + s = strdup(str); > + if (!s) > + return -ENOMEM; > + > + p = strchr(s, ','); > + if (p) > + *p = '\0'; > + > + if (*s) { > + ret = __perf_evlist__parse_mmap_pages(&mmap_pages, s); > + if (ret) > + goto out_free; > + opts->mmap_pages = mmap_pages; > + } > + > + if (!p) { > + ret = 0; > + goto out_free; > + } > + > + ret = __perf_evlist__parse_mmap_pages(&mmap_pages, p + 1); > + if (ret) > + goto out_free; > + > + opts->auxtrace_mmap_pages = mmap_pages; > + > +out_free: > + free(s); > + return ret; > +} > + > static const char * const __record_usage[] = { > "perf record [<options>] [<command>]", > "perf record [<options>] -- <command> [<options>]", > @@ -851,9 +894,9 @@ struct option __record_options[] = { > &record.opts.no_inherit_set, > "child tasks do not inherit counters"), > OPT_UINTEGER('F', "freq", &record.opts.user_freq, "profile at this frequency"), > - OPT_CALLBACK('m', "mmap-pages", &record.opts.mmap_pages, "pages", > - "number of mmap data pages", > - perf_evlist__parse_mmap_pages), > + OPT_CALLBACK('m', "mmap-pages", &record.opts, "pages[,pages]", > + "number of mmap data pages and AUX area tracing mmap pages", > + record__parse_mmap_pages), > OPT_BOOLEAN(0, "group", &record.opts.group, > "put the counters into a counter group"), > OPT_CALLBACK_NOOPT('g', NULL, &record.opts, > diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c > index 3481265..9a2243f 100644 > --- a/tools/perf/util/evlist.c > +++ b/tools/perf/util/evlist.c > @@ -1000,10 +1000,8 @@ static long parse_pages_arg(const char *str, unsigned long min, > return pages; > } > > -int perf_evlist__parse_mmap_pages(const struct option *opt, const char *str, > - int unset __maybe_unused) > +int __perf_evlist__parse_mmap_pages(unsigned int *mmap_pages, const char *str) > { > - unsigned int *mmap_pages = opt->value; > unsigned long max = UINT_MAX; > long pages; > > @@ -1020,6 +1018,12 @@ int perf_evlist__parse_mmap_pages(const struct option *opt, const char *str, > return 0; > } > > +int perf_evlist__parse_mmap_pages(const struct option *opt, const char *str, > + int unset __maybe_unused) > +{ > + return __perf_evlist__parse_mmap_pages(opt->value, str); > +} > + > /** > * perf_evlist__mmap_ex - Create mmaps to receive events. > * @evlist: list of events > diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h > index beed571..221ac3d 100644 > --- a/tools/perf/util/evlist.h > +++ b/tools/perf/util/evlist.h > @@ -124,6 +124,7 @@ int perf_evlist__start_workload(struct perf_evlist *evlist); > > struct option; > > +int __perf_evlist__parse_mmap_pages(unsigned int *mmap_pages, const char *str); > int perf_evlist__parse_mmap_pages(const struct option *opt, > const char *str, > int unset); > -- > 1.9.1 >
| |