eBPF(extened Berkeley Packet Filter)是一种内核技术,它允许开发人员在不修改内核代码的情况下运行特定的功能。eBPF 的概念源自于 Berkeley Packet Filter(BPF),后者是由贝尔实验室开发的一种网络过滤器,可以捕获和过滤网络数据包。2014 年eBPF 随 Linux 3.18 首次限量发布,充分利用 eBPF 至少需要 Linux 4.4 以上版本。
在 eBPF 之前,内核模块是注入内核的最主要机制。由于缺乏对内核模块的安全控制,内核的基本功能很容易被一个有缺陷的内核模块破坏。而 eBPF 则借助即时编译器(JIT),在内核中运行了一个虚拟机,保证只有被验证安全的 eBPF 指令才会被内核执行。同时,因为 eBPF 指令依然运行在内核中,无需向用户态复制数据,这就大大提高了事件处理的效率。
eBPF 是一种非常灵活和强大的内核技术,可以用于多种应用场景。下面是 eBPF 的一些常见用途:
总之,eBPF 的常见用途非常广泛,可以用于网络监控、安全过滤、性能分析和虚拟化等多种应用场景。
下面是一些最常见的 eBPF 限制:
这里摘抄一份评论作为参考
”曾基于 BPF 做过一个容器平台的链路追踪系统,分解出单个请求在服务端经过的节点、网络设备、耗时等信息,便于快速定位网络抖动时主要延迟的具体发生点。 遇到最多的是内核版本差异引起的各类编译问题,要么跑不起来,要么运行结果不符合预期。尤其 4.9 内核问题很多,5.x 版本的内核自己在测试环境用一用还行,线上的内核版本相对会保守,几年前 3.10 的占比很高。不过好消息是,新机器的内核一般都直接使用 4.x,甚至 5.x。BPF 落地生产环境的环境阻力小了很多。 如果公司的环境暂时还不能应用 BPF 技术,不妨碍先进行知识储备,自己先玩起来,等到真正被需要的时候就可以发挥作用了。“