Adding period data column to be displayed in perf script. It's possible to get period values using -f option, like: $ perf script -f comm,tid,time,period,ip,sym,dso :26019 26019 52414.329088: 3707 ffffffff8105443a native_write_msr_safe ([kernel.kallsyms]) :26019 26019 52414.329088: 44 ffffffff8105443a native_write_msr_safe ([kernel.kallsyms]) :26019 26019 52414.329093: 1987 ffffffff8105443a native_write_msr_safe ([kernel.kallsyms]) :26019 26019 52414.329093: 6 ffffffff8105443a native_write_msr_safe ([kernel.kallsyms]) ls 26019 52414.329442: 537558 3407c0639c _dl_map_object_from_fd (/usr/lib64/ld-2.17.so) ls 26019 52414.329442: 2099 3407c0639c _dl_map_object_from_fd (/usr/lib64/ld-2.17.so) ls 26019 52414.330181: 1242100 34080917bb get_next_seq (/usr/lib64/libc-2.17.so) ls 26019 52414.330181: 3774 34080917bb get_next_seq (/usr/lib64/libc-2.17.so) ls 26019 52414.331427: 1083662 ffffffff810c7dc2 update_curr ([kernel.kallsyms]) ls 26019 52414.331427: 360 ffffffff810c7dc2 update_curr ([kernel.kallsyms])
Unified · Split
| @@ -115,7 +115,7 @@ OPTIONS · 114 unmodified lines | ||
| 115 | 115 | -f:: |
| 116 | 116 | --fields:: |
| 117 | 117 | Comma separated list of fields to print. Options are: |
| 118 | − comm, tid, pid, time, cpu, event, trace, ip, sym, dso, addr, symoff, srcline. | |
| 118 | + comm, tid, pid, time, cpu, event, trace, ip, sym, dso, addr, symoff, srcline, period. | |
| 119 | 119 | Field list can be prepended with the type, trace, sw or hw, |
| 120 | 120 | to indicate to which event type the field list applies. |
| 121 | 121 | e.g., -f sw:comm,tid,time,ip,sym and -f trace:time,cpu,trace |
| @@ -44,6 +44,7 @@ enum perf_output_field { · 43 unmodified lines | ||
| 44 | 44 | PERF_OUTPUT_ADDR = 1U << 10, |
| 45 | 45 | PERF_OUTPUT_SYMOFFSET = 1U << 11, |
| 46 | 46 | PERF_OUTPUT_SRCLINE = 1U << 12, |
| 47 | + PERF_OUTPUT_PERIOD = 1U << 13, | |
| 47 | 48 | }; |
| 48 | 49 | |
| 49 | 50 | struct output_option { |
| @@ -63,6 +64,7 @@ struct output_option { · 13 unmodified lines | ||
| 63 | 64 | {.str = "addr", .field = PERF_OUTPUT_ADDR}, |
| 64 | 65 | {.str = "symoff", .field = PERF_OUTPUT_SYMOFFSET}, |
| 65 | 66 | {.str = "srcline", .field = PERF_OUTPUT_SRCLINE}, |
| 67 | + {.str = "period", .field = PERF_OUTPUT_PERIOD}, | |
| 66 | 68 | }; |
| 67 | 69 | |
| 68 | 70 | /* default set to maintain compatibility with current format */ |
| @@ -229,6 +231,11 @@ static int perf_evsel__check_attr(struct perf_evsel *evsel, · 160 unmodified lines | ||
| 229 | 231 | PERF_OUTPUT_CPU)) |
| 230 | 232 | return -EINVAL; |
| 231 | 233 | |
| 234 | + if (PRINT_FIELD(PERIOD) && | |
| 235 | + perf_evsel__check_stype(evsel, PERF_SAMPLE_PERIOD, "PERIOD", | |
| 236 | + PERF_OUTPUT_PERIOD)) | |
| 237 | + return -EINVAL; | |
| 238 | + | |
| 232 | 239 | return 0; |
| 233 | 240 | } |
| 234 | 241 | |
| @@ -448,6 +455,9 @@ static void process_event(union perf_event *event, struct perf_sample *sample, · 213 unmodified lines | ||
| 448 | 455 | |
| 449 | 456 | print_sample_start(sample, thread, evsel); |
| 450 | 457 | |
| 458 | + if (PRINT_FIELD(PERIOD)) | |
| 459 | + printf("%10" PRIu64 " ", sample->period); | |
| 460 | + | |
| 451 | 461 | if (PRINT_FIELD(EVNAME)) { |
| 452 | 462 | const char *evname = perf_evsel__name(evsel); |
| 453 | 463 | printf("%s: ", evname ? evname : "[unknown]"); |
| @@ -1543,7 +1553,7 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused) · 1089 unmodified lines | ||
| 1543 | 1553 | "comma separated output fields prepend with 'type:'. " |
| 1544 | 1554 | "Valid types: hw,sw,trace,raw. " |
| 1545 | 1555 | "Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso," |
| 1546 | − "addr,symoff", parse_output_fields), | |
| 1556 | + "addr,symoff,period", parse_output_fields), | |
| 1547 | 1557 | OPT_BOOLEAN('a', "all-cpus", &system_wide, |
| 1548 | 1558 | "system-wide collection from all CPUs"), |
| 1549 | 1559 | OPT_STRING('S', "symbols", &symbol_conf.sym_list_str, "symbol[,symbol...]", |