ebpf实践¶
在了解了 eBPF架构 之后,可以做一些实践来获得感性认识,进一步了解eBPF的强大能力。
随着 eBPF 生态系统的发展,现在用于开发 eBPF 程序的工具链也越来越多,通常可以采用:
基于 bcc 的开发: bcc 提供了 eBPF 的开发,前端使用 Python API,后端 eBPF 程序的 C 实现。 它简单易用,但性能较差。
基于libebpf-bootstrap开发: libebpf-bootstrap提供方便的脚手架
基于内核源码开发: 内核源码开发门槛较高,也与底层eBPF原理相关性较高(本文案例)
准备¶
操作系统环境采用 Ubuntu Linux ,内核版本 5.4.0 ,我采用 私有云架构 环境的KVM虚拟机
z-udev
$ uname -a Linux z-udev 5.4.0-125-generic #141-Ubuntu SMP Wed Aug 10 13:42:03 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
安装必要的依赖:
sudo apt install -y bison build-essential cmake flex git libedit-dev pkg-config libmnl-dev \
python zlib1g-dev libssl-dev libelf-dev libcap-dev libfl-dev llvm clang pkg-config \
gcc-multilib luajit libluajit-5.1-dev libncurses5-dev libclang-dev clang-tools
在Ubuntu Linux环境安装内核源代码, APT包管理 安装非常方便:
# 搜索当前源代码包名
apt-cache search linux-source
# 安装最新内核源代码
sudo apt install linux-source-5.4.0
源代码被安装到 /usr/src
目录:
huatai@z-udev:/usr/src$ ls -lh
total 24K
drwxr-xr-x 24 root root 4.0K Apr 1 07:13 linux-headers-5.4.0-107
drwxr-xr-x 7 root root 4.0K Apr 1 07:13 linux-headers-5.4.0-107-generic
drwxr-xr-x 24 root root 4.0K May 21 23:13 linux-headers-5.4.0-110
drwxr-xr-x 7 root root 4.0K May 21 23:13 linux-headers-5.4.0-110-generic
drwxr-xr-x 24 root root 4.0K Sep 7 08:21 linux-headers-5.4.0-125
drwxr-xr-x 7 root root 4.0K Sep 7 08:21 linux-headers-5.4.0-125-generic
drwxr-xr-x 4 root root 75 Sep 7 08:32 linux-source-5.4.0
lrwxrwxrwx 1 root root 45 Aug 10 16:17 linux-source-5.4.0.tar.bz2 -> linux-source-5.4.0/linux-source-5.4.0.tar.bz2
huatai@z-udev:/usr/src$ sudo tar -jxvf linux-source-5.4.0.tar.bz2
huatai@z-udev:/usr/src$ cd linux-source-5.4.0
参考¶
Introduction to eBPF ! 向原著者致敬