Skip to content

eBPF 学习资料

资料描述
BPF and XDP Reference GuideCilium 官方编写的 eBPF 参考指南
eBPF DocseBPF 社区的公共知识库,包含各种 eBPF 映射、 eBPF 程序类型以及 eBPF 帮助函数的详细说明
eBPF & Cilium Communityebpf.io 的 YouTube 频道,包含 eCHO Episode 和 eBPF summit 的视频
eBPF 开发实践教程包含 40+ eBPF 教程以及配套代码
eBPF核心技术与实战极客时间 eBPF 教程
BuildingJohannes Bechberger 的博客主要介绍使用 Java 来编写 eBPF 程序
BPF 进阶笔记包含 eBPF 类型讲解、eBPF 映射类型、调试 eBPF 程序等内容

CORE(Compile Once – Run Everywhere)

由于 vmlinux.h 文件是由当前运行内核生成的,如果你试图将编译好的 eBPF 程序在另一台运行不同内核版本的机器上运行,可能会面临崩溃的窘境。这主要是因为在不同的版本中,对应数据类型的定义可能会在 Linux 源代码中发生变化。

但是,通过使用 libbpf 库提供的功能可以实现 “CO:RE”(一次编译,到处运行)。libbpf 库定义了部分宏(比如 BPF_CORE_READ),其可分析 eBPF 程序试图访问 vmlinux.h 中定义的类型中的哪些字段。如果访问的字段在当前内核定义的结构中发生了移动,宏 / 辅助函数会协助自动找到对应字段【译者注:对于可能消失的字段,也提供了对应的辅助函数 bpf_core_field_exists】。因此,我们可以使用当前内核中生成的 vmlinux.h 头文件来编译 eBPF 程序,然后在不同的内核上运行它【译者注:需要运行的内核也支持 BTF 内核编译选项】。

https://www.ebpf.top/post/intro_vmlinux_h/

参考资料