From: Adrian Hunter <adrian.hunter@intel.com>
To: Peter Zijlstra <peterz@infradead.org>,
Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: linux-kernel@vger.kernel.org, David Ahern <dsahern@gmail.com>,
Frederic Weisbecker <fweisbec@gmail.com>,
Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@gmail.com>,
Paul Mackerras <paulus@samba.org>,
Stephane Eranian <eranian@google.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>
Subject: [PATCH V5 25/25] perf script: Add field option 'flags' to print sample flags
Date: Sat, 7 Mar 2015 23:06:34 +0200 [thread overview]
Message-ID: <1425762394-29799-26-git-send-email-adrian.hunter@intel.com> (raw)
In-Reply-To: <1425762394-29799-1-git-send-email-adrian.hunter@intel.com>
Instruction Tracing will typically have access to information
about the instruction being executed for a particular ip sample.
Some of that information will be available in the 'flags' member
of struct perf_sample.
With the addition of transactions events synthesis to Instruction
Tracing options, there is a need to be able easily to see the
flags because they show whether the ip is at the start, commit or
abort of a tranasaction.
Consequently add an option to display the flags.
The flags are "bcrosyiABEx" which stand for branch, call, return,
conditional, system, asynchronous, interrupt, transaction abort,
trace begin, trace end, and in transaction, respectively.
Example using Intel PT:
perf script -fip,time,event,sym,addr,flags
...
1288.721584105: branches:u: bo 401146 main => 401152 main
1288.721584105: transactions: x 0 401164 main
1288.721584105: branches:u: bx 40117c main => 40119b main
1288.721584105: branches:u: box 4011a4 main => 40117e main
1288.721584105: branches:u: bcx 401187 main => 401094 g
...
1288.721591645: branches:u: bx 4010c4 g => 4010cb g
1288.721591645: branches:u: brx 4010cc g => 401189 main
1288.721591645: transactions: 0 4011a6 main
1288.721593199: branches:u: b 4011a9 main => 4011af main
1288.721593199: branches:u: bo 4011bc main => 40113e main
1288.721593199: branches:u: b 401150 main => 40115a main
1288.721593199: transactions: x 0 401164 main
1288.721593199: branches:u: bx 40117c main => 40119b main
1288.721593199: branches:u: box 4011a4 main => 40117e main
1288.721593199: branches:u: bcx 401187 main => 40105e f
...
1288.722284747: branches:u: brx 401093 f => 401189 main
1288.722284747: branches:u: box 4011a4 main => 40117e main
1288.722284747: branches:u: bcx 401187 main => 40105e f
1288.722285883: transactions: bA 0 401071 f
1288.722285883: branches:u: bA 401071 f => 40116a main
1288.722285883: branches:u: bE 40116a main => 0 [unknown]
1288.722297174: branches:u: bB 0 [unknown] => 40116a main
...
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
tools/perf/Documentation/perf-script.txt | 9 ++++++++-
tools/perf/builtin-script.c | 34 +++++++++++++++++++++++++++-----
tools/perf/util/event.h | 2 ++
3 files changed, 39 insertions(+), 6 deletions(-)
diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt
index 2c89ca7..71dfeb5 100644
--- a/tools/perf/Documentation/perf-script.txt
+++ b/tools/perf/Documentation/perf-script.txt
@@ -115,7 +115,8 @@ OPTIONS
-f::
--fields::
Comma separated list of fields to print. Options are:
- comm, tid, pid, time, cpu, event, trace, ip, sym, dso, addr, symoff, srcline, period.
+ comm, tid, pid, time, cpu, event, trace, ip, sym, dso, addr, symoff,
+ srcline, period, flags.
Field list can be prepended with the type, trace, sw or hw,
to indicate to which event type the field list applies.
e.g., -f sw:comm,tid,time,ip,sym and -f trace:time,cpu,trace
@@ -165,6 +166,12 @@ OPTIONS
At this point usage is displayed, and perf-script exits.
+ The flags field is synthesized and may have a value when Instruction
+ Trace decoding. The flags are "bcrosyiABEx" which stand for branch,
+ call, return, conditional, system, asynchronous, interrupt,
+ transaction abort, trace begin, trace end, and in transaction,
+ respectively.
+
Finally, a user may not set fields to none for all event types.
i.e., -f "" is not allowed.
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 8976d9b..7a14c1d 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -27,6 +27,7 @@ static u64 nr_unordered;
static bool no_callchain;
static bool latency_format;
static bool system_wide;
+static bool print_flags;
static const char *cpu_list;
static DECLARE_BITMAP(cpu_bitmap, MAX_NR_CPUS);
@@ -460,6 +461,25 @@ static void print_sample_bts(union perf_event *event,
printf("\n");
}
+static void print_sample_flags(u32 flags)
+{
+ const char *chars = PERF_IP_FLAG_CHARS;
+ const int n = strlen(PERF_IP_FLAG_CHARS);
+ char str[33];
+ int i, pos = 0;
+
+ for (i = 0; i < n; i++, flags >>= 1) {
+ if (flags & 1)
+ str[pos++] = chars[i];
+ }
+ for (; i < 32; i++, flags >>= 1) {
+ if (flags & 1)
+ str[pos++] = '?';
+ }
+ str[pos] = 0;
+ printf(" %-4s ", str);
+}
+
static void process_event(union perf_event *event, struct perf_sample *sample,
struct perf_evsel *evsel, struct thread *thread,
struct addr_location *al)
@@ -479,6 +499,9 @@ static void process_event(union perf_event *event, struct perf_sample *sample,
printf("%s: ", evname ? evname : "[unknown]");
}
+ if (print_flags)
+ print_sample_flags(sample->flags);
+
if (is_bts_event(attr)) {
print_sample_bts(event, sample, evsel, thread, al);
return;
@@ -1022,12 +1045,15 @@ static int parse_output_fields(const struct option *opt __maybe_unused,
}
}
- tok = strtok(tok, ",");
- while (tok) {
+ for (tok = strtok(tok, ","); tok; tok = strtok(NULL, ",")) {
for (i = 0; i < imax; ++i) {
if (strcmp(tok, all_output_options[i].str) == 0)
break;
}
+ if (i == imax && strcmp(tok, "flags") == 0) {
+ print_flags = true;
+ continue;
+ }
if (i == imax) {
fprintf(stderr, "Invalid field requested.\n");
rc = -EINVAL;
@@ -1055,8 +1081,6 @@ static int parse_output_fields(const struct option *opt __maybe_unused,
}
output[type].fields |= all_output_options[i].field;
}
-
- tok = strtok(NULL, ",");
}
if (type >= 0) {
@@ -1574,7 +1598,7 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
"comma separated output fields prepend with 'type:'. "
"Valid types: hw,sw,trace,raw. "
"Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso,"
- "addr,symoff,period", parse_output_fields),
+ "addr,symoff,period,flags", parse_output_fields),
OPT_BOOLEAN('a', "all-cpus", &system_wide,
"system-wide collection from all CPUs"),
OPT_STRING('S', "symbols", &symbol_conf.sym_list_str, "symbol[,symbol...]",
diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h
index 7582d01..11c5c30 100644
--- a/tools/perf/util/event.h
+++ b/tools/perf/util/event.h
@@ -157,6 +157,8 @@ enum {
PERF_IP_FLAG_IN_TX = 1ULL << 10,
};
+#define PERF_IP_FLAG_CHARS "bcrosyiABEx"
+
#define PERF_BRANCH_MASK (\
PERF_IP_FLAG_BRANCH |\
PERF_IP_FLAG_CALL |\
--
1.9.1
next prev parent reply other threads:[~2015-03-07 21:10 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-07 21:06 [PATCH V5 00/25] perf tools: Introduce an abstraction for Instruction Tracing Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 01/25] perf header: Add Instruction Tracing feature Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 02/25] perf evlist: Add initial support for mmapping an Instruction Trace buffer Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 03/25] perf tools: Add user events for Instruction Tracing Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 04/25] perf tools: Add support for Instruction Trace recording Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 05/25] perf record: Add basic Instruction Tracing support Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 06/25] perf record: Extend -m option for Instruction Tracing mmap pages Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 07/25] perf tools: Add a user event for Instruction Tracing errors Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 08/25] perf session: Add hooks to allow transparent decoding of Instruction Tracing data Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 09/25] perf session: Add Instruction Tracing options Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 10/25] perf itrace: Add helpers for Instruction Tracing errors Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 11/25] perf itrace: Add helpers for queuing Instruction Tracing data Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 12/25] perf itrace: Add a heap for sorting Instruction Tracing queues Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 13/25] perf itrace: Add processing for Instruction Tracing events Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 14/25] perf itrace: Add a hashtable for caching decoded instructions Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 15/25] perf tools: Add member to struct dso for an instruction cache Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 16/25] perf script: Add Instruction Tracing support Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 17/25] perf script: Always allow fields 'addr' and 'cpu' for itrace Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 18/25] perf report: Add Instruction Tracing support Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 19/25] perf inject: Re-pipe Instruction Tracing events Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 20/25] perf inject: Add Instruction Tracing support Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 21/25] perf tools: Add Instruction Tracing index Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 22/25] perf tools: Hit all build ids when Instruction Tracing Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 23/25] perf tools: Add build option NO_ITRACE to exclude " Adrian Hunter
2015-03-07 21:06 ` [PATCH V5 24/25] perf itrace: Add option to synthesize events for transactions Adrian Hunter
2015-03-07 21:06 ` Adrian Hunter [this message]
2015-03-11 15:55 ` [PATCH V5 00/25] perf tools: Introduce an abstraction for Instruction Tracing Adrian Hunter
2015-03-11 19:33 ` Arnaldo Carvalho de Melo
2015-03-12 20:51 ` Adrian Hunter
2015-03-12 20:57 ` Arnaldo Carvalho de Melo
2015-03-13 11:40 ` Adrian Hunter
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=1425762394-29799-26-git-send-email-adrian.hunter@intel.com \
--to=adrian.hunter@intel.com \
--cc=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=dsahern@gmail.com \
--cc=eranian@google.com \
--cc=fweisbec@gmail.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=namhyung@gmail.com \
--cc=paulus@samba.org \
--cc=peterz@infradead.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
all inboxes | Powered by JetHome®