lkml.org 
[lkml]   [2021]   [Feb]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 45/49] perf stat: Merge event counts from all hybrid PMUs
    Date
    From: Jin Yao <yao.jin@linux.intel.com>

    For hybrid events, by default stat aggregates and reports the event counts
    per pmu.

    root@otcpl-adl-s-2:~# ./perf stat -e cycles -a -- sleep 1

    Performance counter stats for 'system wide':

    17,291,386 cycles [cpu_core]
    1,556,803 cycles [cpu_atom]

    1.002154118 seconds time elapsed

    Sometime, it's also useful to aggregate event counts from all PMUs.
    Create a new option '--hybrid-merge' to enable that behavior and report
    the counts without PMUs.

    root@otcpl-adl-s-2:~# ./perf stat -e cycles -a --hybrid-merge -- sleep 1

    Performance counter stats for 'system wide':

    19,041,587 cycles

    1.002195329 seconds time elapsed

    Reviewed-by: Andi Kleen <ak@linux.intel.com>
    Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
    ---
    tools/perf/Documentation/perf-stat.txt | 7 +++++++
    tools/perf/builtin-stat.c | 3 ++-
    tools/perf/util/stat-display.c | 3 ++-
    tools/perf/util/stat.h | 1 +
    4 files changed, 12 insertions(+), 2 deletions(-)

    diff --git a/tools/perf/Documentation/perf-stat.txt b/tools/perf/Documentation/perf-stat.txt
    index b0e357d..3d083a3 100644
    --- a/tools/perf/Documentation/perf-stat.txt
    +++ b/tools/perf/Documentation/perf-stat.txt
    @@ -418,6 +418,13 @@ Multiple events are created from a single event specification when:
    2. Aliases, which are listed immediately after the Kernel PMU events
    by perf list, are used.

    +--hybrid-merge::
    +Merge the hybrid event counts from all PMUs.
    +
    +For hybrid events, by default stat aggregates and reports the event counts
    +per pmu. But sometime, it's also useful to aggregate event counts from all
    +PMUs. This option enables that behavior and reports the counts without PMUs.
    +
    --smi-cost::
    Measure SMI cost if msr/aperf/ and msr/smi/ events are supported.

    diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
    index bfe7305..d367cfe 100644
    --- a/tools/perf/builtin-stat.c
    +++ b/tools/perf/builtin-stat.c
    @@ -1184,6 +1184,7 @@ static struct option stat_options[] = {
    OPT_SET_UINT('A', "no-aggr", &stat_config.aggr_mode,
    "disable CPU count aggregation", AGGR_NONE),
    OPT_BOOLEAN(0, "no-merge", &stat_config.no_merge, "Do not merge identical named events"),
    + OPT_BOOLEAN(0, "hybrid-merge", &stat_config.hybrid_merge, "Merge identical named hybrid events"),
    OPT_STRING('x', "field-separator", &stat_config.csv_sep, "separator",
    "print counts with custom separator"),
    OPT_CALLBACK('G', "cgroup", &evsel_list, "name",
    @@ -2379,7 +2380,7 @@ int cmd_stat(int argc, const char **argv)

    evlist__check_cpu_maps(evsel_list);

    - if (perf_pmu__hybrid_exist())
    + if (perf_pmu__hybrid_exist() && !stat_config.hybrid_merge)
    stat_config.no_merge = true;

    /*
    diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c
    index 961d5ac..21a3f80 100644
    --- a/tools/perf/util/stat-display.c
    +++ b/tools/perf/util/stat-display.c
    @@ -568,6 +568,7 @@ static void collect_all_aliases(struct perf_stat_config *config, struct evsel *c
    !strcmp(alias->pmu_name, counter->pmu_name) ||
    (evsel__is_hybrid_event(alias) &&
    evsel__is_hybrid_event(counter) &&
    + !config->hybrid_merge &&
    strcmp(alias->pmu_name, counter->pmu_name)))
    break;
    alias->merged_stat = true;
    @@ -585,7 +586,7 @@ static bool collect_data(struct perf_stat_config *config, struct evsel *counter,
    cb(config, counter, data, true);
    if (config->no_merge)
    uniquify_event_name(counter);
    - else if (counter->auto_merge_stats)
    + else if (counter->auto_merge_stats || config->hybrid_merge)
    collect_all_aliases(config, counter, cb, data);
    return true;
    }
    diff --git a/tools/perf/util/stat.h b/tools/perf/util/stat.h
    index d85c292..80f6715 100644
    --- a/tools/perf/util/stat.h
    +++ b/tools/perf/util/stat.h
    @@ -123,6 +123,7 @@ struct perf_stat_config {
    bool ru_display;
    bool big_num;
    bool no_merge;
    + bool hybrid_merge;
    bool walltime_run_table;
    bool all_kernel;
    bool all_user;
    --
    2.7.4
    \
     
     \ /
      Last update: 2021-02-08 19:22    [W:2.273 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site