eBPF trampoline(trampoline:蹦床,翻译后并不好理解,所以不作翻译)是内核函数和 eBPF 程序之间的桥梁,基于 register_ftrace_direct()
实现。它实现了 kprobe/kretprobe
的功能。相比于 kprobe/kretprobe
,trampoline 的性能更好。特别是对比 kretprobe
,trampoline 的 fexit
在实现了同样功能的同时,能够支持去获取目标函数的参数(这是 kretprobe
不支持的)(参考:bpf: Introduce BPF trampoline)。
不过并不是所有内核版本都支持 trampoline,eBPF trampoline 特性要求 >= 5.5 内核版本,参考 BPF Features by Linux Kernel Version。
eBPF trampoline 一例
Go 的 eBPF 库 cilium/ebpf 已支持 trampoline(fenter/fexi