主页

索引

模块索引

搜索页面

eBPF

eBPF (Extended Berkeley Packet Filter) 的核心是驻留在 kernel 的高效虚拟机。最初的目的是高效网络过滤框架,前身是 BPF,所以我们先了解下 BPF。

https://img.zhaoweiguo.com/knowledge/images/linuxs/linux_core_eBPF1.png

以上是 freebsd 的 BPF,Linux 中应该不叫这个,叫 LSF

eBPF 初识

Linux kernel 3.18 版本开始包含了 eBPF,相对于 BPF 做了一些重要改进,首先是效率,这要归功于 JIB 编译 eBPF 代码;其次是应用范围,从网络报文扩展到一般事件处理;最后不再使用 socket,使用 map 进行高效的数据存储。

目前 eBPF 可以分解为三个过程:

1. 以字节码的形式创建 eBPF 的程序。
   编写 C 代码,将 LLVM 编译成驻留在 ELF 文件中的 eBPF 字节码
2. 将程序加载到内核中,并创建必要的 eBPF-maps。
   eBPF 具有用作:
   socket filter,kprobe 处理器,流量控制调度,流量控制操作,
   tracepoint 处理,eXpress Data Path (XDP),性能监测,
   cgroup 限制,轻量级 tunnel 的程序类型。
3. 将加载的程序 attach 到系统中。
   根据不同的程序类型 attach 到不同的内核系统中。
   程序运行的时候,启动状态并且开始过滤,分析或者捕获信息。

进阶阅读

主页

索引

模块索引

搜索页面