当前位置: 首页 > news >正文

wsl2安装ebpf教程

WSL安装BCC

包含ebpf的内核安装

WSL2的内核是修改过的,无法使用 ubuntu上游的内核头文件和modules文件,因此,我们需要手动编译并安装一个内核版本。

 uname -r
5.15.150.1-2-microsoft-standard-WSL2

我们可以重洗下载一个内核

git clone --depth 1 https://github.com/microsoft/WSL2-Linux-Kernel.git -b linux-msft-wsl-$(uname -r | cut -d '-' -f 1)
cd WSL2-Linux-Kernel

安装必要的工具

sudo apt install flex bison build-essential libelf-dev libncurses-dev libssl-dev bc binutils dwarves

复制配置文件

cp Microsoft/config-wsl .config

.config 中修改以下选项:

CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
CONFIG_NET_CLS_BPF=m
CONFIG_NET_ACT_BPF=m
CONFIG_BPF_JIT=y
CONFIG_HAVE_BPF_JIT=y
CONFIG_HAVE_EBPF_JIT=y
CONFIG_BPF_EVENTS=y
CONFIG_IKHEADERS=m
CONFIG_NET_SCH_SFQ=m
CONFIG_NET_ACT_POLICE=m
CONFIG_NET_ACT_GACT=m
CONFIG_DUMMY=m
CONFIG_VXLAN=m

设置内核版本:

export KERNELRELEASE=$(uname -r)

编译

make KERNELRELEASE=$KERNELRELEASE -j 4
make KERNELRELEASE=$KERNELRELEASE modules -j 4
sudo make KERNELRELEASE=$KERNELRELEASE modules_install

编译后配置:在windows系统中的:C:\Users[你的用户名]目录下创建.wslconfig文件。将下面内容写入文件中。注意确保windows系统中存在D盘

[wsl2]
kernel=D:\\kernel

将心编译的内核挂载到D盘上

cp arch/x86/boot/bzImage /mnt/d/kernel

重启WSL

wsl.exe --shutdown

至此WSL对应新的内核已经包含ebpf了。

BCC源码安装

清理对应的工具链。否则将会出现AttributeError: /lib/x86_64-linux-gnu/libbcc.so.0: undefined symbol: bpf_module_create_b问题

sudo rm /usr/lib/python3/dist-packages/bcc*

安装BCC必要安装的工具,针对不同的版本选择对应的形式:

# For Focal (20.04.1 LTS)
sudo apt install -y zip bison build-essential cmake flex git libedit-dev \libllvm12 llvm-12-dev libclang-12-dev python zlib1g-dev libelf-dev libfl-dev python3-setuptools \liblzma-dev arping netperf iperf# For Hirsute (21.04) or Impish (21.10)
sudo apt install -y zip bison build-essential cmake flex git libedit-dev \libllvm12 llvm-12-dev libclang-12-dev python3 zlib1g-dev libelf-dev libfl-dev python3-setuptools \liblzma-dev arping netperf iperf# For Jammy (22.04)
sudo apt install -y zip bison build-essential cmake flex git libedit-dev \libllvm14 llvm-14-dev libclang-14-dev python3 zlib1g-dev libelf-dev libfl-dev python3-setuptools \liblzma-dev libdebuginfod-dev arping netperf iperf# For Lunar Lobster (23.04)
sudo apt install -y zip bison build-essential cmake flex git libedit-dev \libllvm15 llvm-15-dev libclang-15-dev python3 zlib1g-dev libelf-dev libfl-dev python3-setuptools \liblzma-dev libdebuginfod-dev arping netperf iperf libpolly-15-dev# For other versions
sudo apt-get -y install zip bison build-essential cmake flex git libedit-dev \libllvm3.7 llvm-3.7-dev libclang-3.7-dev python zlib1g-dev libelf-dev python3-setuptools \liblzma-dev arping netperf iperf# For Lua support
sudo apt-get -y install luajit luajit-5.1-dev
sudo apt install -y python-is-python3
sudo apt install -y bison build-essential cmake flex git libedit-dev   libllvm11 llvm-11-dev libclang-11-dev zlib1g-dev libelf-dev libfl-dev python3-distutils

