diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-12-29 12:50:21 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-12-29 12:50:21 +0100 |
| commit | b888d0cf5c4db046eef7d5c259b41d7f0719ecfc (patch) | |
| tree | c53765321f58ee8446f8cec334b6565ab49089f1 /sys/linux/perf.txt | |
| parent | 0cbc76dfeaca130ad2768c18b8b9a7eae515264f (diff) | |
sys/linux: improve perf descriptions
Diffstat (limited to 'sys/linux/perf.txt')
| -rw-r--r-- | sys/linux/perf.txt | 105 |
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 } |
