Search K
Appearance
Appearance
XDP 的组件名称为 xdp, 需要内核版本大于 5.10. 相关内核选项为
# Networking support
# -> Networking options
# -> XDP sockets
CONFIG_XDP_SOCKETS=y
# Networking support
# -> Networking options
# -> XDP sockets: monitoring interface
CONFIG_XDP_SOCKETS_DIAG=y检查工具为
#!/bin/bash
source ./kernel_config_utils.sh
source ./bpf_utils.sh
xdp_check() {
is_error=false
if ! kernel_config_check CONFIG_XDP_SOCKETS; then
is_error=true
fi
if ! kernel_config_check CONFIG_XDP_SOCKETS_DIAG xsk_diag; then
is_error=true
fi
if [ "$is_error" == "true" ]; then
return 1
fi
helpers=$(cat << EOF
bpf_map_lookup_elem
bpf_redirect_map
EOF
)
is_error=false
if ! bpf_map_type_check xskmap; then
is_error=true
fi
if bpf_prog_type_check xdp; then
for helper in $helpers; do
if ! bpf_prog_helper_check xdp $helper; then
is_error=true
fi
done
else
is_error=true
fi
if [ "$is_error" == "true" ]; then
return 1
fi
return 0
}当内核版本为 4.19 时, XDP 的 BPF 过滤程序无法挂载.
当内核版本为 5.4 时, XDP 会出现接收丢包的情况. 首先后台运行
iperf3 -c ${server_ip} -t 60000 -u -b 10M -R --bind-dev tun0其中 ${server_ip} 为对端 tun0 网口 IP, 然后运行
dropwatch -l kas进入 dropwatch 提示符后键入 start 并回车, 等待一段时间后既可观察到 XDP 相关函数的丢包统计.
xdp-tools 的组件名称为 xdp_tools, 依赖于组件 BTF, 相关内核选项为
CONFIG_BPF_EVENTS=y检查工具为
#!/bin/bash
source ./kernel_config_utils.sh
source ./bpf_utils.sh
xdp_tools_check() {
local is_error=false
if ! kernel_config_check CONFIG_BPF_EVENTS; then
is_error=true
fi
if [ "$is_error" == "true" ]; then
return 1
fi
is_error=false
if ! bpf_prog_type_check tracing; then
is_error=true
fi
if [ "$is_error" == "true" ]; then
return 1
fi
return 0
}xdp-tools 中的工具添加 -vv 选项即可打印详细日志, 在当前系统 Linux 内核未开启某些内核选项或不支持某些操作时会导致程序无法正常运行:
CONFIG_DEBUG_INFO_BTF 内核选项, 未开启时导致 libbpf 出现 No such process 错误, 以 xdpdump 为例:
# /opt/sumtrd/sbin/xdpdump -i tun0p
ERROR: Can't load eBPF object: No such process(-3)BPF helper 函数 bpf_trace_vprintk, 不支持时会导致 xdp-trafficgen 加载 tp_xdp_cpumap_kthread BPF 过滤程序失败并会有如下报错:
invalid func unknown#177而 bpf_trace_vprintk 编号就是 177.
创建 BPF token, 若不支持, 则 xdpdump 工具添加 -vv 选项时会打印中会有如下报错:
libbpf: object 'xdpdump_bpf': failed (-22) to create BPF token from '/sys/fs/bpf', skipping optional step...BPF 程序类型 tracing, 若不支持, 则 xdp-monitor 会打印中会有如下报错:
libbpf: failed to load BPF skeleton 'xdp_monitor': -22