aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/perf.txt
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-12-29 12:50:21 +0100
committerDmitry Vyukov <dvyukov@google.com>2017-12-29 12:50:21 +0100
commitb888d0cf5c4db046eef7d5c259b41d7f0719ecfc (patch)
treec53765321f58ee8446f8cec334b6565ab49089f1 /sys/linux/perf.txt
parent0cbc76dfeaca130ad2768c18b8b9a7eae515264f (diff)
sys/linux: improve perf descriptions
Diffstat (limited to 'sys/linux/perf.txt')
-rw-r--r--sys/linux/perf.txt105
1 files changed, 72 insertions, 33 deletions
diff --git a/sys/linux/perf.txt b/sys/linux/perf.txt
index 1c2e20ddd..bea53894f 100644
--- a/sys/linux/perf.txt
+++ b/sys/linux/perf.txt
@@ -6,6 +6,7 @@ include <linux/hw_breakpoint.h>
resource fd_perf[fd]
+# TODO: pid is cgroup fd if ERF_FLAG_PID_CGROUP is set.
perf_event_open(attr ptr[in, perf_event_attr], pid pid, cpu intptr, group fd_perf, flags flags[perf_flags]) fd_perf
ioctl$PERF_EVENT_IOC_ENABLE(fd fd_perf, cmd const[PERF_EVENT_IOC_ENABLE], flags intptr)
@@ -17,46 +18,84 @@ ioctl$PERF_EVENT_IOC_ID(fd fd_perf, cmd const[PERF_EVENT_IOC_ID], id ptr[out, in
ioctl$PERF_EVENT_IOC_SET_OUTPUT(fd fd_perf, cmd const[PERF_EVENT_IOC_SET_OUTPUT], other fd_perf)
ioctl$PERF_EVENT_IOC_SET_FILTER(fd fd_perf, cmd const[PERF_EVENT_IOC_SET_FILTER], filter ptr[in, string])
ioctl$PERF_EVENT_IOC_SET_BPF(fd fd_perf, cmd const[PERF_EVENT_IOC_SET_BPF], prog fd_bpf_prog)
+ioctl$PERF_EVENT_IOC_PAUSE_OUTPUT(fd fd_perf, cmd const[PERF_EVENT_IOC_PAUSE_OUTPUT], arg intptr[0:1])
perf_flags = PERF_FLAG_FD_NO_GROUP, PERF_FLAG_FD_OUTPUT, PERF_FLAG_PID_CGROUP, PERF_FLAG_FD_CLOEXEC
perf_event_type = PERF_TYPE_HARDWARE, PERF_TYPE_SOFTWARE, PERF_TYPE_TRACEPOINT, PERF_TYPE_HW_CACHE, PERF_TYPE_RAW, PERF_TYPE_BREAKPOINT
perf_bp_type = HW_BREAKPOINT_EMPTY, HW_BREAKPOINT_R, HW_BREAKPOINT_W, HW_BREAKPOINT_X
-perf_sample_type = PERF_SAMPLE_IP, PERF_SAMPLE_TID, PERF_SAMPLE_TIME, PERF_SAMPLE_ADDR, PERF_SAMPLE_READ, PERF_SAMPLE_CALLCHAIN, PERF_SAMPLE_ID, PERF_SAMPLE_CPU, PERF_SAMPLE_PERIOD, PERF_SAMPLE_STREAM_ID, PERF_SAMPLE_RAW, PERF_SAMPLE_BRANCH_STACK, PERF_SAMPLE_REGS_USER, PERF_SAMPLE_STACK_USER, PERF_SAMPLE_WEIGHT, PERF_SAMPLE_DATA_SRC, PERF_SAMPLE_IDENTIFIER, PERF_SAMPLE_TRANSACTION, PERF_SAMPLE_REGS_INTR
+perf_sample_type = PERF_SAMPLE_IP, PERF_SAMPLE_TID, PERF_SAMPLE_TIME, PERF_SAMPLE_ADDR, PERF_SAMPLE_READ, PERF_SAMPLE_CALLCHAIN, PERF_SAMPLE_ID, PERF_SAMPLE_CPU, PERF_SAMPLE_PERIOD, PERF_SAMPLE_STREAM_ID, PERF_SAMPLE_RAW, PERF_SAMPLE_BRANCH_STACK, PERF_SAMPLE_REGS_USER, PERF_SAMPLE_STACK_USER, PERF_SAMPLE_WEIGHT, PERF_SAMPLE_DATA_SRC, PERF_SAMPLE_IDENTIFIER, PERF_SAMPLE_TRANSACTION, PERF_SAMPLE_REGS_INTR, PERF_SAMPLE_PHYS_ADDR
perf_read_format = PERF_FORMAT_TOTAL_TIME_ENABLED, PERF_FORMAT_TOTAL_TIME_RUNNING, PERF_FORMAT_ID, PERF_FORMAT_GROUP
-perf_branch_sample_type = PERF_SAMPLE_BRANCH_USER, PERF_SAMPLE_BRANCH_KERNEL, PERF_SAMPLE_BRANCH_HV, PERF_SAMPLE_BRANCH_ANY, PERF_SAMPLE_BRANCH_ANY_CALL, PERF_SAMPLE_BRANCH_ANY_RETURN, PERF_SAMPLE_BRANCH_IND_CALL, PERF_SAMPLE_BRANCH_ABORT_TX, PERF_SAMPLE_BRANCH_IN_TX, PERF_SAMPLE_BRANCH_NO_TX, PERF_SAMPLE_BRANCH_COND, PERF_SAMPLE_BRANCH_CALL_STACK, PERF_SAMPLE_BRANCH_IND_JUMP, PERF_SAMPLE_BRANCH_CALL, PERF_SAMPLE_BRANCH_NO_FLAGS, PERF_SAMPLE_BRANCH_NO_CYCLES, PERF_SAMPLE_BRANCH_MAX
-perf_attr_flags = 1, 2, 4, 8, 16
+perf_branch_sample_type = PERF_SAMPLE_BRANCH_USER, PERF_SAMPLE_BRANCH_KERNEL, PERF_SAMPLE_BRANCH_HV, PERF_SAMPLE_BRANCH_ANY, PERF_SAMPLE_BRANCH_ANY_CALL, PERF_SAMPLE_BRANCH_ANY_RETURN, PERF_SAMPLE_BRANCH_IND_CALL, PERF_SAMPLE_BRANCH_ABORT_TX, PERF_SAMPLE_BRANCH_IN_TX, PERF_SAMPLE_BRANCH_NO_TX, PERF_SAMPLE_BRANCH_COND, PERF_SAMPLE_BRANCH_CALL_STACK, PERF_SAMPLE_BRANCH_IND_JUMP, PERF_SAMPLE_BRANCH_CALL, PERF_SAMPLE_BRANCH_NO_FLAGS, PERF_SAMPLE_BRANCH_NO_CYCLES, PERF_SAMPLE_BRANCH_TYPE_SAVE, PERF_SAMPLE_BRANCH_MAX
+perf_bp_lens = 1, 2, 4, 8
perf_event_attr {
- type flags[perf_event_type, int32]
- size len[parent, int32]
+ type flags[perf_event_type, int32]
+ size len[parent, int32]
#TODO: config can contain lots of various flags depending on type.
# this is a hacky way to generate something reasonable.
- config0 int8
- config1 int8
- config2 int8
- config3 int8
- config4 const[0, int32]
- freq int64
- sample flags[perf_sample_type, int64]
- format flags[perf_read_format, int64]
-# Lots of various bit flags.
-# Split into int8's because for int64 large values generated less frequently than small ones.
-# Kernel checks that unused bits are zero.
- flags0 int8
- flags1 int8
- flags2 int8
- flags3 flags[perf_attr_flags, int8]
- freserv const[0, int32]
- wakeup int32
- bptype flags[perf_bp_type, int32]
- config5 int64
- config6 int64
- bsample flags[perf_branch_sample_type, int64]
- regs int64
- stack int64
- clockid flags[clock_type, int32]
- regs2 int64
- auxwm int32
- maxstk int16
- reserv const[0, int16]
+ config0 int8
+ config1 int8
+ config2 int8
+ config3 int8
+ config4 const[0, int32]
+ sample_freq int64
+ sample_type flags[perf_sample_type, int64]
+ read_format flags[perf_read_format, int64]
+
+ disabled int64:1
+ inherit int64:1
+ pinned int64:1
+ exclusive int64:1
+ exclude_user int64:1
+ exclude_kernel int64:1
+ exclude_hv int64:1
+ exclude_idle int64:1
+ mmap int64:1
+ comm int64:1
+ freq int64:1
+ inherit_stat int64:1
+ enable_on_exec int64:1
+ task int64:1
+ watermark int64:1
+ precise_ip int64:2
+ mmap_data int64:1
+ sample_id_all int64:1
+ exclude_host int64:1
+ exclude_guest int64:1
+ exclude_callchain_kernel int64:1
+ exclude_callchain_user int64:1
+ mmap2 int64:1
+ comm_exec int64:1
+ use_clockid int64:1
+ context_switch int64:1
+ write_backward int64:1
+ namespaces int64:1
+ __reserved_1 const[0, int64:35]
+
+ wakeup_events int32
+ bp_type flags[perf_bp_type, int32]
+ bp_config perf_bp_config
+ branch_sample_type flags[perf_branch_sample_type, int64]
+ sample_regs_user int64
+ sample_stack_user int64
+ clockid flags[clock_type, int32]
+ sample_regs_intr int64
+ aux_watermark int32
+ sample_max_stack int16
+ __reserved_2 const[0, int16]
+}
+
+perf_bp_config [
+ perf_bp perf_bp
+ perf_config_ext perf_config_ext
+]
+
+perf_bp {
+ bp_addr ptr64[out, int8]
+ bp_len flags[perf_bp_lens, int64]
+}
+
+perf_config_ext {
+ config1 int64
+ config2 int64
}