lkml.org 
[lkml]   [2015]   [Apr]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 06/44] perf record: Extend -m option for AUX area tracing mmap pages
    Date
    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.

    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    ---
    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 4847a79..76a141e 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 8879efe..009ec31 100644
    --- a/tools/perf/builtin-record.c
    +++ b/tools/perf/builtin-record.c
    @@ -855,6 +855,49 @@ static int parse_clockid(const struct option *opt, const char *str, int unset)
    return -1;
    }

    +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>]",
    @@ -935,9 +978,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 a588e01..e4289e6 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


    \
     
     \ /
      Last update: 2015-04-09 18:42    [W:3.802 / U:1.256 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site