[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <1607080216-36968-1-git-send-email-john.garry@huawei.com>
Date: Fri, 4 Dec 2020 19:10:06 +0800
From: John Garry <john.garry@...wei.com>
To: <acme@...nel.org>, <peterz@...radead.org>, <mingo@...hat.com>,
<mark.rutland@....com>, <alexander.shishkin@...ux.intel.com>,
<jolsa@...hat.com>, <namhyung@...nel.org>, <will@...nel.org>,
<mathieu.poirier@...aro.org>, <leo.yan@...aro.org>,
<irogers@...gle.com>
CC: <qiangqing.zhang@....com>, <kjain@...ux.ibm.com>,
<linux-kernel@...r.kernel.org>, <zhangshaokun@...ilicon.com>,
<linux-arm-kernel@...ts.infradead.org>, <linuxarm@...wei.com>,
<kan.liang@...ux.intel.com>, <kim.phillips@....com>,
<ak@...ux.intel.com>, John Garry <john.garry@...wei.com>
Subject: [PATCH v6 00/10] perf pmu-events: Support event aliasing for system PMUs
Currently event aliasing and metrics is supported for only CPU and uncore
PMUs. More specifically, only uncore PMUs aliasing is supported for when
the uncore PMUs are fixed for a CPU, which may not always be the case for
certain architectures.
This series adds support for PMU event aliasing and metrics for system and
other uncore PMUs which are not tied to a specific CPU.
For this, we introduce system event tables in generated pmu-events.c,
which contain a per-SoC table of events of all its system PMUs. Each
per-PMU event is matched by a "COMPAT" property.
When creating aliases and metrics for PMUs, we treat core/uncore and
system PMUs differently:
- For CPU PMUs, we always match for the event mapfile based on the CPUID.
This has not changed.
- For an system PMUs, we iterate through all the events in all the system
PMU tables.
Matches are based on the "COMPAT" property matching the PMU sysfs
identifier contents, in /sys/bus/event_source/devices/<PMU>/identifier
Uncore PMUs, may be matched via CPUID or same as system PMU, depending
on whether the uncore PMU is tied to a specific CPUID.
Initial reference support is also added for for imx8mm DDR PMU, and it
looks like this for the user:
$ ./perf list metric
List of pre-defined events (to be used in -e):
Metric Groups:
No_group:
imx8mm_ddr_read.all
[bytes all masters read from ddr based on read-cycles event. Unit: imx8_ddr ]
imx8mm_ddr_write.all
[bytes all masters write to ddr based on write-cycles event. Unit: imx8_ddr ]
$ sudo ./perf stat -v -M imx8mm_ddr_read.all sleep 1
metric expr imx8mm_ddr.read_cycles * 4 * 4 for imx8mm_ddr_read.all
found event imx8mm_ddr.read_cycles
adding {imx8mm_ddr.read_cycles}:W
imx8mm_ddr.read_cycles -> imx8_ddr0/event=0x2a/
imx8mm_ddr.read_cycles -> imx8_ddr1/event=0x2a/
Control descriptor is not initialized
imx8mm_ddr.read_cycles: 2 1001455480 1001455480
imx8mm_ddr.read_cycles: 3 1001454940 1001454940
Performance counter stats for 'system wide':
5 imx8mm_ddr.read_cycles # 0.1 KB imx8mm_ddr_read.all
1.001493170 seconds time elapsed
I have not included HiSilicon hip09 events from earlier RFC since it is a
new platform and not all event codes are available yet, so they can come
later.
Series is here:
https://github.com/hisilicon/kernel-dev/tree/private-topic-perf-5.10-sys-pmu-events-v6
Kernel part accepted / pending in the following:
- https://lore.kernel.org/linux-arm-kernel/160631703729.2332128.13220150013299384201.b4-ty@kernel.org/
- https://lore.kernel.org/linux-devicetree/9468d155-f285-0d03-181b-fe378042f858@huawei.com/
Differences to v5:
- Add tags from Kajol Jain (thanks)
- For now, don't include HiSilicon hip09 events until all event codes
available
- Rebase
Differences to v4:
- Drop hack for fixing metrics containing aliases which match multiple
PMUs, and add a proper fix attempt
- Rebase to acme perf/core from 30 Oct
- Fix up imx8 event names according to request from Joakim
Joakim Zhang (1):
perf vendor events: Add JSON metrics for imx8mm DDR Perf
John Garry (9):
perf jevents: Add support for an extra directory level
perf jevents: Add support for system events tables
perf pmu: Add pmu_id()
perf pmu: Add pmu_add_sys_aliases()
perf evlist: Change perf_evlist__splice_list_tail() ordering
perf metricgroup: Fix metrics using aliases covering multiple PMUs
perf metricgroup: Split up metricgroup__print()
perf metricgroup: Support printing metric groups for system PMUs
perf metricgroup: Support adding metrics for system PMUs
.../arch/arm64/freescale/imx8mm/sys/ddrc.json | 39 +++
.../arm64/freescale/imx8mm/sys/metrics.json | 18 ++
tools/perf/pmu-events/jevents.c | 87 +++++-
tools/perf/pmu-events/pmu-events.h | 6 +
tools/perf/util/evlist.c | 19 +-
tools/perf/util/metricgroup.c | 254 +++++++++++++-----
tools/perf/util/pmu.c | 96 +++++++
tools/perf/util/pmu.h | 3 +
8 files changed, 451 insertions(+), 71 deletions(-)
create mode 100644 tools/perf/pmu-events/arch/arm64/freescale/imx8mm/sys/ddrc.json
create mode 100644 tools/perf/pmu-events/arch/arm64/freescale/imx8mm/sys/metrics.json
--
2.26.2
Powered by blists - more mailing lists