lkml.org 
[lkml]   [2018]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.15 149/189] perf record: Fix period option handling
    Date
    From: Jiri Olsa <jolsa@kernel.org>

    [ Upstream commit f290aa1ffa45ed7e37599840878b4dae68269ee1 ]

    Stephan reported we don't unset PERIOD sample type when --no-period is
    specified. Adding the unset check and reset PERIOD if --no-period is
    specified.

    Committer notes:

    Check the sample_type, it shouldn't have PERF_SAMPLE_PERIOD there when
    --no-period is used.

    Before:

    # perf record --no-period sleep 1
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.018 MB perf.data (7 samples) ]
    # perf evlist -v
    cycles:ppp: size: 112, { sample_period, sample_freq }: 4000, sample_type: IP|TID|TIME|PERIOD, disabled: 1, inherit: 1, mmap: 1, comm: 1, freq: 1, enable_on_exec: 1, task: 1, precise_ip: 3, sample_id_all: 1, exclude_guest: 1, mmap2: 1, comm_exec: 1
    #

    After:

    [root@jouet ~]# perf record --no-period sleep 1
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.019 MB perf.data (17 samples) ]
    [root@jouet ~]# perf evlist -v
    cycles:ppp: size: 112, { sample_period, sample_freq }: 4000, sample_type: IP|TID|TIME, disabled: 1, inherit: 1, mmap: 1, comm: 1, freq: 1, enable_on_exec: 1, task: 1, precise_ip: 3, sample_id_all: 1, exclude_guest: 1, mmap2: 1, comm_exec: 1
    [root@jouet ~]#

    Reported-by: Stephane Eranian <eranian@google.com>
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Tested-by: Stephane Eranian <eranian@google.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/20180201083812.11359-3-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    tools/perf/builtin-record.c | 3 ++-
    tools/perf/perf.h | 1 +
    tools/perf/util/evsel.c | 11 ++++++++---
    3 files changed, 11 insertions(+), 4 deletions(-)

    diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
    index 003255910c05..2ccb709c0b08 100644
    --- a/tools/perf/builtin-record.c
    +++ b/tools/perf/builtin-record.c
    @@ -1533,7 +1533,8 @@ static struct option __record_options[] = {
    OPT_BOOLEAN_SET('T', "timestamp", &record.opts.sample_time,
    &record.opts.sample_time_set,
    "Record the sample timestamps"),
    - OPT_BOOLEAN('P', "period", &record.opts.period, "Record the sample period"),
    + OPT_BOOLEAN_SET('P', "period", &record.opts.period, &record.opts.period_set,
    + "Record the sample period"),
    OPT_BOOLEAN('n', "no-samples", &record.opts.no_samples,
    "don't sample"),
    OPT_BOOLEAN_SET('N', "no-buildid-cache", &record.no_buildid_cache,
    diff --git a/tools/perf/perf.h b/tools/perf/perf.h
    index 2357f4ccc9c7..cfe46236a5e5 100644
    --- a/tools/perf/perf.h
    +++ b/tools/perf/perf.h
    @@ -50,6 +50,7 @@ struct record_opts {
    bool sample_time_set;
    bool sample_cpu;
    bool period;
    + bool period_set;
    bool running_time;
    bool full_auxtrace;
    bool auxtrace_snapshot_mode;
    diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
    index 784d852c91cc..d23a8c51b307 100644
    --- a/tools/perf/util/evsel.c
    +++ b/tools/perf/util/evsel.c
    @@ -948,9 +948,6 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts,
    if (target__has_cpu(&opts->target) || opts->sample_cpu)
    perf_evsel__set_sample_bit(evsel, CPU);

    - if (opts->period)
    - perf_evsel__set_sample_bit(evsel, PERIOD);
    -
    /*
    * When the user explicitly disabled time don't force it here.
    */
    @@ -1052,6 +1049,14 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts,
    apply_config_terms(evsel, opts);

    evsel->ignore_missing_thread = opts->ignore_missing_thread;
    +
    + /* The --period option takes the precedence. */
    + if (opts->period_set) {
    + if (opts->period)
    + perf_evsel__set_sample_bit(evsel, PERIOD);
    + else
    + perf_evsel__reset_sample_bit(evsel, PERIOD);
    + }
    }

    static int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads)
    --
    2.15.1
    \
     
     \ /
      Last update: 2018-04-09 05:43    [W:3.450 / U:0.368 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site