Hasty Briefsbeta

Bilingual

Tracing goroutines in realtime with eBPF

8 hours ago
  • #eBPF
  • #Go Runtime
  • #Goroutine Tracing
  • eBPF can be used to trace Go runtime functions in real-time, enabling observation of goroutine state changes and memory allocations.
  • xgotop is a Go runtime tracing tool developed as a side project, utilizing eBPF to monitor goroutine lifecycle events and memory operations.
  • The Go runtime stores goroutine information in a struct named `g`, which includes fields like `goid`, `parentGoid`, and `atomicstatus` for state tracking.
  • Key functions for tracing include `casgstatus` for state transitions and `newobject`, `makeslice`, and `makemap` for memory allocations.
  • bpftrace simplifies eBPF program prototyping by allowing struct definitions and register access to decode Go runtime data structures.
  • A proof-of-concept bpftrace script hooks into runtime functions to log goroutine IDs, states, and memory allocation details in real-time.
  • The traced output shows goroutine creation, state changes, and memory allocations, such as buffers for HTTP requests, in a Go HTTP server example.