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/include | |
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/include')
-rw-r--r-- | tools/include/uapi/linux/perf_event.h | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/tools/include/uapi/linux/perf_event.h b/tools/include/uapi/linux/perf_event.h index c66a485a24ac..bec0aad0e15c 100644 --- a/tools/include/uapi/linux/perf_event.h +++ b/tools/include/uapi/linux/perf_event.h | |||
@@ -344,7 +344,8 @@ struct perf_event_attr { | |||
344 | use_clockid : 1, /* use @clockid for time fields */ | 344 | use_clockid : 1, /* use @clockid for time fields */ |
345 | context_switch : 1, /* context switch data */ | 345 | context_switch : 1, /* context switch data */ |
346 | write_backward : 1, /* Write ring buffer from end to beginning */ | 346 | write_backward : 1, /* Write ring buffer from end to beginning */ |
347 | __reserved_1 : 36; | 347 | namespaces : 1, /* include namespaces data */ |
348 | __reserved_1 : 35; | ||
348 | 349 | ||
349 | union { | 350 | union { |
350 | __u32 wakeup_events; /* wakeup every n events */ | 351 | __u32 wakeup_events; /* wakeup every n events */ |
@@ -610,6 +611,23 @@ struct perf_event_header { | |||
610 | __u16 size; | 611 | __u16 size; |
611 | }; | 612 | }; |
612 | 613 | ||
614 | struct perf_ns_link_info { | ||
615 | __u64 dev; | ||
616 | __u64 ino; | ||
617 | }; | ||
618 | |||
619 | enum { | ||
620 | NET_NS_INDEX = 0, | ||
621 | UTS_NS_INDEX = 1, | ||
622 | IPC_NS_INDEX = 2, | ||
623 | PID_NS_INDEX = 3, | ||
624 | USER_NS_INDEX = 4, | ||
625 | MNT_NS_INDEX = 5, | ||
626 | CGROUP_NS_INDEX = 6, | ||
627 | |||
628 | NR_NAMESPACES, /* number of available namespaces */ | ||
629 | }; | ||
630 | |||
613 | enum perf_event_type { | 631 | enum perf_event_type { |
614 | 632 | ||
615 | /* | 633 | /* |
@@ -862,6 +880,18 @@ enum perf_event_type { | |||
862 | */ | 880 | */ |
863 | PERF_RECORD_SWITCH_CPU_WIDE = 15, | 881 | PERF_RECORD_SWITCH_CPU_WIDE = 15, |
864 | 882 | ||
883 | /* | ||
884 | * struct { | ||
885 | * struct perf_event_header header; | ||
886 | * u32 pid; | ||
887 | * u32 tid; | ||
888 | * u64 nr_namespaces; | ||
889 | * { u64 dev, inode; } [nr_namespaces]; | ||
890 | * struct sample_id sample_id; | ||
891 | * }; | ||
892 | */ | ||
893 | PERF_RECORD_NAMESPACES = 16, | ||
894 | |||
865 | PERF_RECORD_MAX, /* non-ABI */ | 895 | PERF_RECORD_MAX, /* non-ABI */ |
866 | }; | 896 | }; |
867 | 897 | ||