Linux的socket reuseport与eBPF

问题遇到的现象和发生背景

我最近在做UDP 的reuseport的ebpf编程,我看了https://blog.csdn.net/dog250/article/details/103245748,这篇文章,这个文章demo写了一半.提到了参考
系统的test_select_reuseport.c 源码,于是我编译了自测代码和用例,make -C tools/testing/selftests TARGETS=bpf run_tests。
但是奇怪的是,自测代码居然载入kern文件失败,
我的系统
Linux VM-16-3-ubuntu 5.4.0-90-generic #101-Ubuntu SMP Fri Oct 15 20:00:55 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
我下载的内核代码也是
linux-5.4
机器使用的腾讯云服务器。

问题相关代码,请勿粘贴截图
运行结果及报错内容
# selftests: bpf: test_select_reuseport
# libbpf: Error loading BTF: Invalid argument(22)
# libbpf: magic: 0xeb9f
# version: 1
# flags: 0x0
# hdr_len: 24
# type_off: 0
# type_len: 1284
# str_off: 1284
# str_len: 2338
# btf_total_size: 3646
# [1] STRUCT (anon) size=32 vlen=4
#     type type_id=2 bits_offset=0
#     max_entries type_id=6 bits_offset=64
#     key_size type_id=8 bits_offset=128
#     value_size type_id=8 bits_offset=192
# [2] PTR (anon) type_id=4
# [3] INT int size=4 bits_offset=0 nr_bits=32 encoding=SIGNED
# [4] ARRAY (anon) type_id=3 index_type_id=5 nr_elems=12
# [5] INT __ARRAY_SIZE_TYPE__ size=4 bits_offset=0 nr_bits=32 encoding=(none)
# [6] PTR (anon) type_id=7
# [7] ARRAY (anon) type_id=3 index_type_id=5 nr_elems=1
# [8] PTR (anon) type_id=9
# [9] ARRAY (anon) type_id=3 index_type_id=5 nr_elems=4
# [10] VAR outer_map type_id=1 linkage=1
# [11] STRUCT (anon) size=32 vlen=4
#     type type_id=12 bits_offset=0
#     max_entries type_id=6 bits_offset=64
#     key type_id=14 bits_offset=128
#     value type_id=17 bits_offset=192
# [12] PTR (anon) type_id=13
# [13] ARRAY (anon) type_id=3 index_type_id=5 nr_elems=2
# [14] PTR (anon) type_id=15
# [15] TYPEDEF __u32 type_id=16
# [16] INT unsigned int size=4 bits_offset=0 nr_bits=32 encoding=(none)
# [17] PTR (anon) type_id=3
# [18] VAR tmp_index_ovr_map type_id=11 linkage=1
# [19] STRUCT (anon) size=32 vlen=4
#     type type_id=12 bits_offset=0
#     max_entries type_id=20 bits_offset=64
#     key type_id=14 bits_offset=128
#     value type_id=14 bits_offset=192
# [20] PTR (anon) type_id=21
# [21] ARRAY (anon) type_id=3 index_type_id=5 nr_elems=6
# [22] VAR result_map type_id=19 linkage=1
# [23] STRUCT (anon) size=32 vlen=4
#     type type_id=12 bits_offset=0
#     max_entries type_id=6 bits_offset=64
#     key type_id=14 bits_offset=128
#     value type_id=14 bits_offset=192
# [24] VAR linum_map type_id=23 linkage=1
# [25] STRUCT (anon) size=32 vlen=4
#     type type_id=12 bits_offset=0
#     max_entries type_id=6 bits_offset=64
#     key type_id=14 bits_offset=128
#     value type_id=26 bits_offset=192
# [26] PTR (anon) type_id=27
# [27] STRUCT data_check size=52 vlen=8
#     ip_protocol type_id=15 bits_offset=0
#     skb_addrs type_id=28 bits_offset=32
#     skb_ports type_id=31 bits_offset=288
#     eth_protocol type_id=29 bits_offset=320
#     bind_inany type_id=32 bits_offset=336
#     equal_check_end type_id=34 bits_offset=344
#     len type_id=15 bits_offset=352
#     hash type_id=15 bits_offset=384
# [28] ARRAY (anon) type_id=15 index_type_id=5 nr_elems=8
# [29] TYPEDEF __u16 type_id=30
# [30] INT unsigned short size=2 bits_offset=0 nr_bits=16 encoding=(none)
# [31] ARRAY (anon) type_id=29 index_type_id=5 nr_elems=2
# [32] TYPEDEF __u8 type_id=33
# [33] INT unsigned char size=1 bits_offset=0 nr_bits=8 encoding=(none)
# [34] ARRAY (anon) type_id=32 index_type_id=5 nr_elems=0
# [35] VAR data_check_map type_id=25 linkage=1
# [36] PTR (anon) type_id=37
# [37] STRUCT sk_reuseport_md size=40 vlen=7
#     (anon) type_id=38 bits_offset=0
#     (anon) type_id=40 bits_offset=64
#     len type_id=15 bits_offset=128
#     eth_protocol type_id=15 bits_offset=160
#     ip_protocol type_id=15 bits_offset=192
#     bind_inany type_id=15 bits_offset=224
#     hash type_id=15 bits_offset=256
# [38] UNION (anon) size=8 vlen=1
#     data type_id=39 bits_offset=0
# [39] PTR (anon) type_id=0
# [40] UNION (anon) size=8 vlen=1
#     data_end type_id=39 bits_offset=0
# [41] FUNC_PROTO (anon) return=3 args=(36 reuse_md)
# [42] FUNC _select_by_skb_data type_id=41 vlen != 0
# 
# libbpf: Error loading .BTF into kernel: -22.
# prepare_bpf_obj(96):FAIL:open test_select_reuseport_kern.o obj:0xffffffffffffffea PTR_ERR(obj):-22
not ok 17 selftests: bpf: test_select_reuseport # exit=255

我的解答思路和尝试过的方法
我想要达到的结果

因为我最近刚开始做ebpf的编程,对于这种,系统自测代码和用例都失败的情况,目前没有排查的能力和方向,系统有人能给一些经验,和方向。

看一下token是否正确

看报错,感觉是版本不兼容吧

yum groupinstall Development tools 源码安装软件就需要安装这个。

你能用谷歌吗?看看https://cloudnative.to/blog/compile-bpf-examples/ 这网站能不能帮上你

对于这方面也不是特别擅长,来看一看讨论,学习一下

进来学习学习

环境有没有错误呀

这方面资料真不好找,毕竟eBDF现在还在各种更新中。

sudo apt-get install libncurses5-dev openssl libssl- dev
sudo apt-get install build-essential openssl
sudo apt-get install pkg-config
sudo apt-get install libc6-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install libelf-dev
sudo apt-get install zlibc minizip
sudo apt-get install libidn11-dev libidn11
按理说没啥错呀

别在百度搜,去谷歌搜。

可能是需要添加一些自己的参数吧,查看一下那个编译的文件说明

腾讯云服务器好像会有问题,自己电脑装一个试试

学习一下,毕竟这个我也不会