-10 +

ebpf 今日头条 2

今日头条系列 2, 这些特性是在 2020 12 月份的。

The Kernel Side

号外:

这个月 kernel 5.11 版本添加的新特性:

也有一些第三方提交的 features:

Did You Know?: CO-RE

CO-RE (一次编译,随处运行)是 tracing eBPF 程序保证可移植性的一种机制。 一个结构体中的属性在不同版本中,属性的相对地址可能是不同的。 tracing 程序可能会使用结构体中的相对地址获取属性的值,但是如果随后的内核版本中修改了结构体的大小, 或者调整了属性的顺序,这时这个 eBPF 程序将是不兼容的。

CO-RE 依赖 BTF 对象 (BPF Type Format) 来解决上述问题。 一个 BTF 对象包含程序的调试信息,实际上 BTF 是 DWARF 格式的简化版本,这个通常用于 GDB 调试。 BTF 对象被 kernel 加载后,一般会由 eBPF 字节码来存储这些信息,例如:程序被编译后 dump C 指令。 BTF 也可以描述用来描述其他对象,例如 kernel 自身。 这种情况下,在 eBTF 程序加载之前,就可以通过 kernel 自身的结构提前相关信息。 这样可以在 eBPF 程序发送到 kernel 之前通过 ELF relocation 这个步骤来调整程序。

通过 libbpf 是使用 CO-RE 最简单的途径。 注意,由于这个需要 kernel 的 BTF 信息,所以 CO-RE 只有在 kernel 编译开启 CONFIG_DEBUG_INFO_BTF 选项时才能生效。 当然最新的 LLVM, libbpf 工具也是必要的。

个人理解

个人对于上述特性的一个理解是:

  1. eBPF 开始在安全领域发力,因为有 LSM 模块相关的改进
  2. eBPF 开始大规模利用了,CO-RE 作为重要的工具开始在 kernel 支持。

关于我

85 后程序员, 比较熟悉 Java,JVM,Golang 相关技术栈, 关注 Liunx kernel,目前痴迷于分布式系统的设计和实践。 研究包括但不限于 Docker Kubernetes eBPF 等相关技术。

Blog

Code

Life

Archive