From: James Clark <james.clark@arm.com>
To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org
Cc: suzuki.poulose@arm.com, gengdongjiu@huawei.com,
wxf.wang@hisilicon.com, liwei391@huawei.com,
liuqi115@hisilicon.com, huawei.libin@huawei.com, nd@arm.com,
linux-perf-users@vger.kernel.org,
Tan Xiaojun <tanxiaojun@huawei.com>,
James Clark <James.Clark@arm.com>,
James Clark <james.clark@arm.com>, Will Deacon <will@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@redhat.com>, Al Grant <al.grant@arm.com>,
Namhyung Kim <namhyung@kernel.org>
Subject: [PATCH v2 4/7] perf tools: Support "branch-misses:pp" on arm64
Date: Thu, 23 Jan 2020 16:07:31 +0000 [thread overview]
Message-ID: <20200123160734.3775-5-james.clark@arm.com> (raw)
In-Reply-To: <20200123160734.3775-1-james.clark@arm.com>
From: Tan Xiaojun <tanxiaojun@huawei.com>
At the suggestion of James Clark, use spe to support the precise
ip of some events. Currently its support event is:
branch-misses.
Example usage:
$ ./perf record -e branch-misses:pp dd if=/dev/zero of=/dev/null count=10000
(:p/pp/ppp is same for this case.)
$ ./perf report --stdio
("--stdio is not necessary")
--------------------------------------------------------------------
...
# Samples: 14 of event 'branch-misses:pp'
# Event count (approx.): 14
#
# Children Self Command Shared Object Symbol
# ........ ........ ....... ................. ..........................
#
14.29% 14.29% dd [kernel.kallsyms] [k] __arch_copy_from_user
14.29% 14.29% dd libc-2.28.so [.] _dl_addr
7.14% 7.14% dd [kernel.kallsyms] [k] __free_pages
7.14% 7.14% dd [kernel.kallsyms] [k] __pi_memcpy
7.14% 7.14% dd [kernel.kallsyms] [k] pagecache_get_page
7.14% 7.14% dd [kernel.kallsyms] [k] unmap_single_vma
7.14% 7.14% dd dd [.] 0x00000000000025ec
7.14% 7.14% dd ld-2.28.so [.] _dl_lookup_symbol_x
7.14% 7.14% dd ld-2.28.so [.] check_match
7.14% 7.14% dd libc-2.28.so [.] __mpn_rshift
7.14% 7.14% dd libc-2.28.so [.] _nl_intern_locale_data
7.14% 7.14% dd libc-2.28.so [.] read_alias_file
...
--------------------------------------------------------------------
Signed-off-by: Tan Xiaojun <tanxiaojun@huawei.com>
Suggested-by: James Clark <James.Clark@arm.com>
Tested-by: Qi Liu <liuqi115@hisilicon.com>
Signed-off-by: James Clark <james.clark@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Tan Xiaojun <tanxiaojun@huawei.com>
Cc: Al Grant <al.grant@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/util/arm-spe.c | 41 +++++++++++++++++++++++++++++++++++++++
tools/perf/util/arm-spe.h | 3 +++
tools/perf/util/evlist.c | 2 ++
3 files changed, 46 insertions(+)
diff --git a/tools/perf/util/arm-spe.c b/tools/perf/util/arm-spe.c
index c99814c58745..0fcaefd386a6 100644
--- a/tools/perf/util/arm-spe.c
+++ b/tools/perf/util/arm-spe.c
@@ -35,6 +35,19 @@
#define MAX_TIMESTAMP (~0ULL)
+#define SPE_ATTR_TS_ENABLE BIT(0)
+#define SPE_ATTR_PA_ENABLE BIT(1)
+#define SPE_ATTR_PCT_ENABLE BIT(2)
+#define SPE_ATTR_JITTER BIT(16)
+#define SPE_ATTR_BRANCH_FILTER BIT(32)
+#define SPE_ATTR_LOAD_FILTER BIT(33)
+#define SPE_ATTR_STORE_FILTER BIT(34)
+
+#define SPE_ATTR_EV_RETIRED BIT(1)
+#define SPE_ATTR_EV_CACHE BIT(3)
+#define SPE_ATTR_EV_TLB BIT(5)
+#define SPE_ATTR_EV_BRANCH BIT(7)
+
struct arm_spe {
struct auxtrace auxtrace;
struct auxtrace_queues queues;
@@ -778,6 +791,15 @@ arm_spe_synth_events(struct arm_spe *spe, struct perf_session *session)
attr.sample_id_all = evsel->core.attr.sample_id_all;
attr.read_format = evsel->core.attr.read_format;
+ /* If it is in the precise ip mode, there is no need to
+ * synthesize new events. */
+ if (!strncmp(evsel->name, "branch-misses", 13)) {
+ spe->sample_branch_miss = true;
+ spe->branch_miss_id = evsel->core.id[0];
+
+ return 0;
+ }
+
/* create new id val to be a fixed offset from evsel id */
id = evsel->core.id[0] + 1000000000;
@@ -899,3 +921,22 @@ int arm_spe_process_auxtrace_info(union perf_event *event,
free(spe);
return err;
}
+
+void arm_spe_precise_ip_support(struct evlist *evlist, struct evsel *evsel)
+{
+ struct perf_pmu *pmu;
+
+ /* Currently only supports precise_ip for branch-misses on arm64 */
+ if (!strcmp(perf_env__arch(evlist->env), "arm64")
+ && evsel->core.attr.config == PERF_COUNT_HW_BRANCH_MISSES
+ && evsel->core.attr.precise_ip) {
+ pmu = perf_pmu__find("arm_spe_0");
+ if (pmu) {
+ evsel->pmu_name = pmu->name;
+ evsel->core.attr.type = pmu->type;
+ evsel->core.attr.config = SPE_ATTR_TS_ENABLE
+ | SPE_ATTR_BRANCH_FILTER;
+ evsel->core.attr.config1 = SPE_ATTR_EV_BRANCH;
+ }
+ }
+}
diff --git a/tools/perf/util/arm-spe.h b/tools/perf/util/arm-spe.h
index 98d3235781c3..8b1fb191d03a 100644
--- a/tools/perf/util/arm-spe.h
+++ b/tools/perf/util/arm-spe.h
@@ -20,6 +20,8 @@ enum {
union perf_event;
struct perf_session;
struct perf_pmu;
+struct evlist;
+struct evsel;
struct auxtrace_record *arm_spe_recording_init(int *err,
struct perf_pmu *arm_spe_pmu);
@@ -28,4 +30,5 @@ int arm_spe_process_auxtrace_info(union perf_event *event,
struct perf_session *session);
struct perf_event_attr *arm_spe_pmu_default_config(struct perf_pmu *arm_spe_pmu);
+void arm_spe_precise_ip_support(struct evlist *evlist, struct evsel *evsel);
#endif
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 1548237b6558..b9c7e5271611 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -9,6 +9,7 @@
#include <errno.h>
#include <inttypes.h>
#include <poll.h>
+#include "arm-spe.h"
#include "cpumap.h"
#include "util/mmap.h"
#include "thread_map.h"
@@ -179,6 +180,7 @@ void perf_evlist__splice_list_tail(struct evlist *evlist,
struct evsel *evsel, *temp;
__evlist__for_each_entry_safe(list, temp, evsel) {
+ arm_spe_precise_ip_support(evlist, evsel);
list_del_init(&evsel->core.node);
evlist__add(evlist, evsel);
}
--
2.25.0
next prev parent reply other threads:[~2020-01-23 16:08 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-23 16:07 [PATCH v2 0/7] perf tools: Add support for some spe events and precise ip James Clark
2020-01-23 16:07 ` [PATCH v2 1/7] perf tools: Move arm-spe-pkt-decoder.h/c to the new dir James Clark
2020-01-23 16:07 ` [PATCH v2 2/7] perf tools: Add support for "report" for some spe events James Clark
2020-01-27 12:31 ` Jiri Olsa
2020-01-23 16:07 ` [PATCH v2 3/7] perf report: Add --spe options for arm-spe James Clark
2020-01-23 16:07 ` James Clark [this message]
2020-01-27 12:31 ` [PATCH v2 4/7] perf tools: Support "branch-misses:pp" on arm64 Jiri Olsa
2020-01-23 16:07 ` [PATCH v2 5/7] perf tools: add perf_evlist__terminate() for terminate James Clark
2020-01-27 12:31 ` Jiri Olsa
2020-02-07 15:21 ` [PATCH v3 0/4] perf tools: Add support for some spe events and precise ip James Clark
2020-02-07 15:21 ` [PATCH v3 1/4] perf tools: Move arm-spe-pkt-decoder.h/c to the new dir James Clark
2020-02-07 15:21 ` [PATCH v3 2/4] perf tools: Add support for "report" for some spe events James Clark
2020-02-07 15:21 ` [PATCH v3 3/4] perf report: Add SPE options to --itrace argument James Clark
2020-02-07 15:21 ` [PATCH v3 4/4] perf tools: Support "branch-misses:pp" on arm64 James Clark
2020-02-10 12:25 ` Jiri Olsa
2020-02-11 14:04 ` [PATCH v4 0/4] perf tools: Add support for some spe events and precise ip James Clark
2020-02-11 14:04 ` [PATCH v4 1/4] perf tools: Move arm-spe-pkt-decoder.h/c to the new dir James Clark
2020-02-11 14:04 ` [PATCH v4 2/4] perf tools: Add support for "report" for some spe events James Clark
2020-02-17 11:39 ` Adrian Hunter
2020-02-11 14:04 ` [PATCH v4 3/4] perf report: Add SPE options to --itrace argument James Clark
2020-02-17 11:39 ` Adrian Hunter
2020-02-25 11:57 ` [PATCH v5 0/4] perf tools: Add support for some spe events and precise ip James Clark
2020-02-25 11:57 ` [PATCH v5 1/4] perf tools: Move arm-spe-pkt-decoder.h/c to the new dir James Clark
2020-02-25 11:57 ` [PATCH v5 2/4] perf tools: Add support for "report" for some spe events James Clark
2020-02-29 6:51 ` Leo Yan
2020-02-25 11:57 ` [PATCH v5 3/4] perf report: Add SPE options to --itrace argument James Clark
2020-02-25 11:57 ` [PATCH v5 4/4] perf tools: Support "branch-misses:pp" on arm64 James Clark
2020-02-28 16:03 ` Mark Rutland
2020-02-11 14:04 ` [PATCH v4 " James Clark
2020-02-17 11:42 ` Adrian Hunter
2020-02-24 17:08 ` James Clark
2020-02-28 16:01 ` Mark Rutland
2020-03-06 15:25 ` [PATCH v6 0/3] perf tools: Add support for some spe events James Clark
2020-03-06 15:25 ` [PATCH v6 1/3] perf tools: Move arm-spe-pkt-decoder.h/c to the new dir James Clark
2020-03-06 15:25 ` [PATCH v6 2/3] perf tools: Add support for "report" for some spe events James Clark
2020-03-06 15:25 ` [PATCH v6 3/3] perf report: Add SPE options to --itrace argument James Clark
2020-03-13 11:33 ` Leo Yan
2020-03-13 11:53 ` [PATCH v6 0/3] perf tools: Add support for some spe events Mark Rutland
2020-02-12 12:24 ` [PATCH v4 0/4] perf tools: Add support for some spe events and precise ip Jiri Olsa
2020-02-12 13:10 ` Adrian Hunter
2020-01-23 16:07 ` [PATCH v2 6/7] perf tools: arm-spe: fix record hang after being terminated James Clark
2020-01-23 16:07 ` [PATCH v2 7/7] perf tools: Unset precise_ip when using SPE James Clark
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=20200123160734.3775-5-james.clark@arm.com \
--to=james.clark@arm.com \
--cc=acme@kernel.org \
--cc=al.grant@arm.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=gengdongjiu@huawei.com \
--cc=huawei.libin@huawei.com \
--cc=jolsa@redhat.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=liuqi115@hisilicon.com \
--cc=liwei391@huawei.com \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=nd@arm.com \
--cc=peterz@infradead.org \
--cc=suzuki.poulose@arm.com \
--cc=tanxiaojun@huawei.com \
--cc=will@kernel.org \
--cc=wxf.wang@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).