本文介绍如何在普通云服务器和弹性裸金属服务器中使用VFIO驱动替代UIO驱动,解决DPDK应用运行异常的问题。
前提条件
- 已为实例设置HugePages。
- 已为实例安装DPDK。
- 已远程连接实例。
背景信息
如果您在六代(g6、c6、r6等)及以后的实例规格(包含通用算力型实例)上部署DPDK应用,运行DPDK应用时可能发生异常。例如,使用pktgen-dpdk工具进行网络发包测试时可能检测不到网卡绑定的igb_uio端口,出现以下报错:
EAL: eal_parse_sysfs_value(): cannot open sysfs value /sys/bus/pci/devices/0000:00:06.0/uio/uio0/portio/port0/start
您可以使用VFIO驱动替代UIO驱动解决此类问题,在普通云服务器和弹性裸金属服务器中的操作有所不同,具体操作,请参见普通云服务器和弹性裸金属服务器。
普通云服务器
- 检查GRUB配置。
cat /proc/cmdline
确保GRUB配置中包括intel_iommu=on
,且没有iommu=pt
。
- 可选:如果没有
intel_iommu=on
,手动添加该配置。
- 打开配置文件。
- 切换到编辑模式,在GRUB_CMDLINE_LINUX中添加
intel_iommu=on
,然后保存配置文件。修改完成后的示例如下图所示。

- 应用修改后的配置。
grub2-mkconfig -o /boot/grub2/grub.cfg
- 重启实例并再次远程连接实例。
- 安装VFIO和vfio-pci驱动。
modprobe vfio && \
modprobe vfio-pci
- 配置noiommu_mode。
echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
- 查看并记录网卡设备的bus-info值。
ethtool -i ethX
请将
ethX替换为对应网卡的编号,查看eth1网卡的示例如下图所示。

- 切换到DPDK安装目录的usertools目录下,然后执行以下命令绑定网卡到vfio-pci驱动。
./dpdk-devbind.py -b vfio-pci 0000:00:06.0
说明 0000:00:06.0
为网卡的bus-info值,用于指定对应的网卡,请按实际情况替换。
绑定后可以运行
./dpdk-devbind.py --status
查看绑定状态,下方示例表示
0000:00:06.0
对应的网卡已绑定到vfio-pci驱动。

- 切换到DPDK安装目录的build/app目录下,然后根据DPDK版本执行命令运行DPDK应用程序。
说明 -w 0000:00:06.0
用于指定网卡,total-num-mbufs=2048
对应设置的HugePages大小,请按实际情况替换。
运行DPDK应用程序的示例如下图所示。

弹性裸金属服务器
- 检查GRUB配置。
cat /proc/cmdline
确保GRUB配置中包括intel_iommu=on
和iommu=pt
。
- 可选:如果没有
intel_iommu=on
和iommu=pt
,手动添加该配置。
- 打开配置文件。
- 切换到编辑模式,在GRUB_CMDLINE_LINUX中添加
intel_iommu=on
和iommu=pt
,然后保存配置文件。修改完成后的示例如下图所示。

- 应用修改后的配置。
grub2-mkconfig -o /boot/grub2/grub.cfg
- 重启实例并再次远程连接实例。
- 安装VFIO和vfio-pci驱动。
modprobe vfio && \
modprobe vfio-pci
- 配置noiommu_mode。
echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
- 查看并记录网卡设备的bus-info值。
ethtool -i ethX
请将
ethX替换为对应网卡的编号,查看eth1网卡的示例如下图所示。

- 切换到DPDK安装目录的usertools目录下,然后执行以下命令绑定网卡到vfio-pci驱动。
./dpdk-devbind.py -b vfio-pci 0000:b7:00.0
说明 0000:b7:00.0
为网卡的bus-info值,用于指定对应的网卡,请按实际情况替换。
绑定后可以运行./dpdk-devbind.py --status
查看绑定状态,下方示例表示0000:b7:00.0
对应的网卡已绑定到vfio-pci驱动。
- 切换到DPDK安装目录的build/app目录下,然后根据DPDK版本执行命令运行DPDK应用程序。
说明 0000:b7:00.0
用于指定网卡,total-num-mbufs=2048
对应设置的HugePages大小,请按实际情况替换。
运行DPDK应用程序的示例如下图所示。