Bouncing on trampolines to run eBPF programs
9 months ago
- #performance
- #kernel
- #eBPF
- eBPF trampoline是一种内部机制,用于优化eBPF程序的执行开销。
- eBPF追踪程序类型包括kprobe、tracepoint、raw tracepoint、perf event以及纯追踪程序。
- 纯追踪程序可挂载到fentry/fexit函数入口/出口、修改返回值以及迭代器程序。
- 示例展示了通过附加到openat2系统调用的eBPF程序来监控文件打开尝试。
- 传统kprobe机制通过修补指令产生异常实现,会带来性能开销。
- eBPF trampoline通过直接调用eBPF程序避免异常,充当ABI桥梁角色。
- 该蹦床机制动态生成代码来处理函数参数和调用约定。
- 高级用法:可同时处理fentry(入口)和fexit(出口)程序进行全链路插桩。
- ARM64架构对eBPF trampoline的支持已增强,包括多kprobe挂载和8+参数处理能力。
- 由eBPF基金会资助的改进已合并至Linux内核6.16.0版本。