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-record.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-record.c')
-rw-r--r-- | tools/perf/builtin-record.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index bc84a375295d..99562c7242b6 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c | |||
@@ -876,6 +876,9 @@ static int __cmd_record(struct record *rec, int argc, const char **argv) | |||
876 | signal(SIGTERM, sig_handler); | 876 | signal(SIGTERM, sig_handler); |
877 | signal(SIGSEGV, sigsegv_handler); | 877 | signal(SIGSEGV, sigsegv_handler); |
878 | 878 | ||
879 | if (rec->opts.record_namespaces) | ||
880 | tool->namespace_events = true; | ||
881 | |||
879 | if (rec->opts.auxtrace_snapshot_mode || rec->switch_output.enabled) { | 882 | if (rec->opts.auxtrace_snapshot_mode || rec->switch_output.enabled) { |
880 | signal(SIGUSR2, snapshot_sig_handler); | 883 | signal(SIGUSR2, snapshot_sig_handler); |
881 | if (rec->opts.auxtrace_snapshot_mode) | 884 | if (rec->opts.auxtrace_snapshot_mode) |
@@ -1497,6 +1500,7 @@ static struct record record = { | |||
1497 | .fork = perf_event__process_fork, | 1500 | .fork = perf_event__process_fork, |
1498 | .exit = perf_event__process_exit, | 1501 | .exit = perf_event__process_exit, |
1499 | .comm = perf_event__process_comm, | 1502 | .comm = perf_event__process_comm, |
1503 | .namespaces = perf_event__process_namespaces, | ||
1500 | .mmap = perf_event__process_mmap, | 1504 | .mmap = perf_event__process_mmap, |
1501 | .mmap2 = perf_event__process_mmap2, | 1505 | .mmap2 = perf_event__process_mmap2, |
1502 | .ordered_events = true, | 1506 | .ordered_events = true, |
@@ -1611,6 +1615,8 @@ static struct option __record_options[] = { | |||
1611 | "opts", "AUX area tracing Snapshot Mode", ""), | 1615 | "opts", "AUX area tracing Snapshot Mode", ""), |
1612 | OPT_UINTEGER(0, "proc-map-timeout", &record.opts.proc_map_timeout, | 1616 | OPT_UINTEGER(0, "proc-map-timeout", &record.opts.proc_map_timeout, |
1613 | "per thread proc mmap processing timeout in ms"), | 1617 | "per thread proc mmap processing timeout in ms"), |
1618 | OPT_BOOLEAN(0, "namespaces", &record.opts.record_namespaces, | ||
1619 | "Record namespaces events"), | ||
1614 | OPT_BOOLEAN(0, "switch-events", &record.opts.record_switch_events, | 1620 | OPT_BOOLEAN(0, "switch-events", &record.opts.record_switch_events, |
1615 | "Record context switch events"), | 1621 | "Record context switch events"), |
1616 | OPT_BOOLEAN_FLAG(0, "all-kernel", &record.opts.all_kernel, | 1622 | OPT_BOOLEAN_FLAG(0, "all-kernel", &record.opts.all_kernel, |