eBPF 可挂载到系统调用以及内核函数的入口与返回点,用于观测进程行为、函数调用关系等。通过 kprobe 能动态跟踪内核中的导出函数,通过 uprobe 则能跟踪用户态程序中的函数,二者都具备较强的灵活性。
tracepoint 是内核开发者预先埋设的静态跟踪点,提供稳定的 ABI 接口,适合长期、可靠的观测。相比 kprobe 依赖函数符号(可能随内核版本变化而失效),tracepoint 的接口更为稳定,但数量和覆盖场景受限于内核内置的埋点。
在网络领域,eBPF 可挂载到 XDP(eXpress Data Path)、TC(Traffic Control)、socket 过滤器等位置,在网络包到达内核的不同阶段进行处理。XDP 位于网络驱动层尽可能早的位置,TC 则处于更高层次、可访问更多数据包元数据。
eBPF 还能与内核性能事件子系统结合,使用 perf_event 进行定时采样、硬件性能计数器(PMC)采集以及调用栈收集,用于性能分析与统计剖析。