All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Garry <john.garry@huawei.com>
To: <will@kernel.org>, <mathieu.poirier@linaro.org>,
	<leo.yan@linaro.org>, <peterz@infradead.org>, <mingo@redhat.com>,
	<acme@kernel.org>, <mark.rutland@arm.com>,
	<alexander.shishkin@linux.intel.com>, <jolsa@redhat.com>,
	<namhyung@kernel.org>
Cc: <irogers@google.com>, <linux-kernel@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>, <linuxarm@huawei.com>,
	<zhangshaokun@hisilicon.com>, <qiangqing.zhang@nxp.com>,
	<kjain@linux.ibm.com>, John Garry <john.garry@huawei.com>
Subject: [PATCH 1/5] perf metricgroup: Support printing metrics for arm64
Date: Wed, 3 Mar 2021 23:22:14 +0800	[thread overview]
Message-ID: <1614784938-27080-2-git-send-email-john.garry@huawei.com> (raw)
In-Reply-To: <1614784938-27080-1-git-send-email-john.garry@huawei.com>

Calling perf_pmu__find_map(NULL) returns the cpumap for the common CPU
PMU. However arm64 supports heterogeneous-CPU based systems, and so there
may be no common CPU PMU. As such, perf_pmu__find_map(NULL) returns NULL
for arm64.

To support printing metrics for arm64, iterate through all PMUs, looking
for a CPU PMU, and use the cpumap there for determining supported metrics.

For heterogeneous systems (like arm big.LITTLE), supporting metrics has
potential challenges, like not all CPUs in a system not supporting a
specific metric event. So just don't support it for now.

Signed-off-by: John Garry <john.garry@huawei.com>
---
 tools/perf/util/metricgroup.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
index 26c990e32378..9a2a23093961 100644
--- a/tools/perf/util/metricgroup.c
+++ b/tools/perf/util/metricgroup.c
@@ -6,6 +6,7 @@
 /* Manage metrics and groups of metrics from JSON files */
 
 #include "metricgroup.h"
+#include "cpumap.h"
 #include "debug.h"
 #include "evlist.h"
 #include "evsel.h"
@@ -615,10 +616,31 @@ static int metricgroup__print_sys_event_iter(struct pmu_event *pe, void *data)
 				     d->details, d->groups, d->metriclist);
 }
 
+static struct pmu_events_map *find_cpumap(void)
+{
+	struct perf_pmu *pmu = NULL;
+
+	while ((pmu = perf_pmu__scan(pmu))) {
+		if (!is_pmu_core(pmu->name))
+			continue;
+
+		/*
+		 * The cpumap should cover all CPUs. Otherwise, some CPUs may
+		 * not support some events or have different event IDs.
+		 */
+		if (pmu->cpus && pmu->cpus->nr != cpu__max_cpu())
+			return NULL;
+
+		return perf_pmu__find_map(pmu);
+	}
+
+	return NULL;
+}
+
 void metricgroup__print(bool metrics, bool metricgroups, char *filter,
 			bool raw, bool details)
 {
-	struct pmu_events_map *map = perf_pmu__find_map(NULL);
+	struct pmu_events_map *map = find_cpumap();
 	struct pmu_event *pe;
 	int i;
 	struct rblist groups;
-- 
2.26.2


WARNING: multiple messages have this Message-ID (diff)
From: John Garry <john.garry@huawei.com>
To: <will@kernel.org>, <mathieu.poirier@linaro.org>,
	<leo.yan@linaro.org>, <peterz@infradead.org>, <mingo@redhat.com>,
	<acme@kernel.org>, <mark.rutland@arm.com>,
	<alexander.shishkin@linux.intel.com>, <jolsa@redhat.com>,
	<namhyung@kernel.org>
Cc: <irogers@google.com>, <linux-kernel@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>, <linuxarm@huawei.com>,
	<zhangshaokun@hisilicon.com>, <qiangqing.zhang@nxp.com>,
	<kjain@linux.ibm.com>, John Garry <john.garry@huawei.com>
Subject: [PATCH 1/5] perf metricgroup: Support printing metrics for arm64
Date: Wed, 3 Mar 2021 23:22:14 +0800	[thread overview]
Message-ID: <1614784938-27080-2-git-send-email-john.garry@huawei.com> (raw)
In-Reply-To: <1614784938-27080-1-git-send-email-john.garry@huawei.com>

Calling perf_pmu__find_map(NULL) returns the cpumap for the common CPU
PMU. However arm64 supports heterogeneous-CPU based systems, and so there
may be no common CPU PMU. As such, perf_pmu__find_map(NULL) returns NULL
for arm64.

To support printing metrics for arm64, iterate through all PMUs, looking
for a CPU PMU, and use the cpumap there for determining supported metrics.

For heterogeneous systems (like arm big.LITTLE), supporting metrics has
potential challenges, like not all CPUs in a system not supporting a
specific metric event. So just don't support it for now.

Signed-off-by: John Garry <john.garry@huawei.com>
---
 tools/perf/util/metricgroup.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
index 26c990e32378..9a2a23093961 100644
--- a/tools/perf/util/metricgroup.c
+++ b/tools/perf/util/metricgroup.c
@@ -6,6 +6,7 @@
 /* Manage metrics and groups of metrics from JSON files */
 
 #include "metricgroup.h"
+#include "cpumap.h"
 #include "debug.h"
 #include "evlist.h"
 #include "evsel.h"
@@ -615,10 +616,31 @@ static int metricgroup__print_sys_event_iter(struct pmu_event *pe, void *data)
 				     d->details, d->groups, d->metriclist);
 }
 
+static struct pmu_events_map *find_cpumap(void)
+{
+	struct perf_pmu *pmu = NULL;
+
+	while ((pmu = perf_pmu__scan(pmu))) {
+		if (!is_pmu_core(pmu->name))
+			continue;
+
+		/*
+		 * The cpumap should cover all CPUs. Otherwise, some CPUs may
+		 * not support some events or have different event IDs.
+		 */
+		if (pmu->cpus && pmu->cpus->nr != cpu__max_cpu())
+			return NULL;
+
+		return perf_pmu__find_map(pmu);
+	}
+
+	return NULL;
+}
+
 void metricgroup__print(bool metrics, bool metricgroups, char *filter,
 			bool raw, bool details)
 {
-	struct pmu_events_map *map = perf_pmu__find_map(NULL);
+	struct pmu_events_map *map = find_cpumap();
 	struct pmu_event *pe;
 	int i;
 	struct rblist groups;
-- 
2.26.2


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-03-03 18:43 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-03 15:22 [PATCH 0/5] perf arm64 metricgroup support John Garry
2021-03-03 15:22 ` John Garry
2021-03-03 15:22 ` John Garry [this message]
2021-03-03 15:22   ` [PATCH 1/5] perf metricgroup: Support printing metrics for arm64 John Garry
2021-03-04 20:05   ` Jiri Olsa
2021-03-04 20:05     ` Jiri Olsa
2021-03-05 11:06     ` John Garry
2021-03-05 11:06       ` John Garry
2021-03-06 19:34       ` Jiri Olsa
2021-03-06 19:34         ` Jiri Olsa
2021-03-08 16:34         ` John Garry
2021-03-08 16:34           ` John Garry
2021-03-11  8:47         ` John Garry
2021-03-11  8:47           ` John Garry
2021-03-03 15:22 ` [PATCH 2/5] perf metricgroup: Support adding " John Garry
2021-03-03 15:22   ` John Garry
2021-03-03 15:22 ` [PATCH 3/5] perf vendor events arm64: Add Hisi hip08 L1 metrics John Garry
2021-03-03 15:22   ` John Garry
2021-03-03 15:22 ` [PATCH 4/5] perf vendor events arm64: Add Hisi hip08 L2 metrics John Garry
2021-03-03 15:22   ` John Garry
2021-03-03 15:22 ` [PATCH 5/5] perf vendor events arm64: Add Hisi hip08 L3 metrics John Garry
2021-03-03 15:22   ` John Garry

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=1614784938-27080-2-git-send-email-john.garry@huawei.com \
    --to=john.garry@huawei.com \
    --cc=acme@kernel.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=irogers@google.com \
    --cc=jolsa@redhat.com \
    --cc=kjain@linux.ibm.com \
    --cc=leo.yan@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=mark.rutland@arm.com \
    --cc=mathieu.poirier@linaro.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=qiangqing.zhang@nxp.com \
    --cc=will@kernel.org \
    --cc=zhangshaokun@hisilicon.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.