mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
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>
74 lines
1.6 KiB
C
74 lines
1.6 KiB
C
#ifndef __PERF_TOOL_H
|
|
#define __PERF_TOOL_H
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct perf_session;
|
|
union perf_event;
|
|
struct perf_evlist;
|
|
struct perf_evsel;
|
|
struct perf_sample;
|
|
struct perf_tool;
|
|
struct machine;
|
|
struct ordered_events;
|
|
|
|
typedef int (*event_sample)(struct perf_tool *tool, union perf_event *event,
|
|
struct perf_sample *sample,
|
|
struct perf_evsel *evsel, struct machine *machine);
|
|
|
|
typedef int (*event_op)(struct perf_tool *tool, union perf_event *event,
|
|
struct perf_sample *sample, struct machine *machine);
|
|
|
|
typedef int (*event_attr_op)(struct perf_tool *tool,
|
|
union perf_event *event,
|
|
struct perf_evlist **pevlist);
|
|
|
|
typedef int (*event_op2)(struct perf_tool *tool, union perf_event *event,
|
|
struct perf_session *session);
|
|
|
|
typedef int (*event_oe)(struct perf_tool *tool, union perf_event *event,
|
|
struct ordered_events *oe);
|
|
|
|
typedef s64 (*event_op3)(struct perf_tool *tool, union perf_event *event,
|
|
struct perf_session *session);
|
|
|
|
struct perf_tool {
|
|
event_sample sample,
|
|
read;
|
|
event_op mmap,
|
|
mmap2,
|
|
comm,
|
|
namespaces,
|
|
fork,
|
|
exit,
|
|
lost,
|
|
lost_samples,
|
|
aux,
|
|
itrace_start,
|
|
context_switch,
|
|
throttle,
|
|
unthrottle;
|
|
event_attr_op attr;
|
|
event_attr_op event_update;
|
|
event_op2 tracing_data;
|
|
event_oe finished_round;
|
|
event_op2 build_id,
|
|
id_index,
|
|
auxtrace_info,
|
|
auxtrace_error,
|
|
time_conv,
|
|
thread_map,
|
|
cpu_map,
|
|
stat_config,
|
|
stat,
|
|
stat_round;
|
|
event_op3 auxtrace;
|
|
bool ordered_events;
|
|
bool ordering_requires_timestamps;
|
|
bool namespace_events;
|
|
};
|
|
|
|
#endif /* __PERF_TOOL_H */
|