bpftool使用方法简介

发布时间 2024-01-01 21:14:42作者: yooooooo

1、安装bpftool工具

看起来,在不同的linux发行版里,bpftool在不同的软件包里,ubuntu 22上,bpftool是linux-tools-generic的一部分,而树莓派里bpftool是一个单独的软件包。

在ubuntu上:

sudo apt install linux-tools-generic

在树莓派上:

sudo apt install bpftool

然后用whereis命令就可以查看到安装情况

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里的内容

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

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