1、安装bpftool工具
看起来,在不同的linux发行版里,bpftool在不同的软件包里,ubuntu 22上,bpftool是linux-tools-generic的一部分,而树莓派里bpftool是一个单独的软件包。
在ubuntu上:
代码语言:javascript复制sudo apt install linux-tools-generic
在树莓派上:
代码语言:javascript复制sudo apt install bpftool
然后用whereis命令就可以查看到安装情况
代码语言:javascript复制xxx@xxx-pc:~$ whereis bpftool
bpftool: /usr/sbin/bpftool /usr/share/man/man8/bpftool.8.gz
有些发行版本上可能还需要自行从Linux下载源代码后安装(从源代码开始安装的方法介绍to be update)
2、bpftool简介
BPFTOOL 是linux内核自带的用于对eBPF程序和eBPF map进行检查与操作的工具软件。注意,依赖于内核版本和bpftool的版本的不同,实际使用与输出可能会与本文略有出入。
3、bpftool的常用功能
- sudo bpftool prog list: 显示所有已经被load到系统里的eBPF程序的信息列表,除了显示功能外,还支持dump等功能,可以通过man bpftool prog来查看具体支持的功能。
- bpftool net list 显示内核网络子系统里的eBPF程序,除了显示功能外,还支持其它功能,可以通过man bpftool net来查看具体支持的功能。
- bpftool link list 显示所有激活的链接,除了显示功能外,还支持其它功能,可以通过man bpftool link来查看具体支持的功能。
- bpftool perf list 显示系统里所有raw_tracepoint, tracepoint, kprobe attachments ,除了显示功能外,还支持其它功能,可以通过man bpftool perf来查看具体支持的功能。
- bpftool btf list 显示所有BPF Type Format (BTF)数据 ,除了显示功能外,还支持其它功能,可以通过man bpftool btf来查看具体支持的功能。
- bpftool map list 显示系统内已经载入的所有bpf map数据,除了显示功能外,还支持其它功能,可以通过man bpftool map来查看具体支持的功能。
- bpftool feature probe dev eth0 查看eth0支持的eBPF特性 。
4、使用bpftool查看eBPF程序运行情况的一个例子
在文章XDP入门–eBPF程序实现网桥/二层交换机转发功能中,我们往eth0和eth1载入了根据目标MAC转发数据包的eBPF字节码,在这个程序中,我们用了
- 一个叫xdp_bridge_prog()数据包处理函数
- 一个叫mac_port_map的map数据库
用以下二条命令我们就可以查看到上述信息,并用bpftool map dump功能来查看map里的内容
代码语言:javascript复制xxx@raspberrypi:~ $ sudo bpftool prog list | tail -n 4
xlated 64B not jited memlock 4096B
21: xdp name xdp_bridge_prog tag 610be6df09f4715b gpl
loaded_at 2023-05-31T13:57:17 0800 uid 0
xlated 704B not jited memlock 4096B map_ids 1
代码语言:javascript复制xxx@raspberrypi:~ $ sudo bpftool map list
1: hash name mac_port_map flags 0x0
key 8B value 4B max_entries 100 memlock 4096B
xxx@raspberrypi:~ $ sudo bpftool map dump id 1