下载并安装BCC。注意:只能使用git方式来拉取代码,不能通过wget形式。因为make的时候还需要拉取其它仓库。而wget拉取的代码在make的时候不会拉取其它仓库,从而导致了错误fatal error: libbpf/src/bpf.h: No such file or directory产生。

git clone https://github.com/iovisor/bcc.git
mkdir bcc/build; cd bcc/build
cmake ..
make
sudo make install
cmake -DPYTHON_CMD=python3 ..
pushd src/python/
make
sudo make install
popd

确认安装成功。如下命令不会执行出错。

cd example
python3 hello_world.py

不要使用apt-get install bpfcc-toolls来安装bcc工具。因为安装的版本较老。直接使用bcc仓库代码下面的tools里面的python代码即可。因为随着linux内核的版本升级,打桩函数发生了改变。https://github.com/iovisor/bcc/issues/4937就有一个问题产生
例如下面

./offcputime-bpfcc
cannot attach kprobe, probe entry may not exist
Traceback (most recent call last):File "/sbin/offcputime-bpfcc", line 234, in <module>b.attach_kprobe(event="finish_task_switch", fn_name="oncpu")File "/usr/lib/python3/dist-packages/bcc/__init__.py", line 683, in attach_kproberaise Exception("Failed to attach BPF program %s to kprobe %s" %
Exception: Failed to attach BPF program b'oncpu' to kprobe b'finish_task_switch'

有可能的原因是:finish_task_switch函数产生了内联。具体可以通过/proc/kallsyms来看打桩函数。

sudo cat /proc/kallsyms | grep finish_task_switch 
ffffffffa7134a80 t finish_task_switch.isra.0

发现就只包含了finish_task_switch.isra.0。而在bcc仓库的tools里offcputime.py此问题就解决了。

火焰图工具

为了较好的观看内容,我们使用火焰图工具。
下载火焰图工具。直接解压使用flamegraph.pl即可

https://github.com/brendangregg/FlameGraph

参考文献

如何在WSL中的ubuntu编译Linux内核并且安装使用ebpf?
WSL2安装BCC
WSL 运行make提示/lib/modules/xxx/build: No such file or directory. Stop.错误解决办法
WSL安装BCC
Ubuntu 18.04 LTS上编译安装BCC
安装FlameGraph工具
安装bpftrace和bcc的踩坑记录


http://www.mrgr.cn/news/3321.html

相关文章:

  • Redis远程字典服务器(9)—— 类型补充
  • [Windows CMD] 查看网络连接状态 netstat -na | findstr “TCP“
  • Linux 音媒体小项目练手
  • plantUML介绍和使用
  • 汇编世界的桥梁:链接器与加载器的奥秘
  • C语言:递归
  • PHP概述、环境搭建与基本语法讲解
  • 【网络】套接字(socket)编程——TCP版
  • 【MADRL】基于MADRL的单调价值函数分解(QMIX)算法
  • FPGA时序约束
  • 【数据分享】《中国社会统计年鉴》(2006-2023)
  • JavaScript_7_练习:随机抽奖案例
  • 代码随想录算法训练营第二十九天| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • 【企业高性能web服务器】
  • 数据结构day03(栈 Stack 顺序栈、链式栈 )内含具体详细代码实现
  • 场景分析-库存扣减
  • 宠物空气净化器是智商税吗?希喂、范罗士热门产品真实性能测试
  • 8个我平时每天都会看的网站,涵盖办公、娱乐、学习等
  • 使用Python将xml标注文件转换为coco json格式
  • Leetcode-day23-回溯-子集问题