Skip to content

Commit

Permalink
perf stat: Uniquify hybrid event name
Browse files Browse the repository at this point in the history
It would be useful to let user know the pmu which the event belongs to.
perf-stat has supported '--no-merge' option and it can print the pmu
name after the event name, such as:

"cycles [cpu_core]"

Now this option is enabled by default for hybrid platform but change
the format to:

"cpu_core/cycles/"

If user configs the name, we still use the user specified name.

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Reviewed-by: Jiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
ink: https://lore.kernel.org/r/20210427070139.25256-8-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Jin Yao authored and Arnaldo Carvalho de Melo committed Apr 29, 2021
1 parent c5a26ea commit 1227942
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 2 deletions.
4 changes: 4 additions & 0 deletions tools/perf/builtin-stat.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
#include "util/pfm.h"
#include "util/bpf_counter.h"
#include "util/iostat.h"
#include "util/pmu-hybrid.h"
#include "asm/bug.h"

#include <linux/time64.h>
Expand Down Expand Up @@ -2402,6 +2403,9 @@ int cmd_stat(int argc, const char **argv)

evlist__check_cpu_maps(evsel_list);

if (perf_pmu__has_hybrid())
stat_config.no_merge = true;

/*
* Initialize thread_map with comm names,
* so we could print it out on output.
Expand Down
1 change: 1 addition & 0 deletions tools/perf/util/evsel.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ struct evsel {
bool merged_stat;
bool reset_group;
bool errored;
bool use_config_name;
struct hashmap *per_pkg_mask;
struct evsel *leader;
struct list_head config_terms;
Expand Down
3 changes: 3 additions & 0 deletions tools/perf/util/parse-events.c
Original file line number Diff line number Diff line change
Expand Up @@ -1567,6 +1567,9 @@ int parse_events_add_pmu(struct parse_events_state *parse_state,
if (!evsel)
return -ENOMEM;

if (evsel->name)
evsel->use_config_name = true;

evsel->pmu_name = name ? strdup(name) : NULL;
evsel->use_uncore_alias = use_uncore_alias;
evsel->percore = config_term_percore(&evsel->config_terms);
Expand Down
15 changes: 13 additions & 2 deletions tools/perf/util/stat-display.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include <api/fs/fs.h>
#include "util.h"
#include "iostat.h"
#include "pmu-hybrid.h"

#define CNTR_NOT_SUPPORTED "<not supported>"
#define CNTR_NOT_COUNTED "<not counted>"
Expand Down Expand Up @@ -538,6 +539,7 @@ static void uniquify_event_name(struct evsel *counter)
{
char *new_name;
char *config;
int ret = 0;

if (counter->uniquified_name ||
!counter->pmu_name || !strncmp(counter->name, counter->pmu_name,
Expand All @@ -552,8 +554,17 @@ static void uniquify_event_name(struct evsel *counter)
counter->name = new_name;
}
} else {
if (asprintf(&new_name,
"%s [%s]", counter->name, counter->pmu_name) > 0) {
if (perf_pmu__has_hybrid()) {
if (!counter->use_config_name) {
ret = asprintf(&new_name, "%s/%s/",
counter->pmu_name, counter->name);
}
} else {
ret = asprintf(&new_name, "%s [%s]",
counter->name, counter->pmu_name);
}

if (ret) {
free(counter->name);
counter->name = new_name;
}
Expand Down

0 comments on commit 1227942

Please sign in to comment.