perf script: Add 'synth' field for synthesized event payloads
authorAdrian Hunter <adrian.hunter@intel.com>
Fri, 26 May 2017 08:17:22 +0000 (11:17 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 27 Jun 2017 15:19:10 +0000 (12:19 -0300)
Add a field to display the content the raw_data of a synthesized event.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Link: http://lkml.kernel.org/r/1495786658-18063-22-git-send-email-adrian.hunter@intel.com
[ Resolved conflict with 106dacd86f04 ("perf script: Support -F brstackoff,dso") ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/Documentation/perf-script.txt
tools/perf/builtin-script.c

index e2468ed..5ee8796 100644 (file)
@@ -117,7 +117,8 @@ OPTIONS
         Comma separated list of fields to print. Options are:
         comm, tid, pid, time, cpu, event, trace, ip, sym, dso, addr, symoff,
         srcline, period, iregs, brstack, brstacksym, flags, bpf-output, brstackinsn, brstackoff,
-        callindent, insn, insnlen. Field list can be prepended with the type, trace, sw or hw,
+        callindent, insn, insnlen, synth.
+        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
 
@@ -193,6 +194,9 @@ OPTIONS
        instruction bytes and the instruction length of the current
        instruction.
 
+       The synth field is used by synthesized events which may be created when
+       Instruction Trace decoding.
+
        Finally, a user may not set fields to none for all event types.
        i.e., -F "" is not allowed.
 
index 2999e7e..e87b480 100644 (file)
@@ -86,6 +86,7 @@ enum perf_output_field {
        PERF_OUTPUT_INSNLEN         = 1U << 22,
        PERF_OUTPUT_BRSTACKINSN     = 1U << 23,
        PERF_OUTPUT_BRSTACKOFF      = 1U << 24,
+       PERF_OUTPUT_SYNTH           = 1U << 25,
 };
 
 struct output_option {
@@ -117,6 +118,7 @@ struct output_option {
        {.str = "insnlen", .field = PERF_OUTPUT_INSNLEN},
        {.str = "brstackinsn", .field = PERF_OUTPUT_BRSTACKINSN},
        {.str = "brstackoff", .field = PERF_OUTPUT_BRSTACKOFF},
+       {.str = "synth", .field = PERF_OUTPUT_SYNTH},
 };
 
 enum {
@@ -196,7 +198,8 @@ static struct {
                .fields = PERF_OUTPUT_COMM | PERF_OUTPUT_TID |
                              PERF_OUTPUT_CPU | PERF_OUTPUT_TIME |
                              PERF_OUTPUT_EVNAME | PERF_OUTPUT_IP |
-                             PERF_OUTPUT_SYM | PERF_OUTPUT_DSO,
+                             PERF_OUTPUT_SYM | PERF_OUTPUT_DSO |
+                             PERF_OUTPUT_SYNTH,
 
                .invalid_fields = PERF_OUTPUT_TRACE | PERF_OUTPUT_BPF_OUTPUT,
        },
@@ -1200,6 +1203,15 @@ static void print_sample_bpf_output(struct perf_sample *sample)
                       (char *)(sample->raw_data));
 }
 
+static void print_sample_synth(struct perf_sample *sample __maybe_unused,
+                              struct perf_evsel *evsel)
+{
+       switch (evsel->attr.config) {
+       default:
+               break;
+       }
+}
+
 struct perf_script {
        struct perf_tool        tool;
        struct perf_session     *session;
@@ -1284,6 +1296,10 @@ static void process_event(struct perf_script *script,
        if (PRINT_FIELD(TRACE))
                event_format__print(evsel->tp_format, sample->cpu,
                                    sample->raw_data, sample->raw_size);
+
+       if (attr->type == PERF_TYPE_SYNTH && PRINT_FIELD(SYNTH))
+               print_sample_synth(sample, evsel);
+
        if (PRINT_FIELD(ADDR))
                print_sample_addr(sample, thread, attr);
 
@@ -2605,7 +2621,7 @@ int cmd_script(int argc, const char **argv)
                     "Valid types: hw,sw,trace,raw,synth. "
                     "Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso,"
                     "addr,symoff,period,iregs,brstack,brstacksym,flags,"
-                    "bpf-output,callindent,insn,insnlen,brstackinsn",
+                    "bpf-output,callindent,insn,insnlen,brstackinsn,synth",
                     parse_output_fields),
        OPT_BOOLEAN('a', "all-cpus", &system_wide,
                    "system-wide collection from all CPUs"),