1. eBPF是什么?

Untitled

https://baijiahao.baidu.com/s?id=1764307150045526619&wfr=spider&for=pc

1.1 BPF and tcpdump

BPF (Berkeley Packet Filter) 是1992年左右就有的技术,最初用在unix上,用于网络包过滤。

BPF的实现原理是把包过滤命令翻译成字节码(bytecode),在kernel中转译并执行这些字节码。通过在Kernel各处加入钩子函数,实现网络数据包的捕获的过滤,例如tcpdump就是基于bpf实现的。

                                       **classic** **BPF Overview** [<http://www.tcpdump.org/papers/bpf-usenix93.pdf>](<http://www.tcpdump.org/papers/bpf-usenix93.pdf>)

1.2 BPF整体结构

1.2 eBPF

2011年左右, Plumgrid公司的Alexei Starovoitov 等人觉得经典BPF(也叫cBPF)有些过时,比如其字节码指令只使用2个32位寄存器,功能和效率都受限,开始对BPF做出大幅修改,新版命名为extended BPF,并且使其可以用于网络(Networking)以外的领域,比如跟踪(Tracing)和安全等,使得BPF向通用化技术演进。eBPF对经典BPF(cBPF)做了兼容,所以现在说的BPF通指eBPF。

eBPF对cBPF做了如下优化: