PERF-RECORD(1) perf Manual PERF-RECORD(1) (NAME) perf-record - perf.data (SYNOPSIS) perf record [-e | --event=EVENT] [-a] perf record [-e | --event=EVENT] [-a] -- [] (DESCRIPTION) perf.data . perf report . (OPTIONS) ... . -e, --event= PMU. : o ( perf list ) o PMU rN N () /sys/bus/event_source/devices/cpu/format/* . o PMU cpu-cycles:p. perf- list(1) . o PMU pmu/param1=0x3,param2/ param1 param2 PMU /sys/bus/event_source/devices//format/* . o pmu/config=M,config1=N,config3=K/ M N K ( ) . 'config' 'config1' 'config2' /sys/bus/event_source/devices//format/* . param1 param2 PMU : /sys/bus/event_source/devices//format/* ...//format/* . . : - 'period': - 'freq': - 'time': / . . . - 'call-graph': / . "fp" FP "dwarf" DWARF "lbr" LBR "no" . - 'stack-size': dwarf - 'name' : . (') : name=\'CPU_CLK_UNHALTED.THREAD:cmask=0x1\'. - 'aux-output': AUX . AUX . - 'aux-action': "pause" "resume" AUX () . "start-paused" AUX . - 'aux-sample-size': AUX. '--aux-sample' aux-sample-size=0 AUX . perf-list(1) . : . PMU ...//format/* . '@' PMU . : perf record -e some_event/@cfg1,@cfg2=config/ ... 'cfg1' 'cfg2=config' PMU . PMU . o \mem:addr[/len][:access] addr . access ( ) : \mem:addr[:[r][w][x]]. len addr . - 0x1000 : mem:0x1000:rw. [0x1000~1008) : mem:0x1000/8:w. o ("{event1,event2,...}"). (shell) . --group "perf report" . --filter= . (-e) . tracepoint . PMU ( Intel PT CoreSight) . BPF . o tracepoint tracepoint '--filter' '&&' . o PMU /sys/bus/event_source/devices//nr_addr_filters . : filter|start|stop|tracestop [/ ] [@] : - 'filter': . - 'start': . - 'stop': . - 'tracestop': . (object file) . 'start' 'stop' . . (symbol) . #n 'n' n- . #0 #g #G (global) . . 'filter' 'tracestop' . '*' . ( '*') . . -v . . MMAP ( /proc//maps) . . o bpf BPF . BPF . BPF (root) . . . : --filter 'period > 1000, cpu == 1' --filter 'mem_op == load || mem_op == store, mem_lvl > l1' period 1000 CPU 1 . load store L1 . mem_op mem_lvl data_source () data_source . ( -d). . $ sudo perf record -e cycles --filter 'mem_op == load' Error: cycles event does not have PERF_SAMPLE_DATA_SRC Hint: please add -d option to perf record. failed to set filter "BPF" on event cycles with 22 (Invalid argument) BPF : (("," | "||") )* : ip, id, tid, pid, cpu, time, addr, period, txn, weight, phys_addr, code_pgsz, data_pgsz, weight1, weight2, weight3, ins_lat, retire_lat, p_stage_cyc, mem_op, mem_lvl, mem_snoop, mem_remote, mem_lock, mem_dtlb, mem_blk, mem_hops, uid, gid : ==, !=, >, >=, <, <=, & : ( ) na, load, store, pfetch, exec ( mem_op) l1, l2, l3, l4, cxl, io, any_cache, lfb, ram, pmem ( mem_lvl) na, none, hit, miss, hitm, fwd, peer ( mem_snoop) remote ( mem_remote) na, locked ( mem_locked) na, l1_hit, l1_miss, l2_hit, l2_miss, any_hit, any_miss, walk, fault ( mem_dtlb) na, by_data, by_addr ( mem_blk) hops0, hops1, hops2, hops3 ( mem_hops) --exclude-perf perf . (-e) () (tracepoint) . common_pid != $PERFPID . --filter && . --latency (latency) . perf report --latency . -a, --all-cpus CPU ( ). -p, --pid= (PID) ( ). -t, --tid= (TID) ( ). . --inherit . -u, --uid= uid. . -r, --realtime= (RT) SCHED_FIFO. --no-buffering . -c, --count= . -o, --output= . -i, --no-inherit . -F, --freq= (). sysctl kernel.perf_event_max_sample_rate max . (throttle) . --strict-freq . --strict-freq . -m, --mmap-pages= mmap ( ) - B/K/M/G. . mmap AUX . -g ( /backtrace) . --call-graph ( /backtrace) -g . "fp" ( ). (unwinding) unwinder CONFIG_UNWINDER_FRAME_POINTER (fp) CONFIG_UNWINDER_ORC (orc) . "fp" ( / frame pointer) "dwarf" ( DWARF's CFI - Call Frame Information) "lbr" ( Last Branch Record). --fomit-frame-pointer gcc "fp" "dwarf" ( perf libunwind libdw ) . "lbr" . LBR . Haswell . . "dwarf" perf () . () . "--call-graph dwarf,4096". "fp" perf sysctl.kernel.perf_event_max_stack . "--call-graph fp,32". "defer" "fp" ( "--call-graph fp,defer") callchain callchain . -q, --quiet . -v, --verbose ( ). -s, --stat (per-thread) . perf report -T . -d, --data . --sample-mem-info --data-mmap . --phys-data . --data-page-size . --code-page-size (ip) -T, --timestamp . perf report -D . -P, --period (sample period) . --sample-cpu (CPU) . --sample-identifier PERF_SAMPLE_IDENTIFIER sample_type struct perf_event_attr perf_event_open. --sample-mem-info . . perf mem record . -n, --no-samples . -R, --raw-samples ( tracepoint). -C, --cpu . : 0,1. - : 0-2. per-thread () . . (dummy event) (sideband) . -B, --no-buildid (build id) perf.data . mmap . (pathname) . "record.build-id" 'skip . -N, --no-buildid-cache buildid . perf.data ( buildid) . "record.build-id" no-cache . -G name,..., --cgroup name,... (cgroup) "name" . per-cpu . cgroup (mount) . "name" . cgroup . cgroup cgroup cgroup . cgroup ( ) -G foo,,bar . cgroup . cgroup -e e1 -e e2 -G foo,foo -e e1 -e e2 -G foo . cycles cgroup : perf stat -e cycles -G cgroup_name -a -e cycles. -b, --branch-any (taken branch stack) . . --branch-filter any . --branch-filter . -j, --branch-filter . . . . : o any: o any_call: o any_ret: o ind_call: o ind_jmp: o call: (far) (/ ) o u: o k: o hv: o in_tx: o no_tx: o abort_tx: o cond: o stack: o no_flags: o no_cycles: o hw_index: o save_type: . Intel Arch LBR ( 12th-Gen+ 4th-Gen Xeon+) . o priv: o counter: . Intel Sierra Forest . . any any_call any_ret ind_call cond . . (k) (hv) . . . : --branch-filter any_ret,u,k . -W, --weight . weight local_weight . TSX (precise mode) Intel . --namespaces PERF_RECORD_NAMESPACES. cgroup_id . --all-cgroups PERF_RECORD_CGROUP . cgroup . --transaction . --per-thread (mmap) (per-thread) . (per-cpu) . . . -a -C --per-thread . -D, --delay= (-1: ) ( -D 10-20,30-40 ). . -I, --intr-regs () . . . x86 ax si. --intr-regs=\? . --intr-regs=ax,bx . . --user-regs -I . --user-regs=\? . --running-time (:S) . -k, --clockid (clock id) perf_event_type . clock_gettime() . CLOCK_MONOTONIC CLOCK_MONOTONIC_RAW CLOCK_BOOTTIME CLOCK_REALTIME CLOCK_TAI . -S, --snapshot (Snapshot Mode) AUX . AUX . : o e: o : PMU . Snapshot Mode SIGUSR2 e . --aux-sample[=OPTIONS] AUX . -e AUX . AUX . 4KiB . --proc-map-timeout /proc/XXX/mmap . (timeout) . . . --switch-events (context switch) PERF_RECORD_SWITCH PERF_RECORD_SWITCH_CPU_WIDE. ( Intel PT CoreSight Arm SPE) --no-switch-events . --vmlinux=PATH vmlinux (debuginfo) . ( BPF prologue ) --buildid-all (build-id) DSO / . --buildid-mmap build-id (map events) . --no-buildid . --no-buildid-mmap . --aio[=n] (Posix AIO) (: : ). Perf libc API Posix AIO . --affinity=mode (affinity mask) mode : o node - NUMA mmap o cpu - mmap --mmap-flush=number mmap . B/K/M/G . mmap . mmap (-z) perf.data (pipe) . mmap . (syscall) (overhead) . -z, --compression-level[=n] n (: - - ) --all-kernel (kernel space) . --all-user (user space) . --kernel-callchains (callchain) perf_event_attr.exclude_callchain_user . --user-callchains perf_event_attr.exclude_callchain_kernel . --kernel-callchains --user-callchains . --timestamp-filename (timestamp) . --timestamp-boundary ( / ) . --switch-output[=mode] perf.data mode: o "signal" - SIGUSR2 ( ) o - - B/K/M/G o