Commit 13e5df1e authored by Leo Yan's avatar Leo Yan Committed by Arnaldo Carvalho de Melo

perf mem: Support AUX trace

The 'perf mem' tool doesn't support AUX trace data so it cannot receive
the hardware tracing data.

On arm64, although it doesn't support PMU events for memory load and
store, ARM SPE is a good candidate for memory profiling, the hardware
tracer can record memory accessing operations with affiliated
information (e.g. physical address and virtual address for accessing,
cache levels, TLB walking, latency, etc).

To allow "perf mem" tool to support AUX trace, this patch adds the AUX
callbacks for session structure; make itrace memory event as default for
"perf mem", this tells the AUX trace decoder to synthesize memory
samples.
Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
Link: https://lore.kernel.org/r/20201106094853.21082-8-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 014a771c
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "perf.h" #include "perf.h"
#include <subcmd/parse-options.h> #include <subcmd/parse-options.h>
#include "util/auxtrace.h"
#include "util/trace-event.h" #include "util/trace-event.h"
#include "util/tool.h" #include "util/tool.h"
#include "util/session.h" #include "util/session.h"
...@@ -255,6 +256,12 @@ static int process_sample_event(struct perf_tool *tool, ...@@ -255,6 +256,12 @@ static int process_sample_event(struct perf_tool *tool,
static int report_raw_events(struct perf_mem *mem) static int report_raw_events(struct perf_mem *mem)
{ {
struct itrace_synth_opts itrace_synth_opts = {
.set = true,
.mem = true, /* Only enable memory event */
.default_no_sample = true,
};
struct perf_data data = { struct perf_data data = {
.path = input_name, .path = input_name,
.mode = PERF_DATA_MODE_READ, .mode = PERF_DATA_MODE_READ,
...@@ -267,6 +274,8 @@ static int report_raw_events(struct perf_mem *mem) ...@@ -267,6 +274,8 @@ static int report_raw_events(struct perf_mem *mem)
if (IS_ERR(session)) if (IS_ERR(session))
return PTR_ERR(session); return PTR_ERR(session);
session->itrace_synth_opts = &itrace_synth_opts;
if (mem->cpu_list) { if (mem->cpu_list) {
ret = perf_session__cpu_bitmap(session, mem->cpu_list, ret = perf_session__cpu_bitmap(session, mem->cpu_list,
mem->cpu_bitmap); mem->cpu_bitmap);
...@@ -410,8 +419,12 @@ int cmd_mem(int argc, const char **argv) ...@@ -410,8 +419,12 @@ int cmd_mem(int argc, const char **argv)
.comm = perf_event__process_comm, .comm = perf_event__process_comm,
.lost = perf_event__process_lost, .lost = perf_event__process_lost,
.fork = perf_event__process_fork, .fork = perf_event__process_fork,
.attr = perf_event__process_attr,
.build_id = perf_event__process_build_id, .build_id = perf_event__process_build_id,
.namespaces = perf_event__process_namespaces, .namespaces = perf_event__process_namespaces,
.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,
}, },
.input_name = "perf.data", .input_name = "perf.data",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment