搭建 ebpf 开发测试环境
0 内容说明
这部分主要讲述了如何通过官网学习ebpf,以及如何搭建自己的ebpf开发测试环境,主要是需要安装哪些工具链。
1 ebpf在线学习
ebpf官网中提供了一个快速在线学习ebpf的路径,在这个学习平台中一共有两项学习内容,一个是学习观察ebpf的内部组件,一个是学习编写ebpf,每个大概学习30分钟,是快速学习ebpf非常好的途径。
ebpf Lab实验室地址: eBPF - Introduction, Tutorials & Community Resources
1.1 第一个学习工具
这部分教学摘取了 opensnoop 示例,教你如何处理 eBPF 工具,观察它加载其组件,甚至将你自己的跟踪添加到源 eBPF 代码中。一共有五个步骤,进入学习后,可以安装它的提示步骤进行操作,在操作过程中可以了解部分ebpf 工具的用法。
1.2 第二个学习工具
这部分在说如何编写第一个 eBPF Hello World 程序,并深入了解 eBPF 的所有关键概念和工具,例如 eBPF 映射、字节码、bpftool、xdp 和 eBPF 验证器。
2 搭建Ebpf开发环境
如果想要更好的使用ebpf,内核版本建议>=4.9,尽管较低的内核版本(3.15以后)也支持ebpf,但是编译和运行起来会有问题,所以建议使用高版本的内核,我使用的是ubuntu22.04,内核版本为6.2。
2.1 libbpf
libbpf是开发ebpf的核心部分,一般需要将其作为子模块(库)使用,在很多开源项目中都存在libbpf的文件,但是里面并不存在源码需要自行下载编译。
$ git submodule update --init
$ git submodule add https://github.com/libbpf/libbpf/ libbpf
2.2 安装依赖-Debian/Ubuntu
主要的依赖有 libbpf, llvm, clang, libxdp和 libelf;
LLVM+clang主要是将按照 ebpf 规范编写的 .c 文件(一般命名为*.bpf.c)编译为BPF 字节码,这些字节码会存储在一个 ELF 目标文件中(libelf),elf文件一般会命名为*.bpf.o,然后通过 libbpf 通过 bpf()函数的系统调用加载到内核中。libxdp 里有管理xdp的函数。
$ sudo apt install clang llvm libelf-dev libpcap-dev build-essential
$ sudo apt install linux-perf
$ sudo apt install linux-tools-$(uname -r)
2.3 内核头文件依赖关系
$ sudo apt install linux-headers-$(uname -r)
2.4 bpftool工具
$ sudo apt install linux-tools-common linux-tools-generic
参考:
ebpf Lab
Setup dependencies