From: Andi Kleen <andi@firstfloor.org>
To: linux-kernel@vger.kernel.org
Cc: x86@kernel.org, a.p.zijlstra@chello.nl, eranian@google.com,
acme@redhat.com, Andi Kleen <ak@linux.intel.com>
Subject: [PATCH 05/31] perf, tools: Add :c,:t event modifiers in perf tools
Date: Thu, 27 Sep 2012 21:31:10 -0700 [thread overview]
Message-ID: <1348806696-31170-6-git-send-email-andi@firstfloor.org> (raw)
In-Reply-To: <1348806696-31170-1-git-send-email-andi@firstfloor.org>
From: Andi Kleen <ak@linux.intel.com>
Haswell supports new per event qualifiers for TSX transactions and
checkpointed transaction qualifiers that can be used to compute the
events discarded due to aborts.
Implement it in the usertool as :t and :c
Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
tools/perf/Documentation/perf-list.txt | 6 ++++++
tools/perf/util/evsel.c | 14 ++++++++++++--
tools/perf/util/parse-events.c | 7 +++++++
tools/perf/util/parse-events.l | 2 +-
4 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/tools/perf/Documentation/perf-list.txt b/tools/perf/Documentation/perf-list.txt
index ddc2252..52ea166 100644
--- a/tools/perf/Documentation/perf-list.txt
+++ b/tools/perf/Documentation/perf-list.txt
@@ -34,6 +34,12 @@ Intel PEBS and can be specified multiple times:
The PEBS implementation now supports up to 2.
+On Intel Haswell CPUs t and c can be specified to request that the event
+is only counted inside transactions ('t') or that the counter is rolled
+back to the beginning of the transaction on a abort ('c'). This can
+be used to account for transaction residency and cycles lost to transaction
+aborts.
+
RAW HARDWARE EVENT DESCRIPTOR
-----------------------------
Even when an event is not available in a symbolic form within perf right now,
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 2eaae14..cda3805 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -93,11 +93,12 @@ static int perf_evsel__add_modifiers(struct perf_evsel *evsel, char *bf, size_t
struct perf_event_attr *attr = &evsel->attr;
bool exclude_guest_default = false;
-#define MOD_PRINT(context, mod) do { \
- if (!attr->exclude_##context) { \
+#define __MOD_PRINT(test, mod) do { \
+ if (test) { \
if (!colon) colon = ++r; \
r += scnprintf(bf + r, size - r, "%c", mod); \
} } while(0)
+#define MOD_PRINT(context, mod) __MOD_PRINT(!attr->exclude_##context, mod)
if (attr->exclude_kernel || attr->exclude_user || attr->exclude_hv) {
MOD_PRINT(kernel, 'k');
@@ -113,11 +114,20 @@ static int perf_evsel__add_modifiers(struct perf_evsel *evsel, char *bf, size_t
exclude_guest_default = true;
}
+ if (attr->intx || attr->intx_checkpointed) {
+ __MOD_PRINT(attr->intx_checkpointed, 'c');
+ __MOD_PRINT(attr->intx, 't');
+ /* Set the bizarro flag: */
+ exclude_guest_default = true;
+ }
+
if (attr->exclude_host || attr->exclude_guest == exclude_guest_default) {
MOD_PRINT(host, 'H');
MOD_PRINT(guest, 'G');
}
+
#undef MOD_PRINT
+#undef __MOD_PRINT
if (colon)
bf[colon - 1] = ':';
return r;
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 74a5af4..5668ca6 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -628,6 +628,7 @@ int parse_events_modifier(struct list_head *list, char *str)
struct perf_evsel *evsel;
int exclude = 0, exclude_GH = 0;
int eu = 0, ek = 0, eh = 0, eH = 0, eG = 0, precise = 0;
+ int intx = 0, intx_cp = 0;
if (str == NULL)
return 0;
@@ -655,6 +656,10 @@ int parse_events_modifier(struct list_head *list, char *str)
eH = 0;
} else if (*str == 'p') {
precise++;
+ } else if (*str == 't') {
+ intx = 1;
+ } else if (*str == 'c') {
+ intx_cp = 1;
} else
break;
@@ -681,6 +686,8 @@ int parse_events_modifier(struct list_head *list, char *str)
evsel->attr.precise_ip = precise;
evsel->attr.exclude_host = eH;
evsel->attr.exclude_guest = eG;
+ evsel->attr.intx_checkpointed = intx_cp;
+ evsel->attr.intx = intx;
}
return 0;
diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
index 384ca74..96ab100 100644
--- a/tools/perf/util/parse-events.l
+++ b/tools/perf/util/parse-events.l
@@ -75,7 +75,7 @@ num_dec [0-9]+
num_hex 0x[a-fA-F0-9]+
num_raw_hex [a-fA-F0-9]+
name [a-zA-Z_*?][a-zA-Z0-9_*?]*
-modifier_event [ukhpGH]{1,8}
+modifier_event [ukhpGHct]+
modifier_bp [rwx]{1,3}
%%
--
1.7.7.6
next prev parent reply other threads:[~2012-09-28 4:36 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-28 4:31 perf PMU support for Haswell Andi Kleen
2012-09-28 4:31 ` [PATCH 01/31] perf, x86: Add PEBSv2 record support Andi Kleen
2012-09-28 8:43 ` Peter Zijlstra
2012-09-28 8:54 ` Stephane Eranian
2012-09-28 9:28 ` Peter Zijlstra
2012-09-28 11:33 ` Stephane Eranian
2012-09-28 14:42 ` Andi Kleen
2012-09-28 4:31 ` [PATCH 02/31] perf, x86: Basic Haswell PMU support Andi Kleen
2012-09-28 9:05 ` Peter Zijlstra
2012-09-28 14:58 ` Andi Kleen
[not found] ` <CABPqkBQ90Crh+EpRQq0Y+xUvrj5vzrX_=SpJQyR4p8uFR_Hr=Q@mail.gmail.com>
2012-09-28 15:21 ` Peter Zijlstra
2012-09-28 15:23 ` Andi Kleen
2012-09-28 4:31 ` [PATCH 03/31] perf, x86: Basic Haswell PEBS support Andi Kleen
2012-09-28 8:50 ` Peter Zijlstra
2012-09-28 4:31 ` [PATCH 04/31] perf, core: Add generic intx/intx_checkpointed counter modifiers Andi Kleen
2012-09-28 9:02 ` Peter Zijlstra
2012-09-28 11:35 ` Stephane Eranian
2012-09-28 14:53 ` Andi Kleen
2012-09-28 15:19 ` Peter Zijlstra
2012-09-28 15:29 ` Andi Kleen
2012-09-28 15:36 ` Peter Zijlstra
2012-09-28 15:23 ` Peter Zijlstra
2012-09-28 15:37 ` Andi Kleen
2012-09-28 4:31 ` Andi Kleen [this message]
2012-09-28 4:31 ` [PATCH 06/31] perf, tools: Add intx/intx_checkpoint to perf script and header printing Andi Kleen
2012-09-28 4:31 ` [PATCH 07/31] perf, x86: Implement the :t and :c qualifiers for Haswell Andi Kleen
2012-09-28 4:31 ` [PATCH 08/31] perf, x86: Report PEBS event in a raw format Andi Kleen
2012-09-28 8:54 ` Peter Zijlstra
2012-09-28 8:57 ` Stephane Eranian
2012-09-28 4:31 ` [PATCH 09/31] perf, kvm: Support :t and :c perf modifiers in KVM arch perfmon emulation Andi Kleen
2012-09-28 4:31 ` [PATCH 10/31] perf, x86: Support PERF_SAMPLE_ADDR on Haswell Andi Kleen
2012-09-28 4:31 ` [PATCH 11/31] perf, x86: Support Haswell v4 LBR format Andi Kleen
2012-09-28 4:31 ` [PATCH 12/31] perf, x86: Disable LBR recording for unknown LBR_FMT Andi Kleen
2012-09-28 4:31 ` [PATCH 13/31] perf, x86: Support LBR filtering by INTX/NOTX/ABORT Andi Kleen
2012-09-28 4:31 ` [PATCH 14/31] perf, tools: Add abort,notx,intx branch filter options to perf report -j Andi Kleen
2012-09-28 4:31 ` [PATCH 15/31] perf, tools: Support sorting by intx, abort branch flags Andi Kleen
2012-09-28 4:31 ` [PATCH 16/31] perf, x86: Support full width counting on Haswell Andi Kleen
2012-09-28 4:31 ` [PATCH 17/31] perf, x86: Avoid checkpointed counters causing excessive TSX aborts Andi Kleen
2012-09-28 4:31 ` [PATCH 18/31] perf, core: Add a concept of a weightened sample Andi Kleen
2012-09-28 9:06 ` Stephane Eranian
2012-09-28 14:57 ` Andi Kleen
2012-09-28 17:09 ` Stephane Eranian
2012-09-28 4:31 ` [PATCH 19/31] perf, x86: Support weight samples for PEBS Andi Kleen
2012-09-28 4:31 ` [PATCH 20/31] perf, tools: Add support for weight Andi Kleen
2012-09-28 4:31 ` [PATCH 21/31] perf, tools: Handle XBEGIN like a jump Andi Kleen
2012-09-28 4:31 ` [PATCH 22/31] perf, core: Define generic hardware transaction events Andi Kleen
2012-09-28 9:33 ` Peter Zijlstra
2012-09-28 4:31 ` [PATCH 23/31] perf, tools: Add support for generic transaction events to perf userspace Andi Kleen
2012-09-28 4:31 ` [PATCH 24/31] perf, x86: Add the Haswell implementation of the generic transaction events Andi Kleen
2012-09-28 4:31 ` [PATCH 25/31] perf, tools: Add perf stat --transaction Andi Kleen
2012-09-28 4:31 ` [PATCH 26/31] perf, x86: Support for printing PMU state on spurious PMIs Andi Kleen
2012-09-28 9:36 ` Peter Zijlstra
2012-09-28 11:39 ` Stephane Eranian
2012-09-28 4:31 ` [PATCH 27/31] perf, core: Add generic transaction flags Andi Kleen
2012-09-28 4:31 ` [PATCH 28/31] perf, x86: Add Haswell specific transaction flag reporting Andi Kleen
2012-09-28 4:31 ` [PATCH 29/31] perf, tools: Add support for record transaction flags Andi Kleen
2012-09-28 4:31 ` [PATCH 30/31] perf, tools: Point --sort documentation to --help Andi Kleen
2012-09-28 4:31 ` [PATCH 31/31] perf, tools: Add browser support for transaction flags Andi Kleen
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=1348806696-31170-6-git-send-email-andi@firstfloor.org \
--to=andi@firstfloor.org \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@redhat.com \
--cc=ak@linux.intel.com \
--cc=eranian@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=x86@kernel.org \
/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).