01-ebpf环境搭建

eBPF 工具对比

维度libbpfbpftraceBCC
定位底层 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 程序的加载

贴一下这三个工具的地址吧,或许后面还会分析源码的时候会用到

基本环境配置要求

  • 操作系统:WSL2 安装 Ubuntu 版本即可

libbpf 环境配置&编译

1
2
3
4
git clone https://github.com/libbpf/libbpf.git
cd libbpf/src/
make
make install

同时第一次安装的 wsl 可能会缺少C 编译器,安装 gcc 以及 libbpf 的完整编译依赖即可。​

1
2
apt-get update
apt install -y gcc build-essential libelf-dev zlib1g-dev pkg-config
  • gcc / build-essential — C 编译器及基础编译工具链
  • libelf-dev — libbpf 解析 ELF 格式必须依赖
  • zlib1g-dev — 压缩支持
  • pkg-config — 编译时查找依赖库路径

bpftrace 环境配置&编译

先安装依赖,然后进行 clone

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
apt-get update
apt-get install -y \
    asciidoctor \
    binutils-dev \
    bison \
    build-essential \
    clang \
    cmake \
    flex \
    libbpf-dev \
    libbpfcc-dev \
    libcereal-dev \
    libdw-dev \
    libelf-dev \
    libiberty-dev \
    libpcap-dev \
    llvm-dev \
    libclang-dev \
    libclang-cpp-dev \
    linux-tools-common \
    pahole \
    xxd \
    zip \
    zlib1g-dev
    
git clone --depth=1 --recurse-submodules --shallow-submodules https://github.com/bpftrace/bpftrace.git
cd bpftrace/
mkdir build
cd build/
cmake .. -DBUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=Release
make -j8
make install 

安装好了,就可以进行使用了

bcc 环境配置&编译

对于 Ubuntu24.04,可以直接输入下面的命令,GitHub 上面也是有的
还是需要先安装依赖

1
2
3
sudo apt install -y zip bison build-essential cmake flex git libedit-dev \
  libllvm18 llvm-18-dev libclang-18-dev python3 zlib1g-dev libelf-dev libfl-dev python3-setuptools \
  liblzma-dev libdebuginfod-dev arping netperf iperf libpolly-18-dev

接着,clone 项目

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
git clone https://github.com/iovisor/bcc.git
mkdir bcc/build; cd bcc/build
cmake ..
make
sudo make install
cmake -DPYTHON_CMD=python3 .. # build python3 binding
pushd src/python/
make
sudo make install
popd