01-ebpf环境搭建
eBPF 工具对比
| 维度 | libbpf | bpftrace | BCC |
|---|---|---|---|
| 定位 | 底层 C 库,eBPF 程序开发框架 | 高级脚本语言,动态追踪工具 | Python/C++ 高级框架 |
| 开发语言 | C / C++ | bpftrace 专属脚本语法(类 awk) | Python + C(内嵌) |
| 上手难度 | 高,需要手写 BPF 程序 | 低,一行命令即可追踪 | 中,Python 封装但配置复杂 |
| 性能开销 | 最低,接近原生 | 较低 | 较高,Python 运行时有额外开销 |
| 编译方式 | 提前编译(AOT),支持 CO-RE | 运行时编译(JIT) | 运行时编译,依赖 LLVM/Clang |
| 内核版本要求 | 较低,CO-RE 支持老内核 | 较高(推荐 4.9+) | 较高,且强依赖内核头文件 |
| 环境部署 | 简单,静态链接友好 | 中等,需要安装 bpftrace 二进制 | 复杂,依赖链长(LLVM、内核头文件等) |
| 适用场景 | 生产环境、嵌入式、性能敏感场景 | 快速调试、临时追踪、一次性分析 | 开发调试、功能丰富的追踪工具开发 |
| 可移植性 | 最强,BTF + CO-RE 跨内核版本 | 一般 | 差,强依赖本机内核头文件 |
| 社区生态 | 活跃,Linux 内核官方推荐 | 活跃,Brendan Gregg 主导 | 早期主流,逐渐被 libbpf 取代 |
- 简单来说 libbpf 就是对于 bpf 的一个封装,我们可以用它来加载 bpf 程序,然后放到内核中去执行
- bcc,又是对 libbpf 的封装,它主要采用的是 python 这个语言,简化程序的一个开发
- bpftrace,他是相当于 bpftrace 这个语言,来实现对于一个 bpf 程序的加载
贴一下这三个工具的地址吧,或许后面还会分析源码的时候会用到
- libbpf: github.com/libbpf/libbpf
- BCC: github.com/iovisor/bcc
- bpftrace: github.com/bpftrace/bpftrace
基本环境配置要求
- 操作系统:WSL2 安装 Ubuntu 版本即可
libbpf 环境配置&编译
同时第一次安装的 wsl 可能会缺少C 编译器,安装 gcc 以及 libbpf 的完整编译依赖即可。
- gcc / build-essential — C 编译器及基础编译工具链
- libelf-dev — libbpf 解析 ELF 格式必须依赖
- zlib1g-dev — 压缩支持
- pkg-config — 编译时查找依赖库路径
bpftrace 环境配置&编译
先安装依赖,然后进行 clone
| |
安装好了,就可以进行使用了
bcc 环境配置&编译
对于 Ubuntu24.04,可以直接输入下面的命令,GitHub 上面也是有的
还是需要先安装依赖
接着,clone 项目