bpftool 是 Linux 内核自带的 eBPF 程序管理工具,功能非常强大。以下是常用命令分类整理:
一、程序管理 (prog)
| 命令 |
说明 |
bpftool prog show |
列出所有已加载的 eBPF 程序 |
bpftool prog show id <ID> |
查看指定 ID 的程序详情 |
bpftool prog show pinned /sys/fs/bpf/xxx |
查看 pinned 的程序 |
bpftool prog dump xlated id <ID> |
查看程序的字节码(经过 JIT 翻译后) |
bpftool prog dump jited id <ID> |
查看 JIT 编译后的机器码 |
bpftool prog load <file.o> /sys/fs/bpf/xxx |
加载程序并 pin 到文件系统 |
bpftool prog loadall <file.o> /sys/fs/bpf/dir |
加载 ELF 中所有程序 |
bpftool prog attach id <ID> <attach_type> <target> |
附加程序到目标 |
bpftool prog detach id <ID> <attach_type> <target> |
分离程序 |
bpftool prog run id <ID> data_in <file> data_out <file> |
手动运行程序(测试用) |
bpftool prog pin id <ID> /sys/fs/bpf/xxx |
将程序 pin 到文件系统 |
bpftool prog help |
查看子命令帮助 |
示例
# 查看所有程序,带标签和 map 信息
bpftool prog show
# 详细查看某个程序
bpftool prog show id 42 --pretty
# 查看反汇编代码
bpftool prog dump xlated id 42 opcodes
# 加载 XDP 程序
bpftool prog load xdp_prog.o /sys/fs/bpf/xdp_prog type xdp
二、映射管理 (map)
| 命令 |
说明 |
bpftool map show |
列出所有已加载的 map |
bpftool map show id <ID> |
查看指定 map 详情 |
bpftool map dump id <ID> |
导出 map 中所有数据 |
bpftool map lookup id <ID> key <hex> |
查询指定 key |
bpftool map update id <ID> key <hex> value <hex> |
更新键值对 |
bpftool map delete id <ID> key <hex> |
删除键值对 |
bpftool map getnext id <ID> key <hex> |
获取下一个 key(遍历用) |
bpftool map create /sys/fs/bpf/xxx type <type> key <n> value <n> entries <n> |
创建 map |
bpftool map pin id <ID> /sys/fs/bpf/xxx |
pin map 到文件系统 |
bpftool map event_pipe id <ID> |
读取 perf/ring buffer 事件 |
示例
# 查看所有 map
bpftool map show
# 导出 map 数据(自动解析 key/value 类型)
bpftool map dump id 10
# 更新 map(key/value 用十六进制)
bpftool map update id 10 key 0x01 0x00 0x00 0x00 value 0x0a 0x00 0x00 0x00
# 创建数组类型的 map
bpftool map create /sys/fs/bpf/my_map type array key 4 value 4 entries 1024 name my_map
三、链路管理 (link)
| 命令 |
说明 |
bpftool link show |
列出所有 BPF link |
bpftool link show id <ID> |
查看指定 link |
bpftool link pin id <ID> /sys/fs/bpf/xxx |
pin link |
bpftool link detach id <ID> |
分离 link |
四、BTF 管理 (btf)
| 命令 |
说明 |
bpftool btf show |
列出所有 BTF 对象 |
bpftool btf dump id <ID> |
导出 BTF 信息 |
bpftool btf dump file <vmlinux> format c |
从 vmlinux 生成 C 头文件 |
bpftool btf dump file <vmlinux> format raw |
导出原始 BTF 数据 |
示例
# 生成 vmlinux.h 头文件(开发 eBPF 必备)
bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h
五、特性查询 (feature)
| 命令 |
说明 |
bpftool feature probe |
探测内核 eBPF 特性支持情况 |
bpftool feature probe kernel |
探测内核特性 |
bpftool feature probe libbpf |
探测 libbpf 特性 |
bpftool feature probe macro |
输出为 C 宏定义形式 |
示例
# 查看内核支持的 eBPF 特性
bpftool feature probe kernel
# 生成特性宏(用于条件编译)
bpftool feature probe macro > bpf_features.h
六、网络程序管理 (net)
| 命令 |
说明 |
bpftool net show |
显示所有网络附加的 eBPF 程序 |
bpftool net list |
同上 |
bpftool net attach xdp id <ID> dev <eth0> |
附加 XDP 程序到网卡 |
bpftool net attach xdpgeneric id <ID> dev <eth0> |
以 generic 模式附加 XDP |
bpftool net attach xdpoffload id <ID> dev <eth0> |
以硬件卸载模式附加 XDP |
bpftool net detach xdp dev <eth0> |
从网卡卸载 XDP 程序 |
示例
# 查看网卡上的 eBPF 程序
bpftool net show
# 附加 XDP 程序
bpftool net attach xdp pinned /sys/fs/bpf/xdp_prog dev eth0
# 卸载 XDP
bpftool net detach xdp dev eth0
七、性能监控 (perf)
| 命令 |
说明 |
bpftool perf show |
列出 perf_event 附加的 eBPF 程序 |
bpftool perf list |
同上 |
八、cgroup 管理
| 命令 |
说明 |
bpftool cgroup show <path> |
显示 cgroup 上附加的程序 |
bpftool cgroup tree <path> |
显示整个 cgroup 树 |
bpftool cgroup attach <path> <attach_type> id <ID> |
附加程序到 cgroup |
bpftool cgroup detach <path> <attach_type> id <ID> |
分离程序 |
九、常用技巧
# 1. 查看程序加载的 map
bpftool prog show id <ID> --json | jq '.maps'
# 2. 同时查看程序和关联的 map
bpftool prog show
# 3. 格式化输出(JSON)
bpftool prog show --json --pretty
# 4. 查看程序统计信息(如果内核支持)
bpftool prog show id <ID> stats
# 5. 批量操作:加载并附加
bpftool prog load prog.o /sys/fs/bpf/prog
bpftool net attach xdp pinned /sys/fs/bpf/prog dev eth0
十、attach_type 常用值
| 类型 |
用途 |
xdp |
网络包处理 |
tc / tc_ingress / tc_egress |
流量控制 |
kprobe / kretprobe |
内核函数探针 |
tracepoint |
内核跟踪点 |
raw_tracepoint |
原始跟踪点 |
perf_event |
性能事件 |
cgroup_skb / cgroup_sock |
cgroup 网络控制 |
socket_filter |
套接字过滤 |
sk_msg / sk_skb |
socket 消息处理 |
lirc_mode2 |
红外遥控 |
flow_dissector |
流解析 |