From: Jiri Olsa <jolsa@redhat.com>
To: "Jin, Yao" <yao.jin@linux.intel.com>
Cc: acme@kernel.org, jolsa@kernel.org, peterz@infradead.org,
mingo@redhat.com, alexander.shishkin@linux.intel.com,
Linux-kernel@vger.kernel.org, ak@linux.intel.com,
kan.liang@intel.com, yao.jin@intel.com
Subject: Re: [PATCH v3 3/3] perf tools: Enable on a list of CPUs for hybrid
Date: Tue, 20 Jul 2021 11:16:35 +0200 [thread overview]
Message-ID: <YPaUc3iodIASdYRY@krava> (raw)
In-Reply-To: <ecf0e815-616f-0a08-cefd-baac93c0e47d@linux.intel.com>
On Tue, Jul 20, 2021 at 03:07:02PM +0800, Jin, Yao wrote:
SNIP
>
> OK, evlist__fix_cpus() is better, use this name in v4.
>
> > > +{
> > > + struct perf_cpu_map *cpus;
> > > + struct evsel *evsel, *tmp;
> > > + struct perf_pmu *pmu;
> > > + int ret, unmatched_count = 0, events_nr = 0;
> > > +
> > > + if (!perf_pmu__has_hybrid() || !cpu_list)
> > > + return 0;
> > > +
> > > + cpus = perf_cpu_map__new(cpu_list);
> > > + if (!cpus)
> > > + return -1;
> > > +
> > > + evlist__for_each_entry_safe(evlist, tmp, evsel) {
> > > + struct perf_cpu_map *matched_cpus, *unmatched_cpus;
> > > + char buf1[128], buf2[128];
> > > +
> > > + pmu = perf_pmu__find_hybrid_pmu(evsel->pmu_name);
> > > + if (!pmu)
> > > + continue;
> > > +
> > > + ret = perf_pmu__cpus_match(pmu, cpus, &matched_cpus,
> > > + &unmatched_cpus);
> > > + if (ret)
> > > + goto out;
> > > +
> > > + events_nr++;
> > > +
> > > + if (matched_cpus->nr > 0 && (unmatched_cpus->nr > 0 ||
> > > + matched_cpus->nr < cpus->nr ||
> > > + matched_cpus->nr < pmu->cpus->nr)) {
> > > + perf_cpu_map__put(evsel->core.cpus);
> > > + perf_cpu_map__put(evsel->core.own_cpus);
> > > + evsel->core.cpus = perf_cpu_map__get(matched_cpus);
> > > + evsel->core.own_cpus = perf_cpu_map__get(matched_cpus);
> >
> > I'm bit confused in here.. AFAIUI there's 2 evsel objects create
> > for hybrid 'cycles' ... should they have already proper cpus set?
> >
>
> For 'cycles', yes two evsels are created automatically. One is for atom CPU
> (e.g. 8-11), the other is for core CPU (e.g. 0-7). In this example, these 2
> evsels have already the cpus set.
hum, so those evsels are created with pmu's cpus, right?
>
> While the 'cpus' here is just the user specified cpu list.
> cpus = perf_cpu_map__new(cpu_list);
then I think they will be changed by evlist__create_maps
with whatever user wants?
could we just change __perf_evlist__propagate_maps to follow
pmu's cpus?
jirka
>
> We need to check that the cpu in 'cpus' is available on hybrid pmu or not
> and adjust the evsel->core.cpus according the matching results.
>
> > > +
> > > + if (unmatched_cpus->nr > 0) {
> > > + cpu_map__snprint(matched_cpus, buf1, sizeof(buf1));
> > > + pr_warning("WARNING: use %s in '%s' for '%s', skip other cpus in list.\n",
> > > + buf1, pmu->name, evsel->name);
> > > + }
> > > + }
> > > +
> > > + if (matched_cpus->nr == 0) {
> > > + evlist__remove(evlist, evsel);
> > > + evsel__delete(evsel);
> > > +
> > > + cpu_map__snprint(cpus, buf1, sizeof(buf1));
> > > + cpu_map__snprint(pmu->cpus, buf2, sizeof(buf2));
> > > + pr_warning("WARNING: %s isn't a '%s', please use a CPU list in the '%s' range (%s)\n",
> > > + buf1, pmu->name, pmu->name, buf2);
> > > + unmatched_count++;
> > > + }
> >
> > hum, should we rather fail in here?
> >
>
> perf stat -e cpu_core/cycles/,cpu_atom/instructions/ -C11
>
> CPU11 is atom CPU so the evsel 'cpu_core/cycles/' is failed but cpu_atom/instructions/ is OK.
>
> Don't we report the partially successful event?
>
> Thanks
> Jin Yao
>
> > jirka
> >
>
next prev parent reply other threads:[~2021-07-20 9:18 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-12 7:12 [PATCH v3 0/3] perf tool: Enable cpu list for hybrid Jin Yao
2021-07-12 7:12 ` [PATCH v3 1/3] libperf: Add perf_cpu_map__default_new() Jin Yao
2021-07-12 7:12 ` [PATCH v3 2/3] perf tools: Create hybrid flag in target Jin Yao
2021-07-12 7:12 ` [PATCH v3 3/3] perf tools: Enable on a list of CPUs for hybrid Jin Yao
2021-07-19 19:36 ` Jiri Olsa
2021-07-20 7:07 ` Jin, Yao
2021-07-20 9:16 ` Jiri Olsa [this message]
2021-07-21 4:30 ` Jin, Yao
2021-07-22 10:19 ` Jiri Olsa
2021-07-23 0:49 ` Jin, Yao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YPaUc3iodIASdYRY@krava \
--to=jolsa@redhat.com \
--cc=Linux-kernel@vger.kernel.org \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@intel.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=yao.jin@intel.com \
--cc=yao.jin@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.