CX4网卡配置问题导致DPDK无法运行
发表于 2025/10/21
0
作者 | 刘坤
环境信息
硬件信息
环境 |
基准环境 |
对比环境 |
服务器型号 |
TaiShan 200 2280 |
TaiShan 200 2280 |
CPU型号 |
Kunpeng 920 |
Kunpeng 920-5250 |
内存 |
NA |
12*32G 2933MHz |
网卡型号 |
1*CX4网卡 |
2*CX4网卡 |
操作系统及软件信息
基准环境和对比环境的软件配置相同。
操作系统版本 |
openEuler 20.03 LTS-SP1 |
内核版本 |
4.19.90-2109.1.0.0108.oe1.aarch64 |
编译器版本 |
GCC-7.3.0 |
DPDK版本 |
DPDK-18.11.11 |
网卡驱动版本 |
升级前5.0-0,升级后5.4-3.6.8 |
网卡固件版本 |
14.28.1300 |
组网方式
版本测试都有两台设备对接,其中一端启动testpmd环回,另一端使用pktgen发包测试。

环境部署
DPDK测试需要依赖一些库文件和相关命令,可使用如下方法进行安装:
可使用系统镜像ISO配置本地源,也可以通过网络或VPN配置官方yum源。
-
上传操作系统镜像ISO到/home下。
优先选用everything版本镜像,包含软件包相对较多。
-
挂载镜像。
mkdir /home/localrepo
mount /home/ openEuler-20.03-LTS-SP1-everything-aarch64-dvd.iso /home/localrepo
-
配置yum.repo文件。
mv /etc/yum.repos.d /etc/yum.repos.d-bak
mkdir /etc/yum.repos.d
vim /etc/yum.repos.d/local.repo
写入如下配置并保存退出。
[localrepo]
name=localrepo
baseurl=file:///home/localrepo
gpgcheck=0
enabled=1
-
刷新yum源缓存。
yum clean && yum makecache
-
安装依赖库。
yum install -y gcc gcc-c++ rdma-core rdma-core-devel libnl3-devel numactl numactl-devel libpcap-devel readline-devel libnml-devel
编译DPDK
1、下载源码。
从官网下载DPDK-18.11.11源码。
wget http://fast.dpdk.org/rel/dpdk-18.11.11.tar.xz
2、解压并进入源码目录。
tar -xf dpdk-18.11.11.tar.xz
cd dpdk-stable-18.11.11/config/ && ls

开启IGB_UIO、VFIO驱动选项和CX4网卡驱动选项(修改为y),保存配置文件。
vim common_base

cd ../usertools
./ dpdk-setup.sh




5、查看网卡信息。
./dpdk-devbind.py -s

问题分析
问题现象
编译安装DPDK后,用DPDK自带的helloworld示例程序测试,用于验证DPDK环境是否正常。
测试过程报错截图:

网卡驱动状态截图:

编译安装DPDK后,用DPDK自带的helloworld示例程序测试,用于验证DPDK环境是否正常。
测试过程报错截图:
网卡驱动状态截图:
复现条件
在1-环境信息的环境下,并准备好3-环境部署后,执行helloworld示例程序测试,问题可以复现。
在1-环境信息的环境下,并准备好3-环境部署后,执行helloworld示例程序测试,问题可以复现。
复现过程
1、编译生成DPDK自带的helloworld示例程序并运行。
2、指定用户态驱动igb_uio并绑定bus号为0000:01:00.1的网卡。
3、执行helloworld示例程序测试,指定用户态驱动的网口出现问题,其余网口正常。
4、用DPDK自带test-pmd测试程序验证,指定用户态驱动的网口出现问题,其余网口正常。
具体分析
从helloworld测试报错打印可以看出,net_mlx5需要用到的bus号0000:01:00.0被占用。应该是用户态驱动igb_uio并绑定网口时占用了。原因见下图:
绑定网口前:
绑定网口后:
如果是这样的话,用网口创建VF,创建VF的同时会生成新的bus号,把VF绑定到用户态驱动igb_uio,就不会和网口内核态驱动有bus号冲突。
验证步骤如下:
1、创建VF。
echo 1 > /sys/class/net/enp1s0f1/device/sriov_numvfs
2、dpdk命令查看生成的VF。
./dpdk-devbind.py -s
3、指定用户态驱动igb_uio并绑定bus号为0000:01:2的VF。
4、执行helloworld示例程序测试。
5、切换为vfio驱动。
运行失败,说明存在其他地方被限制。
验证驱动版本兼容问题
IGB_UIO、VFIO驱动都是虚拟化强相关特性,使能硬件和操作系统虚拟化参数选项,高版本的网卡驱动兼容性更高,也一并升级下。
验证驱动版本兼容问题
IGB_UIO、VFIO驱动都是虚拟化强相关特性,使能硬件和操作系统虚拟化参数选项,高版本的网卡驱动兼容性更高,也一并升级下。
升级网卡驱动
./mlnxofedinstall --dpdk




