如何正确执行bpftool struct_ops register命令及环境搭建咨询
问题翻译
我在Linux主线版本(commit 2d1bcbc6cd70)中编译了bpftool与BPF自测套件,但在Ubuntu 22.04客户机系统执行bpftool struct_ops register bpf_cubic.bpf.o命令时失败,报错信息为:
libbpf: struct_ops init_kern: struct tcp_congestion_ops data is not found in struct bpf_struct_ops_tcp_congestion_ops libbpf: failed to load object 'bpf_cubic.bpf.o'
编译内核与BPF的宿主机系统为Ubuntu 23.04。此外,我希望了解可成功运行bpftool struct_ops register xxx.o命令的环境配置(含OS版本示例、内核.config示例)。我已执行bpftool btf dump file /sys/kernel/btf/vmlinux命令,得到bpf_struct_ops_tcp_congestion_ops的结构信息如下:
[64291] STRUCT 'bpf_struct_ops_tcp_congestion_ops' size=256 vlen=3 'refcnt' type_id=298 bits_offset=0 'state' type_id=64117 bits_offset=32 'data' type_id=63569 bits_offset=512
问题原因分析
核心问题是宿主机编译的BPF目标文件与客户机内核的BTF结构不匹配:
- 你在Ubuntu23.04宿主机编译的
bpf_cubic.bpf.o,依赖的是主线内核(commit 2d1bcbc6cd70)中bpf_struct_ops_tcp_congestion_ops的结构定义,其中包含与tcp_congestion_ops的字段映射关系。 - 但Ubuntu22.04客户机默认内核(5.15版本)的
bpf_struct_ops_tcp_congestion_ops结构,与编译时依赖的主线内核结构不一致。从你提供的客户机BTF信息看,data字段的类型ID与宿主机编译时预期的tcp_congestion_ops结构不匹配,导致libbpf加载失败。
解决方法
1. 统一内核版本
在Ubuntu22.04客户机上安装与编译BPF程序时相同的主线内核(commit 2d1bcbc6cd70):
- 下载该commit的内核源码,在Ubuntu22.04环境下编译安装(保留编译时的
.config配置) - 重启客户机切换到该内核后,再执行
bpftool struct_ops register命令
2. 客户机本地编译BPF程序
直接在Ubuntu22.04客户机上编译bpftool和BPF自测套件:
- 安装编译依赖:
sudo apt install build-essential libelf-dev zlib1g-dev flex bison - 下载主线commit 2d1bcbc6cd70的内核源码,编译bpftool:
cd tools/bpf/bpftool && make - 编译BPF自测套件中的
bpf_cubic.bpf.o:进入内核源码的tools/testing/selftests/bpf目录执行make
可成功运行的环境配置示例
OS版本示例
- 宿主机/客户机统一使用Ubuntu23.04(默认内核6.2,或自行编译主线commit 2d1bcbc6cd70)
- 或统一使用Ubuntu22.04 + 自行编译的主线内核(commit 2d1bcbc6cd70)
内核.config关键配置项
确保内核编译时开启以下BPF相关配置(必须项):
# BPF基础支持 CONFIG_BPF=y CONFIG_BPF_SYSCALL=y # BPF Struct Ops支持 CONFIG_BPF_STRUCT_OPS=y CONFIG_BPF_STRUCT_OPS_TCP_CONGESTION=y # BTF支持(结构类型匹配必备) CONFIG_DEBUG_INFO_BTF=y CONFIG_DEBUG_INFO=y # 辅助配置 CONFIG_BPF_JIT=y CONFIG_CGROUP_BPF=y CONFIG_NET_CLS_BPF=y CONFIG_NET_ACT_BPF=y
验证配置:编译内核后,执行zcat /proc/config.gz | grep -E "(BPF|BTF)"确认上述配置已开启。
内容的提问来源于stack exchange,提问作者Zhouyi Zhou
相关产品推荐
相关产品推荐

