From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, Namhyung Kim <namhyung@kernel.org>,
Andi Kleen <andi@firstfloor.org>, David Ahern <dsahern@gmail.com>,
Frederic Weisbecker <fweisbec@gmail.com>,
Jiri Olsa <jolsa@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Steven Rostedt <rostedt@goodmis.org>,
Wang Nan <wangnan0@huawei.com>,
Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 09/59] perf report/top: Add --raw-trace option
Date: Fri, 8 Jan 2016 15:02:16 -0300 [thread overview]
Message-ID: <1452276186-15202-10-git-send-email-acme@kernel.org> (raw)
In-Reply-To: <1452276186-15202-1-git-send-email-acme@kernel.org>
From: Namhyung Kim <namhyung@kernel.org>
The --raw-trace option allows disabling pretty printing by the event's
print_fmt or plugin. Besides that, each dynamic sort key now can
receive a 'raw' suffix separated by '/' to ask for the raw trace of a
specific field.
$ perf report -s comm,kmem:kmalloc.gfp_flags
...
# Overhead Command gfp_flags
# ........ ....... ...................
#
99.89% perf GFP_NOFS|GFP_ZERO
0.06% sleep GFP_KERNEL
0.03% perf GFP_KERNEL|GFP_ZERO
0.01% perf GFP_KERNEL
Now
$ perf report -s comm,kmem:kmalloc.gfp_flags --raw-trace
or
$ perf report -s comm,kmem:kmalloc.gfp_flags/raw
...
# Overhead Command gfp_flags
# ........ ....... ..........
#
99.89% perf 32848
0.06% sleep 208
0.03% perf 32976
0.01% perf 208
Suggested-and-Acked-by: Jiri Olsa <jolsa@redhat.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1450804030-29193-9-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/Documentation/perf-report.txt | 3 +++
tools/perf/Documentation/perf-top.txt | 3 +++
tools/perf/builtin-report.c | 2 ++
tools/perf/builtin-top.c | 2 ++
tools/perf/util/sort.c | 32 +++++++++++++++++++++++++++++---
tools/perf/util/symbol.h | 3 ++-
6 files changed, 41 insertions(+), 4 deletions(-)
diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
index dab99ed2b339..ae7cd91727f6 100644
--- a/tools/perf/Documentation/perf-report.txt
+++ b/tools/perf/Documentation/perf-report.txt
@@ -371,6 +371,9 @@ include::itrace.txt[]
--socket-filter::
Only report the samples on the processor socket that match with this filter
+--raw-trace::
+ When displaying traceevent output, do not use print fmt or plugins.
+
include::callchain-overhead-calculation.txt[]
SEE ALSO
diff --git a/tools/perf/Documentation/perf-top.txt b/tools/perf/Documentation/perf-top.txt
index 556cec09bf50..b0e60e17db38 100644
--- a/tools/perf/Documentation/perf-top.txt
+++ b/tools/perf/Documentation/perf-top.txt
@@ -230,6 +230,9 @@ Default is to monitor all CPUS.
The various filters must be specified as a comma separated list: --branch-filter any_ret,u,k
Note that this feature may not be available on all processors.
+--raw-trace::
+ When displaying traceevent output, do not use print fmt or plugins.
+
INTERACTIVE PROMPTING KEYS
--------------------------
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index ea53c816640a..f10c663af996 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -788,6 +788,8 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
"Show callgraph from reference event"),
OPT_INTEGER(0, "socket-filter", &report.socket_filter,
"only show processor socket that match with this filter"),
+ OPT_BOOLEAN(0, "raw-trace", &symbol_conf.raw_trace,
+ "Show raw trace event output (do not use print fmt or plugins)"),
OPT_END()
};
struct perf_data_file file = {
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index 005825942441..bf01cbb0ef23 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -1210,6 +1210,8 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused)
OPT_CALLBACK('j', "branch-filter", &opts->branch_stack,
"branch filter mask", "branch stack filter modes",
parse_branch_stack),
+ OPT_BOOLEAN(0, "raw-trace", &symbol_conf.raw_trace,
+ "Show raw trace event output (do not use print fmt or plugins)"),
OPT_END()
};
const char * const top_usage[] = {
diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index db8476a9b103..34776854626e 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -459,7 +459,12 @@ static char *get_trace_output(struct hist_entry *he)
evsel = hists_to_evsel(he->hists);
trace_seq_init(&seq);
- pevent_event_info(&seq, evsel->tp_format, &rec);
+ if (symbol_conf.raw_trace) {
+ pevent_print_fields(&seq, he->raw_data, he->raw_size,
+ evsel->tp_format);
+ } else {
+ pevent_event_info(&seq, evsel->tp_format, &rec);
+ }
return seq.buffer;
}
@@ -1596,6 +1601,7 @@ struct hpp_dynamic_entry {
struct perf_evsel *evsel;
struct format_field *field;
unsigned dynamic_len;
+ bool raw_trace;
};
static int hde_width(struct hpp_dynamic_entry *hde)
@@ -1628,6 +1634,9 @@ static void update_dynamic_len(struct hpp_dynamic_entry *hde,
size_t namelen;
bool last = false;
+ if (hde->raw_trace)
+ return;
+
/* parse pretty print result and update max length */
if (!he->trace_output)
he->trace_output = get_trace_output(he);
@@ -1708,8 +1717,10 @@ static int __sort__hde_entry(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp,
if (hists_to_evsel(he->hists) != hde->evsel)
return scnprintf(hpp->buf, hpp->size, "%*.*s", len, len, "N/A");
- field = hde->field;
+ if (hde->raw_trace)
+ goto raw_field;
+ field = hde->field;
namelen = strlen(field->name);
str = he->trace_output;
@@ -1738,6 +1749,7 @@ static int __sort__hde_entry(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp,
if (str == NULL) {
struct trace_seq seq;
+raw_field:
trace_seq_init(&seq);
pevent_print_field(&seq, he->raw_data, hde->field);
str = seq.buffer;
@@ -1818,10 +1830,11 @@ __alloc_dynamic_entry(struct perf_evsel *evsel, struct format_field *field)
static int add_dynamic_entry(struct perf_evlist *evlist, const char *tok)
{
- char *str, *event_name, *field_name;
+ char *str, *event_name, *field_name, *raw_opt;
struct perf_evsel *evsel, *pos;
struct format_field *field;
struct hpp_dynamic_entry *hde;
+ bool raw_trace = symbol_conf.raw_trace;
int ret = 0;
if (evlist == NULL)
@@ -1839,6 +1852,18 @@ static int add_dynamic_entry(struct perf_evlist *evlist, const char *tok)
}
*field_name++ = '\0';
+ raw_opt = strchr(field_name, '/');
+ if (raw_opt) {
+ *raw_opt++ = '\0';
+
+ if (strcmp(raw_opt, "raw")) {
+ pr_err("Unsupported field option %s\n", raw_opt);
+ ret = -EINVAL;
+ goto out;
+ }
+ raw_trace = true;
+ }
+
evsel = NULL;
evlist__for_each(evlist, pos) {
if (!strcmp(pos->name, event_name)) {
@@ -1872,6 +1897,7 @@ static int add_dynamic_entry(struct perf_evlist *evlist, const char *tok)
ret = -ENOMEM;
goto out;
}
+ hde->raw_trace = raw_trace;
perf_hpp__register_sort_field(&hde->hpp);
diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h
index 857f707ac12b..ccd1caa40e11 100644
--- a/tools/perf/util/symbol.h
+++ b/tools/perf/util/symbol.h
@@ -109,7 +109,8 @@ struct symbol_conf {
branch_callstack,
has_filter,
show_ref_callgraph,
- hide_unresolved;
+ hide_unresolved,
+ raw_trace;
const char *vmlinux_name,
*kallsyms_name,
*source_prefix,
--
2.1.0
next prev parent reply other threads:[~2016-01-08 18:07 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-08 18:02 [GIT PULL 00/59] perf/core improvements and fixes Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 01/59] perf hist: Pass struct sample to __hists__add_entry() Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 02/59] perf hist: Save raw_data/size for tracepoint events Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 03/59] tools lib traceevent: Factor out and export print_event_field[s]() Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 04/59] perf top: Create the evlist sooner Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 05/59] perf tools: Pass evlist to setup_sorting() Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 06/59] perf tools: Add dynamic sort key for tracepoint events Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 07/59] perf tools: Try to show pretty printed output for dynamic sort keys Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 08/59] perf tools: Add 'trace' sort key Arnaldo Carvalho de Melo
2016-01-08 18:02 ` Arnaldo Carvalho de Melo [this message]
2016-01-08 18:02 ` [PATCH 10/59] perf tools: Support shortcuts for events in dynamic sort keys Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 11/59] perf tools: Support '<event>.*' dynamic sort key Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 12/59] perf tools: Skip dynamic fields not defined for current event Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 13/59] perf tools: Add 'trace_fields' dynamic sort key Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 14/59] perf tools: Make 'trace' or 'trace_fields' sort key default for tracepoint events Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 15/59] tools build feature: Fix feature_check_display_code typo Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 16/59] tools build feature: Move dwarf post unwind choice output into perf Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 17/59] tools build feature: Introduce feature_assign macro Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 18/59] tools build feature: Use value assignment form for FEATURE-DUMP file Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 19/59] perf build: Use FEATURE-DUMP in bpf subproject Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 20/59] perf tools: Add all matching dynamic sort keys for field name Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 21/59] perf report: Add documentation for dynamic sort keys Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 22/59] perf stat record: Keep sample_type 0 for pipe session Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 23/59] perf script: Process cpu/threads maps Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 24/59] perf script: Process stat config event Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 25/59] perf script: Add process_stat/process_stat_interval scripting interface Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 26/59] perf script: Add stat default handlers Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 27/59] perf script: Add python support for stat events Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 28/59] perf cpumap: Fix cpu conversion in cpu_map__from_entries Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 29/59] perf script: Display stat events by default Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 30/59] perf script: Add stat-cpi.py script Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 31/59] perf pmu: fix alias->snapshot missing initialization bug Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 32/59] perf tests: No need to set attr.sample_freq in the perf time to TSC test Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 33/59] perf evlist: Introduce perf_evlist__new_dummy constructor Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 34/59] perf test: Use "dummy" events in the PERF_RECORD_ test Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 35/59] perf test: No need for setting attr.sample_freq on the RECORD test Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 36/59] perf python: Add missing files to binding link list Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 37/59] perf tests: No need to set attr.sample_freq for tracking !PERF_RECORD_SAMPLE Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 38/59] perf tests: Give a bit more information on the CQM test failure path Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 39/59] tools lib: Move find_next_bit.c to tools/lib/ Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 40/59] tools lib: Sync tools/lib/find_bit.c with the kernel Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 41/59] tools lib: Move bitmap.[ch] from tools/perf/ to tools/{lib,include}/ Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 42/59] perf top: Decay periods in callchains Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 43/59] perf report: Change default to use event group view Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 44/59] perf tools: Do not show trace command if it's not compiled in Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 45/59] perf tools: Add missing headers in perf's MANIFEST Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 46/59] perf script: Align event name properly Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 47/59] perf tools: Include all tools/lib directory for tags/cscope/TAGS targets Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 48/59] perf tools: Remove list entry from struct sort_entry Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 49/59] perf tools: Add overhead/overhead_children keys defaults via string Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 50/59] perf diff: Use perf_hpp__register_sort_field interface Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 51/59] perf hists: Export a couple of hist functions Arnaldo Carvalho de Melo
2016-01-08 18:02 ` [PATCH 52/59] perf report: Show random usage tip on the help line Arnaldo Carvalho de Melo
2016-01-08 18:03 ` [PATCH 53/59] perf evlist: Make perf_evlist__open() open evsels with their cpus and threads (like perf record does) Arnaldo Carvalho de Melo
2016-01-08 18:03 ` [PATCH 54/59] perf evlist: Remove perf_evlist__(enable|disable)_event functions Arnaldo Carvalho de Melo
2016-01-08 18:03 ` [PATCH 55/59] perf unwind: Use find_map function in access_dso_mem Arnaldo Carvalho de Melo
2016-01-08 18:03 ` [PATCH 56/59] perf unwind: Check for mmaps also in MAP__VARIABLE tree Arnaldo Carvalho de Melo
2016-01-08 18:03 ` [PATCH 57/59] perf libdw: " Arnaldo Carvalho de Melo
2016-01-08 18:03 ` [PATCH 58/59] perf record: Store data mmaps for dwarf unwind Arnaldo Carvalho de Melo
2016-01-08 18:03 ` [PATCH 59/59] perf evlist: Add --trace-fields option to show trace fields Arnaldo Carvalho de Melo
2016-01-09 16:20 ` [GIT PULL 00/59] perf/core improvements and fixes Ingo Molnar
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=1452276186-15202-10-git-send-email-acme@kernel.org \
--to=acme@kernel.org \
--cc=acme@redhat.com \
--cc=andi@firstfloor.org \
--cc=dsahern@gmail.com \
--cc=fweisbec@gmail.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=wangnan0@huawei.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.