
eBPF
文章平均质量分 94
R-Linux
这个作者很懒,什么都没留下…
展开
-
ebpf: CO-RE, BTF, and Libbpf(三)
CO-RE 可以使 eBPF 程序可以在一个机器上编译, 而且另外一个 (拥有不同内核版本的) 机器上运行. 这极大的提升了 eBPF 程序的可移植性.编译器在编译时保存完整的程序和结构体相关信息, 并在将程序加载到内核中时, 使用保存的重定位信息来重写指令, 以确保在不同内核版本也能成功访问到相关的结构体成员 (即使成员位置, 名字发生变化, 甚至被删除).原创 2025-04-20 18:00:53 · 971 阅读 · 0 评论 -
ebpf: CO-RE, BTF, and Libbpf(二)
上篇文章主要讲了CO-RE最关键的一环:BTF,了解其如何记录内核中的数据结构和函数信息。本文将介绍如何编写一个插入到内核中的 eBPF 程序。示例代码使用 C 语言,编译器是 clang, 另外还需要 libbpf 库(提供一些 ebpf 程序常用的宏和函数定义)。这一部分主要是定义我们需要用到的结构体,其中有两个map,第一个是 arrary 类型的output, 另外一个是 hash 类型的my_config。原创 2025-04-14 22:27:46 · 1129 阅读 · 0 评论 -
ebpf: CO-RE, BTF, and Libbpf(一)
一个ebpf程序可以在一个kernel版本中编译,而在另外一个kernel版本上运行,即便两个kernel版本中有些结构体有变化。而BTF(BPF Type Format) 是能让ebpf有这种强大兼容性的关键一环,使其能够实现CO-RE(complie once, run everywhere)。CO-RE允许ebpf程序包含有关它们编译时使用的数据结构的布局,并提供了一种机制,用于调整当在不同机器上运行时,如果数据结构布局不一样,应当如何访问对应的字段。原创 2025-04-07 21:49:55 · 972 阅读 · 0 评论