Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1438699 > unrolled thread
| Started by | Mark Rutland <mark.rutland@arm.com> |
|---|---|
| First post | 2016-07-07 18:10 +0200 |
| Last post | 2016-07-08 10:00 +0200 |
| Articles | 2 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[RFC PATCH 3/3] perf: util: only open events on CPUs an evsel permits Mark Rutland <mark.rutland@arm.com> - 2016-07-07 18:10 +0200
Re: [RFC PATCH 3/3] perf: util: only open events on CPUs an evsel permits Jiri Olsa <jolsa@redhat.com> - 2016-07-08 10:00 +0200
| From | Mark Rutland <mark.rutland@arm.com> |
|---|---|
| Date | 2016-07-07 18:10 +0200 |
| Subject | [RFC PATCH 3/3] perf: util: only open events on CPUs an evsel permits |
| Message-ID | <rSk2d-Ok-11@gated-at.bofh.it> |
In systems with heterogeneous CPU PMUs, it's possible for each evsel to
cover a distinct set of CPUs, and hence the cpu_map associated with each
evsel may have a distinct idx<->id mapping. Any of these may be distinct from
the evlist's cpu map.
Events can be tied to the same fd so long as they use the same per-cpu
ringbuffer (i.e. so long as they are on the same CPU). To acquire the
correct FDs, we must compare the Linux logical IDs rather than the evsel
or evlist indices.
This path adds logic to perf_evlist__mmap_per_evsel to handle this,
translating IDs as required. As PMUs may cover a subset of CPUs from the
evlist, we skip the CPUs a PMU cannot handle.
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: He Kuang <hekuang@huawei.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: linux-kernel@vger.kernel.org
---
tools/perf/util/evlist.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index e82ba90..0b5b1be 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -984,17 +984,24 @@ static int __perf_evlist__mmap(struct perf_evlist *evlist, int idx,
}
static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx,
- struct mmap_params *mp, int cpu,
+ struct mmap_params *mp, int cpu_idx,
int thread, int *output)
{
struct perf_evsel *evsel;
+ int evlist_cpu = cpu_map__cpu(evlist->cpus, cpu_idx);
evlist__for_each(evlist, evsel) {
int fd;
+ int cpu;
if (evsel->system_wide && thread)
continue;
+ if (!cpu_map__has(evsel->cpus, evlist_cpu))
+ continue;
+
+ cpu = cpu_map__idx(evsel->cpus, evlist_cpu);
+
fd = FD(evsel, cpu, thread);
if (*output == -1) {
--
1.9.1
[toc] | [next] | [standalone]
| From | Jiri Olsa <jolsa@redhat.com> |
|---|---|
| Date | 2016-07-08 10:00 +0200 |
| Subject | Re: [RFC PATCH 3/3] perf: util: only open events on CPUs an evsel permits |
| Message-ID | <rSyRz-1NP-1@gated-at.bofh.it> |
| In reply to | #1438699 |
On Thu, Jul 07, 2016 at 05:04:34PM +0100, Mark Rutland wrote:
> In systems with heterogeneous CPU PMUs, it's possible for each evsel to
> cover a distinct set of CPUs, and hence the cpu_map associated with each
> evsel may have a distinct idx<->id mapping. Any of these may be distinct from
> the evlist's cpu map.
>
> Events can be tied to the same fd so long as they use the same per-cpu
> ringbuffer (i.e. so long as they are on the same CPU). To acquire the
> correct FDs, we must compare the Linux logical IDs rather than the evsel
> or evlist indices.
>
> This path adds logic to perf_evlist__mmap_per_evsel to handle this,
> translating IDs as required. As PMUs may cover a subset of CPUs from the
> evlist, we skip the CPUs a PMU cannot handle.
>
> Signed-off-by: Mark Rutland <mark.rutland@arm.com>
> Cc: Adrian Hunter <adrian.hunter@intel.com>
> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
> Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
> Cc: He Kuang <hekuang@huawei.com>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: Jiri Olsa <jolsa@kernel.org>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Cc: Wang Nan <wangnan0@huawei.com>
> Cc: linux-kernel@vger.kernel.org
> ---
> tools/perf/util/evlist.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
> index e82ba90..0b5b1be 100644
> --- a/tools/perf/util/evlist.c
> +++ b/tools/perf/util/evlist.c
> @@ -984,17 +984,24 @@ static int __perf_evlist__mmap(struct perf_evlist *evlist, int idx,
> }
>
> static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx,
> - struct mmap_params *mp, int cpu,
> + struct mmap_params *mp, int cpu_idx,
> int thread, int *output)
> {
> struct perf_evsel *evsel;
> + int evlist_cpu = cpu_map__cpu(evlist->cpus, cpu_idx);
>
> evlist__for_each(evlist, evsel) {
> int fd;
> + int cpu;
>
> if (evsel->system_wide && thread)
> continue;
>
> + if (!cpu_map__has(evsel->cpus, evlist_cpu))
> + continue;
> +
> + cpu = cpu_map__idx(evsel->cpus, evlist_cpu);
you basicaly call cpu_map__idx twice in here,
I think it might be better call it just once
and check the cpu for -1
jirka
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web