perf_event_open.2: Update man page with recent kernel changes

Signed-off-by: Namhyung Kim <namhyung@gmail.com>
[alx: ffix + tfix]
Cowritten-by:  Alejandro Colomar <alx.manpages@gmail.com>
Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com>

Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Stephane Eranian <eranian@google.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Song Liu <songliubraving@fb.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Vince Weaver <vincent.weaver@maine.edu>

Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
Namhyung Kim 2020-11-18 13:47:36 +01:00 committed by Michael Kerrisk
parent bdeb6c887e
commit 1e554f3e32
1 changed files with 278 additions and 2 deletions

View File

@ -247,8 +247,17 @@ struct perf_event_attr {
due to exec */ due to exec */
use_clockid : 1, /* use clockid for time fields */ use_clockid : 1, /* use clockid for time fields */
context_switch : 1, /* context switch data */ context_switch : 1, /* context switch data */
write_backward : 1, /* Write ring buffer from end
to beginning */
namespaces : 1, /* include namespaces data */
ksymbol : 1, /* include ksymbol events */
bpf_event : 1, /* include bpf events */
aux_output : 1, /* generate AUX records
instead of events */
cgroup : 1, /* include cgroup events */
text_poke : 1, /* include text poke events */
__reserved_1 : 37; __reserved_1 : 30;
union { union {
__u32 wakeup_events; /* wakeup every n events */ __u32 wakeup_events; /* wakeup every n events */
@ -867,6 +876,20 @@ is set higher than zero then the register
values returned are those captured by values returned are those captured by
hardware at the time of the sampled hardware at the time of the sampled
instruction's retirement. instruction's retirement.
.TP
.BR PERF_SAMPLE_PHYS_ADDR " (since Linux 4.13)"
.\" commit fc7ce9c74c3ad232b084d80148654f926d01ece7
Records physical address of data like in
.B PERF_SAMPLE_ADDR .
.TP
.BR PERF_SAMPLE_CGROUP " (since Linux 5.7)"
.\" commit 96aaab686505c449e24d76e76507290dcc30e008
Records (perf_event) cgroup id of the process.
This corresponds to the
.I id
field in the
.B PERF_RECORD_CGROUP
event.
.RE .RE
.TP .TP
.I read_format .I read_format
@ -1202,6 +1225,49 @@ information even with strict
.I perf_event_paranoid .I perf_event_paranoid
settings. settings.
.TP .TP
.IR write_backward " (since Linux 4.6)"
.\" commit 9ecda41acb971ebd07c8fb35faf24005c0baea12
This makes the ring buffer is written from end to beginning.
This is to support reading from overwritable ring buffer.
.TP
.IR namespaces " (since Linux 4.11)"
.\" commit e422267322cd319e2695a535e47c5b1feeac45eb
This enables the generation of
.B PERF_RECORD_NAMESPACES
records when a task is entering to a new namespace.
Each namespace has a combination of device and inode numbers.
.TP
.IR ksymbol " (since Linux 5.0)"
.\" commit 76193a94522f1d4edf2447a536f3f796ce56343b
This enables the generation of
.B PERF_RECORD_KSYMBOL
records when a new kernel symbols are registered or unregistered.
This is analyzing dynamic kernel functions like eBPF.
.TP
.IR bpf_event " (since Linux 5.0)"
.\" commit 6ee52e2a3fe4ea35520720736e6791df1fb67106
This enables the generation of
.B PERF_RECORD_BPF_EVENT
records when a eBPF program is loaded or unloaded.
.TP
.IR auxevent " (since Linux 5.4)"
.\" commit ab43762ef010967e4ccd53627f70a2eecbeafefb
This allows normal (non-AUX) events to generate data for AUX events
if the hardware supports it.
.TP
.IR cgroup " (since Linux 5.7)"
.\" commit 96aaab686505c449e24d76e76507290dcc30e008
This enables the generation of
.B PERF_RECORD_CGROUP
records when a new cgroup is created (and activated).
.TP
.IR text_poke " (since Linux 5.8)"
.\" commit e17d43b93e544f5016c0251d2074c15568d5d963
This enables the generation of
.B PERF_RECORD_TEXT_POKE
records when there's a changes to the kernel text
(i.e. self-modifying code).
.TP
.IR wakeup_events ", " wakeup_watermark .IR wakeup_events ", " wakeup_watermark
This union sets how many samples This union sets how many samples
.RI ( wakeup_events ) .RI ( wakeup_events )
@ -2131,7 +2197,7 @@ struct {
u64 nr; /* if PERF_SAMPLE_CALLCHAIN */ u64 nr; /* if PERF_SAMPLE_CALLCHAIN */
u64 ips[nr]; /* if PERF_SAMPLE_CALLCHAIN */ u64 ips[nr]; /* if PERF_SAMPLE_CALLCHAIN */
u32 size; /* if PERF_SAMPLE_RAW */ u32 size; /* if PERF_SAMPLE_RAW */
char data[size]; /* if PERF_SAMPLE_RAW */ char data[size]; /* if PERF_SAMPLE_RAW */
u64 bnr; /* if PERF_SAMPLE_BRANCH_STACK */ u64 bnr; /* if PERF_SAMPLE_BRANCH_STACK */
struct perf_branch_entry lbr[bnr]; struct perf_branch_entry lbr[bnr];
/* if PERF_SAMPLE_BRANCH_STACK */ /* if PERF_SAMPLE_BRANCH_STACK */
@ -2148,6 +2214,8 @@ struct {
u64 abi; /* if PERF_SAMPLE_REGS_INTR */ u64 abi; /* if PERF_SAMPLE_REGS_INTR */
u64 regs[weight(mask)]; u64 regs[weight(mask)];
/* if PERF_SAMPLE_REGS_INTR */ /* if PERF_SAMPLE_REGS_INTR */
u64 phys_addr; /* if PERF_SAMPLE_PHYS_ADDR */
u64 cgroup; /* if PERF_SAMPLE_CGROUP */
}; };
.EE .EE
.in .in
@ -2570,6 +2638,18 @@ attr field.
The number of values is the number of bits set in the The number of values is the number of bits set in the
.I sample_regs_intr .I sample_regs_intr
bit mask. bit mask.
.TP
.I phys_addr
If the
.B PERF_SAMPLE_PHYS_ADDR
flag is set, then 64-bit physical address is recorded.
.TP
.I cgroup
If the
.B PERF_SAMPLE_CGROUP
flag is set, then 64-bit cgroup id (for the perf_event subsystem) is recorded.
To get the pathname of the cgroup, the id should match to one in a
.B PERF_RECORD_CGROUP .
.RE .RE
.TP .TP
.B PERF_RECORD_MMAP2 .B PERF_RECORD_MMAP2
@ -2776,6 +2856,202 @@ or next (if switching out) process on the CPU.
The thread ID of the previous (if switching in) The thread ID of the previous (if switching in)
or next (if switching out) thread on the CPU. or next (if switching out) thread on the CPU.
.RE .RE
.TP
.BR PERF_RECORD_NAMESPACES " (since Linux 4.11)"
.\" commit e422267322cd319e2695a535e47c5b1feeac45eb
This record includes various namespace information of a process.
.IP
.in +4n
.EX
struct {
struct perf_event_header header;
u32 pid;
u32 tid;
u64 nr_namespaces;
struct { u64 dev, inode } [nr_namespaces];
struct sample_id sample_id;
};
.EE
.in
.RS
.TP
.I pid
is the process ID
.TP
.I tid
is the thread ID
.TP
.I nr_namespace
is the number of namespaces in this record
.RE
.IP
Each namespace has
.I dev
and
.I inode
fields and is recorded in the
fixed position like below:
.RS
.TP
.BR NET_NS_INDEX = 0
Network namespace
.TP
.BR UTS_NS_INDEX = 1
UTS namespace
.TP
.BR IPC_NS_INDEX = 2
IPC namespace
.TP
.BR PID_NS_INDEX = 3
PID namespace
.TP
.BR USER_NS_INDEX = 4
User namespace
.TP
.BR MNT_NS_INDEX = 5
Mount namespace
.TP
.BR CGROUP_NS_INDEX = 6
Cgroup namespace
.RE
.TP
.BR PERF_RECORD_KSYMBOL " (since Linux 5.0)"
.\" commit 76193a94522f1d4edf2447a536f3f796ce56343b
This record indicates kernel symbol register/unregister events.
.IP
.in +4n
.EX
struct {
struct perf_event_header header;
u64 addr;
u32 len;
u16 ksym_type;
u16 flags;
char name[];
struct sample_id sample_id;
};
.EE
.in
.RS
.TP
.I addr
is the address of the kernel symbol
.TP
.I len
is the length of the kernel symbol
.TP
.I ksym_type
is the type of the kernel symbol.
Currently following types are available:
.RS
.TP
.B PERF_RECORD_KSYMBOL_TYPE_BPF
The kernel symbols is a BPF function.
.RE
.TP
.I flags
If the
.B PERF_RECORD_KSYMBOL_FLAGS_UNREGISTER
is set, then this event is for unregistering the kernel symbol.
.RE
.TP
.BR PERF_RECORD_BPF_EVENT " (since Linux 5.0)"
.\" commit 6ee52e2a3fe4ea35520720736e6791df1fb67106
This record indicates BPF program is loaded or unloaded.
.IP
.in +4n
.EX
struct {
struct perf_event_header header;
u16 type;
u16 flags;
u32 id;
u8 tag[BPF_TAG_SIZE];
struct sample_id sample_id;
};
.EE
.in
.RS
.TP
.I type
is one of the following values:
.RS
.TP
.B PERF_BPF_EVENT_PROG_LOAD
A BPF program is loaded
.TP
.B PERF_BPF_EVENT_PROG_UNLOAD
A BPF program is unloaded
.RE
.TP
.I id
is the id of the BPF program.
.TP
.I tag
is the tag of the BPF program.
Currently,
.B BPF_TAG_SIZE
is defined as 8.
.RE
.TP
.BR PERF_RECORD_CGROUP " (since Linux 5.7)"
.\" commit 96aaab686505c449e24d76e76507290dcc30e008
This record indicates a new cgroup is created and activated.
.IP
.in +4n
.EX
struct {
struct perf_event_header header;
u64 id;
char path[];
struct sample_id sample_id;
};
.EE
.in
.RS
.TP
.I id
is the cgroup identifier.
This can be also retreived by
.BR name_to_handle_at (2)
on the cgroup path (as a file handle).
.TP
.I path
is the path of the cgroup from the root.
.RE
.TP
.BR PERF_RECORD_TEXT_POKE " (since Linux 5.8)"
.\" commit e17d43b93e544f5016c0251d2074c15568d5d963
This record indicates a change in the kernel text.
This includes addition and removal of the text
and the corresponding length is zero in this case.
.IP
.in +4n
.EX
struct {
struct perf_event_header header;
u64 addr;
u16 old_len;
u16 new_len;
u8 bytes[];
struct sample_id sample_id;
};
.EE
.in
.RS
.TP
.I addr
is the address of the change
.TP
.I old_len
is the old length
.TP
.I new_len
is the new length
.TP
.I bytes
contains old bytes immediately followed by new bytes.
.RE
.RE .RE
.SS Overflow handling .SS Overflow handling
Events can be set to notify when a threshold is crossed, Events can be set to notify when a threshold is crossed,