我是eBPF的新手,有很多教程说eBPF只是扩展的BPF,但我不明白extended是什么意思?那么,BPF和eBPF之间有什么区别呢?这些示例是否驻留在Linux源文件[root]/samples/bpf eBPF示例中,还是仅仅驻留在BPF中?
发布于 2022-05-19 07:50:20
BPF有时用于指eBPF (已创建的2014年),有时用于指cBPF (其前身从1991年起)。正如Qeole所指出的,您可以在内核文档中找到一个两者的详细比较。
cBPF (经典BPF)是一个小型字节码,具有两个32位寄存器,用于对数据包和系统进行基本过滤。在对cBPF程序的两个调用之间不能持久化状态。
cBPF仍然被例如seccomp和tcpdump使用,但实际上在最近的内核中被翻译成eBPF字节码。
eBPF (extended )是一种新的具有重要扩展的字节码。字节码有一种更“现代”的形式,有10个64位寄存器、跳转和一个堆栈空间,从而可以更容易地将JIT编译到本机指令集。它可以调用名为helpers的特殊函数来与内核交互。它可以使用这些助手将状态保存到映射中。它附带了一个新的syscall,bpf(2),用于操纵BPF对象(例如,映射、程序等)。eBPF生态系统的一个很好的介绍可以在ebpf.io上找到。
eBPF程序可以用C编写,并使用LLVM/Clang编译到字节码中。内核源代码中的示例是eBPF程序。
https://stackoverflow.com/questions/72299646
复制相似问题