1. 开篇:当DPDK 19.11遇上ARM64与Mellanox CX4
如果你正在一个基于ARM64架构(比如鲲鹏920、飞腾或者AWS Graviton)的服务器上折腾高性能网络,手头恰好有一张或多张Mellanox ConnectX-4(CX4)网卡,并且想用DPDK 19.11来榨干它的性能,那么你很可能已经踩在了一个技术交叉点上。这个组合听起来很强大,但实际走通的路,往往布满了编译依赖、内核模块和库版本冲突这些“坑”。我最近就完整地走了一遍这条路,从环境准备、驱动适配到最终的性能验证,整个过程就像在解一个环环相扣的谜题。这篇文章,我就把自己趟过的路、踩过的坑,以及最终的解决方案,用最直白的方式分享给你。我们的目标很明确:在ARM64服务器上,成功编译并运行一个支持Mellanox CX4网卡的DPDK 19.11程序,让它稳定高效地转发数据包。
为什么是DPDK 19.11?这个版本在稳定性和功能上是一个经典的选择,很多生产环境都在用。而ARM64架构,作为数据中心和边缘计算的新兴力量,其生态正在快速完善。Mellanox CX4网卡则是25G/100G网络中的常客,性能强悍。但把它们三个凑在一起,官方的一键安装脚本往往就不灵了,特别是当你面对一个定制化的、可能连Glibc版本都比较“复古”的操作系统时。别担心,跟着下面的步骤,我们一步步来拆解这个难题。整个过程会涉及到内核版本选择、驱动编译配置、第三方库的兼容性处理,以及一些实用的调优技巧。我会尽量把每个操作背后的“为什么”也讲清楚,这样即使你的环境和我略有不同,也能举一反三。
2. 环境侦察与核心依赖梳理
动手之前,先把家里的情况摸清楚。这就像打仗前的侦察,信息越详细,后面就越顺利。首先,用几条命令看看你的硬件和系统底细。
# 查看CPU架构
lscpu | grep Architecture
# 查看内核版本
uname -r
# 查看Glibc版本
ldd --version | head -1
# 查看网卡PCI信息
lspci | grep Mellanox
在我这次的环境里,CPU是ARM64架构,内核是5.4.18,Glibc版本是2.17,网卡型号是Mellanox MT27710(也就是ConnectX-4 Lx)。DPDK版本锁定在19.11。这里第一个关键点就出现了:内核版本。Mellanox的mlx5_core驱动对内核有要求,早期经验表明需要5.0以上。我们选的5.4.18是经过验证的,它包含了我们所需的大部分内核模块。你可以通过以下命令检查关键模块是否存在:
find /lib/modules/`uname -r` -name "*mlx5*" -o -name "*ib*" | grep -E "\.ko(\.xz)?$"
你需要确认至少能看到mlx5_core.ko,ib_uverbs.ko,ib_umad.ko,mlx5_ib.ko这几个模块。如果缺了,可能需要你手动编译内核或者寻找对应的内核安装包。第二个关键点是Glibc版本。2.17是一个相对较低的版本,而DPDK的Mellanox PMD驱动(mlx5)动态链接的RDMA用户态库(如libibverbs、libmlx5)很可能是在高版本Glibc下编译的,直接拿来用会报“GLIBC_2.25 not found”这类错误。这是我们后面要重点解决的兼容性难题。
第三个关键点是DPDK驱动支持。打开DPDK 19.11的源码,在 drivers/net/mlx5/mlx5_pci.c 文件中,你可以找到 mlx5_pci_id_map 数组。里面明确列出了支持的设备ID,包括 PCI_DEVICE_ID_MEL

200

被折叠的 条评论
为什么被折叠?