./mlnxofedinstall --dpdk
修改系统内核启动参数
1、添加grub选项。
在grub文件中添加:
iommu.passthrough=1 pci=pcie_bus_perf pciehp.pciehp_force=1
2、重启后进BIOS确认smmu为enabled(硬件虚拟化开关)。
3、重启后网卡驱动升级成功。
验证切IGB_UIO和VFIO驱动是否正常
升级网卡驱动重启后,需要重新加载IGB_UIO、VFIO驱动。

1、重新加载IGB_UIO驱动。存在报错信息。

2、加载vfio驱动。

3、切vfio驱动,查看dpdk是否接管正常。

4、挂载大页内存。

5、执行helloworld。

6、重新编译dpdk后执行helloworld。

结论:不是驱动版本问题。
验证DPDK程序自动切换功能
默认使用mlx5_core的网卡,无论是helloworld还是test-pmd测试都正常。推断CX4网卡已经不需要切驱动,可用DPDK程序直接接管(自动切换)。
不手动切换驱动,物理网口和VF用helloworld测试正常。


不手动切换驱动,物理网口和VF用test-pmd测试正常。


DPDK官方文档说明:
https://doc.dpdk.org/guides/nics/mlx5.html

结合网络相关资料分析:
1、不使用igb_uio.ko。
https://github.com/xiangp126/dpdk/blob/master/mellanox/Mellanox.md

2、启动DPDK之前,不需要为Mellanox绑定igb_uio或者uio_pci_generic等用户态驱动(https://zhuanlan.zhihu.com/p/484252751)。
3、网卡使用mlx5_core驱动之后就不再依赖内核的UIO框架,Mellanox会使用它特有的mlx5_core驱动来完成Mellanox 网卡(PCI 设备)的注册。https://tool.4xseo.com/a/2118.html
定位结论
CX4网卡使用mlx5_core驱动来完成Mellanox 网卡(PCI 设备)的注册,和华为或因特尔网卡需要切igb_uio或vfio-pci驱动有差异。现场把网卡绑定到用户态驱动igb_uio,导致igb_uio分配的bus号和mlx5_core驱动的bus号冲突,引发问题。内部环境验证,CX4网卡不切驱动情况下,可由DPDK程序直接接管物理网口或VF。
DPDK官方文档说明:
https://doc.dpdk.org/guides/nics/mlx5.html
升级网卡驱动重启后,需要重新加载IGB_UIO、VFIO驱动。
1、重新加载IGB_UIO驱动。存在报错信息。
2、加载vfio驱动。
3、切vfio驱动,查看dpdk是否接管正常。
4、挂载大页内存。
5、执行helloworld。
6、重新编译dpdk后执行helloworld。
结论:不是驱动版本问题。
验证DPDK程序自动切换功能
默认使用mlx5_core的网卡,无论是helloworld还是test-pmd测试都正常。推断CX4网卡已经不需要切驱动,可用DPDK程序直接接管(自动切换)。
不手动切换驱动,物理网口和VF用helloworld测试正常。
不手动切换驱动,物理网口和VF用test-pmd测试正常。
DPDK官方文档说明:
https://doc.dpdk.org/guides/nics/mlx5.html
结合网络相关资料分析:
1、不使用igb_uio.ko。
https://github.com/xiangp126/dpdk/blob/master/mellanox/Mellanox.md
2、启动DPDK之前,不需要为Mellanox绑定igb_uio或者uio_pci_generic等用户态驱动(https://zhuanlan.zhihu.com/p/484252751)。
3、网卡使用mlx5_core驱动之后就不再依赖内核的UIO框架,Mellanox会使用它特有的mlx5_core驱动来完成Mellanox 网卡(PCI 设备)的注册。https://tool.4xseo.com/a/2118.html
定位结论
CX4网卡使用mlx5_core驱动来完成Mellanox 网卡(PCI 设备)的注册,和华为或因特尔网卡需要切igb_uio或vfio-pci驱动有差异。现场把网卡绑定到用户态驱动igb_uio,导致igb_uio分配的bus号和mlx5_core驱动的bus号冲突,引发问题。内部环境验证,CX4网卡不切驱动情况下,可由DPDK程序直接接管物理网口或VF。
DPDK官方文档说明:
