diff options
author | Hari Bathini <hbathini@linux.vnet.ibm.com> | 2017-03-07 15:41:43 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2017-03-14 10:38:23 -0400 |
commit | f3b3614a284deb124018155a618a7b19694c8b5c (patch) | |
tree | 0901f0e0749fa5e2cb0f22ef5239ed62617f9fdc /tools/perf/builtin-inject.c | |
parent | e422267322cd319e2695a535e47c5b1feeac45eb (diff) |
perf tools: Add PERF_RECORD_NAMESPACES to include namespaces related info
Introduce a new option to record PERF_RECORD_NAMESPACES events emitted
by the kernel when fork, clone, setns or unshare are invoked. And update
perf-record documentation with the new option to record namespace
events.
Committer notes:
Combined it with a later patch to allow printing it via 'perf report -D'
and be able to test the feature introduced in this patch. Had to move
here also perf_ns__name(), that was introduced in another later patch.
Also used PRIu64 and PRIx64 to fix the build in some enfironments wrt:
util/event.c:1129:39: error: format '%lx' expects argument of type 'long unsigned int', but argument 6 has type 'long long unsigned int' [-Werror=format=]
ret += fprintf(fp, "%u/%s: %lu/0x%lx%s", idx
^
Testing it:
# perf record --namespaces -a
^C[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 1.083 MB perf.data (423 samples) ]
#
# perf report -D
<SNIP>
3 2028902078892 0x115140 [0xa0]: PERF_RECORD_NAMESPACES 14783/14783 - nr_namespaces: 7
[0/net: 3/0xf0000081, 1/uts: 3/0xeffffffe, 2/ipc: 3/0xefffffff, 3/pid: 3/0xeffffffc,
4/user: 3/0xeffffffd, 5/mnt: 3/0xf0000000, 6/cgroup: 3/0xeffffffb]
0x1151e0 [0x30]: event: 9
.
. ... raw event: size 48 bytes
. 0000: 09 00 00 00 02 00 30 00 c4 71 82 68 0c 7f 00 00 ......0..q.h....
. 0010: a9 39 00 00 a9 39 00 00 94 28 fe 63 d8 01 00 00 .9...9...(.c....
. 0020: 03 00 00 00 00 00 00 00 ce c4 02 00 00 00 00 00 ................
<SNIP>
NAMESPACES events: 1
<SNIP>
#
Signed-off-by: Hari Bathini <hbathini@linux.vnet.ibm.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexei Starovoitov <ast@fb.com>
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
Cc: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: Eric Biederman <ebiederm@xmission.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Sargun Dhillon <sargun@sargun.me>
Cc: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/148891930386.25309.18412039920746995488.stgit@hbathini.in.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-inject.c')
-rw-r--r-- | tools/perf/builtin-inject.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c index b9bc7e39833a..8d1d13b9bab6 100644 --- a/tools/perf/builtin-inject.c +++ b/tools/perf/builtin-inject.c | |||
@@ -333,6 +333,18 @@ static int perf_event__repipe_comm(struct perf_tool *tool, | |||
333 | return err; | 333 | return err; |
334 | } | 334 | } |
335 | 335 | ||
336 | static int perf_event__repipe_namespaces(struct perf_tool *tool, | ||
337 | union perf_event *event, | ||
338 | struct perf_sample *sample, | ||
339 | struct machine *machine) | ||
340 | { | ||
341 | int err = perf_event__process_namespaces(tool, event, sample, machine); | ||
342 | |||
343 | perf_event__repipe(tool, event, sample, machine); | ||
344 | |||
345 | return err; | ||
346 | } | ||
347 | |||
336 | static int perf_event__repipe_exit(struct perf_tool *tool, | 348 | static int perf_event__repipe_exit(struct perf_tool *tool, |
337 | union perf_event *event, | 349 | union perf_event *event, |
338 | struct perf_sample *sample, | 350 | struct perf_sample *sample, |
@@ -660,6 +672,7 @@ static int __cmd_inject(struct perf_inject *inject) | |||
660 | session->itrace_synth_opts = &inject->itrace_synth_opts; | 672 | session->itrace_synth_opts = &inject->itrace_synth_opts; |
661 | inject->itrace_synth_opts.inject = true; | 673 | inject->itrace_synth_opts.inject = true; |
662 | inject->tool.comm = perf_event__repipe_comm; | 674 | inject->tool.comm = perf_event__repipe_comm; |
675 | inject->tool.namespaces = perf_event__repipe_namespaces; | ||
663 | inject->tool.exit = perf_event__repipe_exit; | 676 | inject->tool.exit = perf_event__repipe_exit; |
664 | inject->tool.id_index = perf_event__repipe_id_index; | 677 | inject->tool.id_index = perf_event__repipe_id_index; |
665 | inject->tool.auxtrace_info = perf_event__process_auxtrace_info; | 678 | inject->tool.auxtrace_info = perf_event__process_auxtrace_info; |