5e6da6be30
Previously a BPF event of augmented_raw_syscalls.c could be used to enable augmentation of syscalls by perf trace. As BPF events are no longer supported, switch to using a BPF skeleton which when attached explicitly opens the sysenter and sysexit tracepoints. The dump map is removed as debugging wasn't supported by the augmentation and bpf_printk can be used when necessary. Remove tools/perf/examples/bpf/augmented_raw_syscalls.c so that the rename/migration to a BPF skeleton captures that this was the source. Committer notes: Some minor stylistic changes to help visualizing the diff. Use libbpf_strerror when failing to load the augmented raw syscalls BPF. Use bpf_object__for_each_program(prog, trace.skel->obj) to disable auto attachment for all but the sys_enter, sys_exit tracepoints, to avoid having to add extra lines as we go adding support for more pointer receiving syscalls. Committer testing: # perf trace -e open* --max-events=10 0.000 ( 0.022 ms): systemd-oomd/1151 openat(dfd: CWD, filename: "/proc/meminfo", flags: RDONLY|CLOEXEC) = 11 208.833 ( ): gnome-terminal/3223 openat(dfd: CWD, filename: "/proc/51250/cmdline") ... 249.993 ( 0.024 ms): systemd-oomd/1151 openat(dfd: CWD, filename: "/proc/meminfo", flags: RDONLY|CLOEXEC) = 11 250.118 ( 0.030 ms): systemd-oomd/1151 openat(dfd: CWD, filename: "/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/memory.pressure", flags: RDONLY|CLOEXEC) = 11 250.205 ( 0.016 ms): systemd-oomd/1151 openat(dfd: CWD, filename: "/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/memory.current", flags: RDONLY|CLOEXEC) = 11 250.244 ( 0.014 ms): systemd-oomd/1151 openat(dfd: CWD, filename: "/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/memory.min", flags: RDONLY|CLOEXEC) = 11 250.282 ( 0.014 ms): systemd-oomd/1151 openat(dfd: CWD, filename: "/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/memory.low", flags: RDONLY|CLOEXEC) = 11 250.320 ( 0.014 ms): systemd-oomd/1151 openat(dfd: CWD, filename: "/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/memory.swap.current", flags: RDONLY|CLOEXEC) = 11 250.355 ( 0.014 ms): systemd-oomd/1151 openat(dfd: CWD, filename: "/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/memory.stat", flags: RDONLY|CLOEXEC) = 11 250.717 ( 0.016 ms): systemd-oomd/1151 openat(dfd: CWD, filename: "/sys/fs/cgroup/user.slice/user-1001.slice/user@1001.service/memory.pressure", flags: RDONLY|CLOEXEC) = 11 # # perf trace -e *nanosleep* --max-events=10 ? ( ): SCTP timer/28304 ... [continued]: clock_nanosleep()) = 0 0.007 (10.058 ms): SCTP timer/28304 clock_nanosleep(rqtp: { .tv_sec: 0, .tv_nsec: 10000000 }, rmtp: 0x7f0466b78de0) = 0 10.069 ( ): SCTP timer/28304 clock_nanosleep(rqtp: { .tv_sec: 0, .tv_nsec: 10000000 }, rmtp: 0x7f0466b78de0) ... 10.069 (10.056 ms): SCTP timer/28304 ... [continued]: clock_nanosleep()) = 0 17.059 ( ): podman/3572 nanosleep(rqtp: 0x7fc4f4d75be0) ... 17.059 (10.061 ms): podman/3572 ... [continued]: nanosleep()) = 0 20.131 (10.059 ms): SCTP timer/28304 clock_nanosleep(rqtp: { .tv_sec: 0, .tv_nsec: 10000000 }, rmtp: 0x7f0466b78de0) = 0 30.195 (10.038 ms): SCTP timer/28304 clock_nanosleep(rqtp: { .tv_sec: 0, .tv_nsec: 10000000 }, rmtp: 0x7f0466b78de0) = 0 40.238 (10.057 ms): SCTP timer/28304 clock_nanosleep(rqtp: { .tv_sec: 0, .tv_nsec: 10000000 }, rmtp: 0x7f0466b78de0) = 0 50.301 ( ): SCTP timer/28304 clock_nanosleep(rqtp: { .tv_sec: 0, .tv_nsec: 10000000 }, rmtp: 0x7f0466b78de0) ... # # perf trace -e perf_event* -- perf stat -e instructions,cycles,cache-misses sleep 0.1 0.000 ( 0.011 ms): perf/51331 perf_event_open(attr_uptr: { type: 0 (PERF_TYPE_HARDWARE), size: 136, config: 0x1 (PERF_COUNT_HW_INSTRUCTIONS), sample_type: IDENTIFIER, read_format: TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING, disabled: 1, inherit: 1, enable_on_exec: 1, exclude_guest: 1 }, pid: 51332 (perf), cpu: -1, group_fd: -1, flags: FD_CLOEXEC) = 3 0.013 ( 0.003 ms): perf/51331 perf_event_open(attr_uptr: { type: 0 (PERF_TYPE_HARDWARE), size: 136, config: 0 (PERF_COUNT_HW_CPU_CYCLES), sample_type: IDENTIFIER, read_format: TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING, disabled: 1, inherit: 1, enable_on_exec: 1, exclude_guest: 1 }, pid: 51332 (perf), cpu: -1, group_fd: -1, flags: FD_CLOEXEC) = 4 0.017 ( 0.002 ms): perf/51331 perf_event_open(attr_uptr: { type: 0 (PERF_TYPE_HARDWARE), size: 136, config: 0x3 (PERF_COUNT_HW_CACHE_MISSES), sample_type: IDENTIFIER, read_format: TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING, disabled: 1, inherit: 1, enable_on_exec: 1, exclude_guest: 1 }, pid: 51332 (perf), cpu: -1, group_fd: -1, flags: FD_CLOEXEC) = 5 Performance counter stats for 'sleep 0.1': 1,495,051 instructions # 1.11 insn per cycle 1,347,641 cycles 35,424 cache-misses 0.100935279 seconds time elapsed 0.000924000 seconds user 0.000000000 seconds sys # # perf trace -e connect* ssh localhost 0.000 ( 0.012 ms): ssh/51346 connect(fd: 4, uservaddr: { .family: LOCAL, path: /var/lib/sss/pipes/nss }, addrlen: 110) = -1 ECONNREFUSED (Connection refused) 0.118 ( 0.004 ms): ssh/51346 connect(fd: 6, uservaddr: { .family: LOCAL, path: /var/lib/sss/pipes/nss }, addrlen: 110) = -1 ECONNREFUSED (Connection refused) 0.399 ( 0.007 ms): ssh/51346 connect(fd: 4, uservaddr: { .family: LOCAL, path: /var/lib/sss/pipes/nss }, addrlen: 110) = -1 ECONNREFUSED (Connection refused) 0.426 ( 0.003 ms): ssh/51346 connect(fd: 4, uservaddr: { .family: LOCAL, path: /var/lib/sss/pipes/nss }, addrlen: 110) = -1 ECONNREFUSED (Connection refused) 0.754 ( 0.009 ms): ssh/51346 connect(fd: 4, uservaddr: { .family: INET, port: 22, addr: 127.0.0.1 }, addrlen: 16) = 0 0.771 ( 0.010 ms): ssh/51346 connect(fd: 4, uservaddr: { .family: INET6, port: 22, addr: ::1 }, addrlen: 28) = 0 0.798 ( 0.053 ms): ssh/51346 connect(fd: 4, uservaddr: { .family: INET6, port: 22, addr: ::1 }, addrlen: 28) = 0 0.870 ( 0.004 ms): ssh/51346 connect(fd: 5, uservaddr: { .family: LOCAL, path: /var/lib/sss/pipes/nss }, addrlen: 110) = -1 ECONNREFUSED (Connection refused) 0.904 ( 0.003 ms): ssh/51346 connect(fd: 5, uservaddr: { .family: LOCAL, path: /var/lib/sss/pipes/nss }, addrlen: 110) = -1 ECONNREFUSED (Connection refused) 0.930 ( 0.003 ms): ssh/51346 connect(fd: 5, uservaddr: { .family: LOCAL, path: /var/lib/sss/pipes/nss }, addrlen: 110) = -1 ECONNREFUSED (Connection refused) 0.957 ( 0.003 ms): ssh/51346 connect(fd: 5, uservaddr: { .family: LOCAL, path: /var/lib/sss/pipes/nss }, addrlen: 110) = -1 ECONNREFUSED (Connection refused) 0.981 ( 0.003 ms): ssh/51346 connect(fd: 5, uservaddr: { .family: LOCAL, path: /var/lib/sss/pipes/nss }, addrlen: 110) = -1 ECONNREFUSED (Connection refused) 1.006 ( 0.004 ms): ssh/51346 connect(fd: 5, uservaddr: { .family: LOCAL, path: /var/lib/sss/pipes/nss }, addrlen: 110) = -1 ECONNREFUSED (Connection refused) 1.036 ( 0.005 ms): ssh/51346 connect(fd: 5, uservaddr: { .family: LOCAL, path: /var/lib/sss/pipes/nss }, addrlen: 110) = -1 ECONNREFUSED (Connection refused) 65.077 ( 0.022 ms): ssh/51346 connect(fd: 5, uservaddr: { .family: LOCAL, path: /var/run/.heim_org.h5l.kcm-socket }, addrlen: 110) = 0 66.608 ( 0.014 ms): ssh/51346 connect(fd: 5, uservaddr: { .family: LOCAL, path: /var/run/.heim_org.h5l.kcm-socket }, addrlen: 110) = 0 root@localhost's password: # # perf trace -e sendto* ping -c 2 localhost PING localhost(localhost (::1)) 56 data bytes 64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.024 ms 0.000 ( 0.011 ms): ping/51357 sendto(fd: 5, buff: 0x7ffcca35e620, len: 20, addr: { .family: NETLINK }, addr_len: 0xc) = 20 0.135 ( 0.026 ms): ping/51357 sendto(fd: 4, buff: 0x5601398f7b20, len: 64, addr: { .family: INET6, port: 58, addr: ::1 }, addr_len: 0x1c) = 64 1014.929 ( 0.050 ms): ping/51357 sendto(fd: 4, buff: 0x5601398f7b20, len: 64, flags: CONFIRM, addr: { .family: INET6, port: 58, addr: ::1 }, addr_len: 0x1c) = 64 64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.046 ms --- localhost ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1015ms rtt min/avg/max/mdev = 0.024/0.035/0.046/0.011 ms # Signed-off-by: Ian Rogers <irogers@google.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Andrii Nakryiko <andrii@kernel.org> Cc: Anshuman Khandual <anshuman.khandual@arm.com> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Cc: Brendan Gregg <brendan.d.gregg@gmail.com> Cc: Carsten Haitzler <carsten.haitzler@arm.com> Cc: Eduard Zingerman <eddyz87@gmail.com> Cc: Fangrui Song <maskray@google.com> Cc: He Kuang <hekuang@huawei.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@arm.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Madhavan Srinivasan <maddy@linux.ibm.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Nathan Chancellor <nathan@kernel.org> Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Cc: Nick Desaulniers <ndesaulniers@google.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@amd.com> Cc: Rob Herring <robh@kernel.org> Cc: Tiezhu Yang <yangtiezhu@loongson.cn> Cc: Tom Rix <trix@redhat.com> Cc: Wang Nan <wangnan0@huawei.com> Cc: Wang ShaoBo <bobo.shaobowang@huawei.com> Cc: Yang Jihong <yangjihong1@huawei.com> Cc: Yonghong Song <yhs@fb.com> Cc: YueHaibing <yuehaibing@huawei.com> Cc: bpf@vger.kernel.org Cc: llvm@lists.linux.dev Link: https://lore.kernel.org/r/20230810184853.2860737-3-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
||
---|---|---|
.. | ||
arm-spe-decoder | ||
bpf_skel | ||
cs-etm-decoder | ||
hisi-ptt-decoder | ||
include | ||
intel-pt-decoder | ||
libunwind | ||
scripting-engines | ||
addr_location.c | ||
addr_location.h | ||
affinity.c | ||
affinity.h | ||
amd-sample-raw.c | ||
annotate.c | ||
annotate.h | ||
archinsn.h | ||
arm64-frame-pointer-unwind-support.c | ||
arm64-frame-pointer-unwind-support.h | ||
arm-spe.c | ||
arm-spe.h | ||
auxtrace.c | ||
auxtrace.h | ||
block-info.c | ||
block-info.h | ||
block-range.c | ||
block-range.h | ||
bpf_counter_cgroup.c | ||
bpf_counter.c | ||
bpf_counter.h | ||
bpf_ftrace.c | ||
bpf_kwork.c | ||
bpf_lock_contention.c | ||
bpf_map.c | ||
bpf_map.h | ||
bpf_off_cpu.c | ||
bpf-event.c | ||
bpf-event.h | ||
bpf-filter.c | ||
bpf-filter.h | ||
bpf-filter.l | ||
bpf-filter.y | ||
bpf-prologue.c | ||
bpf-prologue.h | ||
bpf-utils.c | ||
bpf-utils.h | ||
branch.c | ||
branch.h | ||
Build | ||
build-id.c | ||
build-id.h | ||
cache.h | ||
cacheline.c | ||
cacheline.h | ||
call-path.c | ||
call-path.h | ||
callchain.c | ||
callchain.h | ||
cap.c | ||
cap.h | ||
cgroup.c | ||
cgroup.h | ||
clockid.c | ||
clockid.h | ||
cloexec.c | ||
cloexec.h | ||
color_config.c | ||
color.c | ||
color.h | ||
comm.c | ||
comm.h | ||
compress.h | ||
config.c | ||
config.h | ||
copyfile.c | ||
copyfile.h | ||
counts.c | ||
counts.h | ||
cpu-set-sched.h | ||
cpumap.c | ||
cpumap.h | ||
cputopo.c | ||
cputopo.h | ||
cs-etm-base.c | ||
cs-etm.c | ||
cs-etm.h | ||
data-convert-bt.c | ||
data-convert-json.c | ||
data-convert.h | ||
data.c | ||
data.h | ||
db-export.c | ||
db-export.h | ||
debug.c | ||
debug.h | ||
demangle-cxx.cpp | ||
demangle-cxx.h | ||
demangle-java.c | ||
demangle-java.h | ||
demangle-ocaml.c | ||
demangle-ocaml.h | ||
demangle-rust.c | ||
demangle-rust.h | ||
dlfilter.c | ||
dlfilter.h | ||
dso.c | ||
dso.h | ||
dsos.c | ||
dsos.h | ||
dump-insn.c | ||
dump-insn.h | ||
dwarf-aux.c | ||
dwarf-aux.h | ||
dwarf-regs.c | ||
env.c | ||
env.h | ||
event.c | ||
event.h | ||
events_stats.h | ||
evlist.c | ||
evlist.h | ||
evsel_config.h | ||
evsel_fprintf.c | ||
evsel_fprintf.h | ||
evsel.c | ||
evsel.h | ||
evswitch.c | ||
evswitch.h | ||
expr.c | ||
expr.h | ||
expr.l | ||
expr.y | ||
find-map.c | ||
fncache.c | ||
fncache.h | ||
ftrace.h | ||
genelf_debug.c | ||
genelf.c | ||
genelf.h | ||
generate-cmdlist.sh | ||
get_current_dir_name.c | ||
get_current_dir_name.h | ||
hashmap.c | ||
hashmap.h | ||
header.c | ||
header.h | ||
help-unknown-cmd.c | ||
help-unknown-cmd.h | ||
hisi-ptt.c | ||
hisi-ptt.h | ||
hist.c | ||
hist.h | ||
intel-bts.c | ||
intel-bts.h | ||
intel-pt.c | ||
intel-pt.h | ||
intlist.c | ||
intlist.h | ||
iostat.c | ||
iostat.h | ||
jit.h | ||
jitdump.c | ||
jitdump.h | ||
kvm-stat.h | ||
kwork.h | ||
levenshtein.c | ||
levenshtein.h | ||
lock-contention.h | ||
lzma.c | ||
machine.c | ||
machine.h | ||
map_symbol.h | ||
map.c | ||
map.h | ||
maps.c | ||
maps.h | ||
mem2node.c | ||
mem2node.h | ||
mem-events.c | ||
mem-events.h | ||
memswap.c | ||
memswap.h | ||
metricgroup.c | ||
metricgroup.h | ||
mmap.c | ||
mmap.h | ||
mutex.c | ||
mutex.h | ||
namespaces.c | ||
namespaces.h | ||
off_cpu.h | ||
ordered-events.c | ||
ordered-events.h | ||
parse-branch-options.c | ||
parse-branch-options.h | ||
parse-events.c | ||
parse-events.h | ||
parse-events.l | ||
parse-events.y | ||
parse-regs-options.c | ||
parse-regs-options.h | ||
parse-sublevel-options.c | ||
parse-sublevel-options.h | ||
path.c | ||
path.h | ||
perf_api_probe.c | ||
perf_api_probe.h | ||
perf_event_attr_fprintf.c | ||
perf_regs.c | ||
perf_regs.h | ||
perf-hooks-list.h | ||
perf-hooks.c | ||
perf-hooks.h | ||
PERF-VERSION-GEN | ||
pfm.c | ||
pfm.h | ||
pmu.c | ||
pmu.h | ||
pmu.l | ||
pmu.y | ||
pmus.c | ||
pmus.h | ||
print_binary.c | ||
print_binary.h | ||
print-events.c | ||
print-events.h | ||
probe-event.c | ||
probe-event.h | ||
probe-file.c | ||
probe-file.h | ||
probe-finder.c | ||
probe-finder.h | ||
pstack.c | ||
pstack.h | ||
python-ext-sources | ||
python.c | ||
rb_resort.h | ||
rblist.c | ||
rblist.h | ||
record.c | ||
record.h | ||
rlimit.c | ||
rlimit.h | ||
rwsem.c | ||
rwsem.h | ||
s390-cpumcf-kernel.h | ||
s390-cpumsf-kernel.h | ||
s390-cpumsf.c | ||
s390-cpumsf.h | ||
s390-sample-raw.c | ||
sample-raw.c | ||
sample-raw.h | ||
sample.h | ||
session.c | ||
session.h | ||
setns.c | ||
setup.py | ||
sharded_mutex.c | ||
sharded_mutex.h | ||
sideband_evlist.c | ||
smt.c | ||
smt.h | ||
sort.c | ||
sort.h | ||
spark.c | ||
spark.h | ||
srccode.c | ||
srccode.h | ||
srcline.c | ||
srcline.h | ||
stat-display.c | ||
stat-shadow.c | ||
stat.c | ||
stat.h | ||
strbuf.c | ||
strbuf.h | ||
stream.c | ||
stream.h | ||
strfilter.c | ||
strfilter.h | ||
string2.h | ||
string.c | ||
strlist.c | ||
strlist.h | ||
svghelper.c | ||
svghelper.h | ||
symbol_conf.h | ||
symbol_fprintf.c | ||
symbol-elf.c | ||
symbol-minimal.c | ||
symbol.c | ||
symbol.h | ||
symsrc.h | ||
synthetic-events.c | ||
synthetic-events.h | ||
syscalltbl.c | ||
syscalltbl.h | ||
target.c | ||
target.h | ||
term.c | ||
term.h | ||
thread_map.c | ||
thread_map.h | ||
thread-stack.c | ||
thread-stack.h | ||
thread.c | ||
thread.h | ||
time-utils.c | ||
time-utils.h | ||
tool.h | ||
top.c | ||
top.h | ||
topdown.c | ||
topdown.h | ||
trace-event-info.c | ||
trace-event-parse.c | ||
trace-event-read.c | ||
trace-event-scripting.c | ||
trace-event.c | ||
trace-event.h | ||
tracepoint.c | ||
tracepoint.h | ||
trigger.h | ||
tsc.c | ||
tsc.h | ||
units.c | ||
units.h | ||
unwind-libdw.c | ||
unwind-libdw.h | ||
unwind-libunwind-local.c | ||
unwind-libunwind.c | ||
unwind.h | ||
usage.c | ||
util.c | ||
util.h | ||
values.c | ||
values.h | ||
vdso.c | ||
vdso.h | ||
zlib.c | ||
zstd.c |