Curveballs: Learnings from Instrumenting Managed Runtime...
summary
A production agent called Grafana BAA uses eBPF to attach uprobe/uretprobe pairs and store per-call state in BPF maps, and it successfully auto-instruments native Go services by using the goroutine pointer as the map key and by locating return instructions to avoid relocated small stacks. Java proves harder: Hot methods get JIT-compiled, recompiled and inlined, garbage collectors move heap objects, and the solution requires watching registerNMethod, using jcmd to enumerate compiled code, and accepting some runtimes (interpreters, trace compilers) as effectively uninstrumentable.
AI-written summary · about
chapters (9)
- 0:00Managed runtime instrumentation
- 1:05Auto-instrumentation with eBPF and Grafana BaaS
- 6:58Instrumenting unmanaged runtimes
- 10:49Go runtime pitfalls
- 16:40Java runtime complexities
- 22:30Instrumenting compiled Java methods
- 25:24Limitations with interpreted runtimes
- 27:09Current support and future plans
- 28:09Summary
related talks
30mDynamically Instrumenting Go Programs
39mAuto-Instrumenting Go Libraries for Tracing with eBPF and OpenTelemetry
20mStrategies for Auto-Instrumenting Go Applications Without Code Changes
33mInstrument Go Without Changing a Single Line
31mAdvancing Observability With Compile-Time Auto-Instrumentation in Golang
22mDynamic Go Instrumentation for Production Environments
24mDebuggers and eBPF: Bringing Debugging to Production
46mReal World Debugging with eBPF
