perf tools: Create hybrid flag in target
authorJin Yao <yao.jin@linux.intel.com>
Fri, 23 Jul 2021 06:34:32 +0000 (14:34 +0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 11 Aug 2021 19:04:33 +0000 (16:04 -0300)
The user may count or collect only on a cpu list via '-C/--cpus' option.

Previously cpus for an evsel were retrieved from PMU's sysfs. But if the
target cpu list is defined, the retrieved cpus are not kept and the
target cpu list is used instead.

But for hybrid system, we can't directly use target cpu list. The cpu
list may not be available on hybrid pmu (e.g. cpu_core or cpu_atom).  So
we should not set the 'has_user_cpus' flag for hybrid system.

The difficulity is that we can't call perf_pmu__has_hybrid() in evlist.c
to check hybrid system otherwise 'perf test python' would be failed
(undefined symbol for perf_pmu__has_hybrid). If we add pmu.c to
python-ext-sources, too many symbol dependencies are hard to resolve.

We use an alternative method by using a new 'hybrid' flag in target
for hybrid system checking.

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jin Yao <yao.jin@intel.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https //lore.kernel.org/r/20210723063433.7318-3-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/evlist.c
tools/perf/util/target.h

index 47581a2..06f8890 100644 (file)
@@ -1002,7 +1002,7 @@ int evlist__create_maps(struct evlist *evlist, struct target *target)
        if (!cpus)
                goto out_delete_threads;
 
-       evlist->core.has_user_cpus = !!target->cpu_list;
+       evlist->core.has_user_cpus = !!target->cpu_list && !target->hybrid;
 
        perf_evlist__set_maps(&evlist->core, cpus, threads);
 
index 4ff5621..daec6cb 100644 (file)
@@ -17,6 +17,7 @@ struct target {
        bool         default_per_cpu;
        bool         per_thread;
        bool         use_bpf;
+       bool         hybrid;
        const char   *attr_map;
 };