Support full OTel profiler malloc/free uprobes - #586
Conversation
|
Independent AI review (Claude CLI) after e5498f1: previous blocker in |
|
CI monitor update for e5498f1: all non-GPU checks have completed without failures (140 success; deploy skipped; CodeQL neutral). The only checks still not complete are the two GPU/self-hosted jobs, |
|
Independent Claude review for 3833ace ( Checked scope:
|
|
Independent Claude review for a45fec3 ( Reviewed scope:
Non-blocking note from review: the benchmark validates victim profile export, not specific resolved malloc/free frame symbols, which is intentional because symbol resolution can vary across hosts. |
|
CI triage update (2026-07-16): the current blockers are |
|
CI triage update:
Action needed: restore or free the GPU self-hosted runner, then rerun the GPU/PTX workflows. No code change pushed to this PR. |
Summary
bpf_cookiemetadata for daemon-created cilium/ebpf perf-event uprobe links.PROG_ARRAY,LRU_HASH,LPM_TRIE) and ignore kernel-owned perf sampling fds when the daemon is only mirroring bpftime-supported uprobes.example/otel-ebpf-profileron the complete upstreamopentelemetry-ebpf-profilermalloc/free workflow. The local minimal BPF counter/loader was removed.LD_PRELOAD=libbpftime-syscall-server.socannot intercept it; exported profiles come from the native kernel OTel pipeline while bpftime mirrors handlers into the agent-preloaded target.Validation
bash -n example/otel-ebpf-profiler/scripts/common.sh example/otel-ebpf-profiler/scripts/run-full-otel-profiler.sh example/otel-ebpf-profiler/scripts/build-upstream-otel.sh example/otel-ebpf-profiler/scripts/benchmark.shcmake --build build --target bpftime-agent bpftime_daemon bpftime-syscall-server -j$(nproc)make -C example/otel-ebpf-profiler clean allOTEL_EBPF_PROFILER_DIR=/tmp/opentelemetry-ebpf-profiler RUN_SECONDS=5 OTEL_COLLECTOR_STARTUP_DELAY=5 OTEL_FLUSH_DELAY=6 example/otel-ebpf-profiler/scripts/run-full-otel-profiler.shOTEL_EBPF_PROFILER_DIR=/tmp/opentelemetry-ebpf-profiler RUN_SECONDS=6 REPEATS=1 OTEL_COLLECTOR_STARTUP_DELAY=5 OTEL_FLUSH_DELAY=6 example/otel-ebpf-profiler/scripts/benchmark.shOTEL_EBPF_PROFILER_DIR=/tmp/opentelemetry-ebpf-profiler RUN_SECONDS=10 REPEATS=3 OTEL_COLLECTOR_STARTUP_DELAY=5 OTEL_FLUSH_DELAY=6 example/otel-ebpf-profiler/scripts/benchmark.shvictimprofile datagit diff --checkPerformance note
The benchmark now measures only the complete upstream OTel profiler stack-collection path. It does not use a local BPF counter or minimal cilium loader.
On this host, native-kernel OTel profiling of malloc/free uprobes is very expensive for the tight malloc/free loop: about 295K iterations/s versus 160M iterations/s baseline. In daemon mirror mode, the victim with
libbpftime-agent.someasured about 155M iterations/s while the upstream collector still exportedvictimprofiles. This result should be interpreted as daemon-mirror compatibility behavior for the current static Go OTel collector, not as proof that upstream OTel's collector consumes bpftime userspace ringbuf output.Review
e5498f1and re-reviewed; the reviewer reported no remaining blocking issues.