On 31/01/2024 16:20, Alan Maguire wrote: > Adding userspace tracepoints in other languages like python and > go is a very useful for observability. libstapsdt [1] > and language bindings like python-stapsdt [2] that rely on it > use a clever scheme of emulating static (USDT) userspace tracepoints > at runtime. This involves (as I understand it): > > - fabricating a shared library > - annotating it with ELF notes that describe its tracepoints > - dlopen()ing it and calling the appropriate probe fire function > to trigger probe firing. > > bcc already supports this mechanism (the examples in [2] use > bcc to list/trigger the tracepoints), so it seems like it > would be a good candidate for adding support to libbpf. > > However, before doing that, it's worth considering if there > are simpler ways to support runtime probe firing. This > small series demonstrates a simple method based on USDT > probes added to libbpf itself. > [snip] > The useful thing about this is that by attaching to > libbpf.so (and firing probes using that library) we > can get system-wide dynamic probe firing. It is also > easy to fire a dynamic probe - no setup is required. > > More examples of auto and manual attach can be found in > the selftests (patch 2). > > If this approach appears to be worth pursing, we could > also look at adding support to libstapsdt for it. > Proof-of-concept libstapsdt support has been built and tested; consumers of libstapsdt continue to work the same way but with URDT support, we can trace dynamic events system-wide. See https://github.com/linux-usdt/libstapsdt/compare/main...alan-maguire:libstapsdt:urdt > Alan Maguire (2): > libbpf: add support for Userspace Runtime Dynamic Tracing (URDT) > selftests/bpf: add tests for Userspace Runtime Defined Tracepoints > (URDT) > > tools/lib/bpf/Build | 2 +- > tools/lib/bpf/Makefile | 2 +- > tools/lib/bpf/libbpf.c | 94 ++++++++++ > tools/lib/bpf/libbpf.h | 94 ++++++++++ > tools/lib/bpf/libbpf.map | 13 ++ > tools/lib/bpf/libbpf_internal.h | 2 + > tools/lib/bpf/urdt.bpf.h | 103 +++++++++++ > tools/lib/bpf/urdt.c | 145 +++++++++++++++ > tools/testing/selftests/bpf/Makefile | 2 +- > tools/testing/selftests/bpf/prog_tests/urdt.c | 173 ++++++++++++++++++ > tools/testing/selftests/bpf/progs/test_urdt.c | 100 ++++++++++ > .../selftests/bpf/progs/test_urdt_shared.c | 59 ++++++ > 12 files changed, 786 insertions(+), 3 deletions(-) > create mode 100644 tools/lib/bpf/urdt.bpf.h > create mode 100644 tools/lib/bpf/urdt.c > create mode 100644 tools/testing/selftests/bpf/prog_tests/urdt.c > create mode 100644 tools/testing/selftests/bpf/progs/test_urdt.c > create mode 100644 tools/testing/selftests/bpf/progs/test_urdt_shared.c >