perf script: Add Instruction Tracing support
Add support for decoding an AUX area assuming it contains instruction tracing data. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1428594864-29309-17-git-send-email-adrian.hunter@intel.com [ Do not use -Z as an alternative to --itrace ] [ Fixed initialization of itrace_synth_opts struct fields on older gcc versions ] Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
cfe9174fcf
commit
7a680eb990
@ -221,6 +221,33 @@ OPTIONS
|
|||||||
--header-only
|
--header-only
|
||||||
Show only perf.data header.
|
Show only perf.data header.
|
||||||
|
|
||||||
|
--itrace::
|
||||||
|
Options for decoding instruction tracing data. The options are:
|
||||||
|
|
||||||
|
i synthesize instructions events
|
||||||
|
b synthesize branches events
|
||||||
|
c synthesize branches events (calls only)
|
||||||
|
r synthesize branches events (returns only)
|
||||||
|
e synthesize error events
|
||||||
|
d create a debug log
|
||||||
|
g synthesize a call chain for instructions events
|
||||||
|
|
||||||
|
The default is all events i.e. the same as --itrace=ibe
|
||||||
|
|
||||||
|
In addition, the period (default 100000) for instructions events
|
||||||
|
can be specified in units of:
|
||||||
|
|
||||||
|
i instructions
|
||||||
|
t ticks
|
||||||
|
ms milliseconds
|
||||||
|
us microseconds
|
||||||
|
ns nanoseconds (default)
|
||||||
|
|
||||||
|
Also the call chain size (default 16, max. 1024) for instructions
|
||||||
|
events can be specified.
|
||||||
|
|
||||||
|
To disable decoding entirely, use --no-itrace.
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
linkperf:perf-record[1], linkperf:perf-script-perl[1],
|
linkperf:perf-record[1], linkperf:perf-script-perl[1],
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "util/evsel.h"
|
#include "util/evsel.h"
|
||||||
#include "util/sort.h"
|
#include "util/sort.h"
|
||||||
#include "util/data.h"
|
#include "util/data.h"
|
||||||
|
#include "util/auxtrace.h"
|
||||||
#include <linux/bitmap.h>
|
#include <linux/bitmap.h>
|
||||||
|
|
||||||
static char const *script_name;
|
static char const *script_name;
|
||||||
@ -1497,6 +1498,7 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
|
|||||||
char *rec_script_path = NULL;
|
char *rec_script_path = NULL;
|
||||||
char *rep_script_path = NULL;
|
char *rep_script_path = NULL;
|
||||||
struct perf_session *session;
|
struct perf_session *session;
|
||||||
|
struct itrace_synth_opts itrace_synth_opts = { .set = false, };
|
||||||
char *script_path = NULL;
|
char *script_path = NULL;
|
||||||
const char **__argv;
|
const char **__argv;
|
||||||
int i, j, err = 0;
|
int i, j, err = 0;
|
||||||
@ -1511,6 +1513,10 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
|
|||||||
.attr = process_attr,
|
.attr = process_attr,
|
||||||
.tracing_data = perf_event__process_tracing_data,
|
.tracing_data = perf_event__process_tracing_data,
|
||||||
.build_id = perf_event__process_build_id,
|
.build_id = perf_event__process_build_id,
|
||||||
|
.id_index = perf_event__process_id_index,
|
||||||
|
.auxtrace_info = perf_event__process_auxtrace_info,
|
||||||
|
.auxtrace = perf_event__process_auxtrace,
|
||||||
|
.auxtrace_error = perf_event__process_auxtrace_error,
|
||||||
.ordered_events = true,
|
.ordered_events = true,
|
||||||
.ordering_requires_timestamps = true,
|
.ordering_requires_timestamps = true,
|
||||||
},
|
},
|
||||||
@ -1570,6 +1576,9 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
|
|||||||
OPT_BOOLEAN('\0', "show-mmap-events", &script.show_mmap_events,
|
OPT_BOOLEAN('\0', "show-mmap-events", &script.show_mmap_events,
|
||||||
"Show the mmap events"),
|
"Show the mmap events"),
|
||||||
OPT_BOOLEAN('f', "force", &file.force, "don't complain, do it"),
|
OPT_BOOLEAN('f', "force", &file.force, "don't complain, do it"),
|
||||||
|
OPT_CALLBACK_OPTARG(0, "itrace", &itrace_synth_opts, NULL, "opts",
|
||||||
|
"Instruction Tracing options",
|
||||||
|
itrace_parse_synth_opts),
|
||||||
OPT_END()
|
OPT_END()
|
||||||
};
|
};
|
||||||
const char * const script_subcommands[] = { "record", "report", NULL };
|
const char * const script_subcommands[] = { "record", "report", NULL };
|
||||||
@ -1765,6 +1774,8 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
|
|||||||
|
|
||||||
script.session = session;
|
script.session = session;
|
||||||
|
|
||||||
|
session->itrace_synth_opts = &itrace_synth_opts;
|
||||||
|
|
||||||
if (cpu_list) {
|
if (cpu_list) {
|
||||||
err = perf_session__cpu_bitmap(session, cpu_list, cpu_bitmap);
|
err = perf_session__cpu_bitmap(session, cpu_list, cpu_bitmap);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
|
Reference in New Issue
Block a user