本文介绍如何在普通云服务器和弹性裸金属服务器中使用VFIO驱动替代UIO驱动,解决DPDK应用运行异常的问题。
前提条件
-
已为实例设置HugePages。具体操作,请参见调整Linux实例大页内存的方法。
-
已为实例安装DPDK。关于DPDK的更多信息,请参见数据平面开发套件(DPDK)。
背景信息
如果您在六代(g6、c6、r6等)及以后的实例规格(包含通用算力型实例)上部署DPDK应用,运行DPDK应用时可能发生异常。例如,使用pktgen-dpdk工具进行网络发包测试时可能检测不到网卡绑定的igb_uio端口,出现以下报错时,您可以使用VFIO驱动替代UIO驱动解决此类问题。
EAL: eal_parse_sysfs_value(): cannot open sysfs value /sys/bus/pci/devices/0000:00:06.0/uio/uio0/portio/port0/start
操作步骤
-
远程连接普通云服务器和弹性裸金属服务器。
具体操作,请参见通过密码或密钥认证登录Linux实例。
-
检查GRUB配置。
cat /proc/cmdline
-
如果GRUB配置中包括
intel_iommu=on
,且没有iommu=pt
,请执行步骤4。 -
如果是其他情况,需要添加
intel_iommu=on
并删除iommu=pt
,请执行步骤3。如下图所示,GRUB配置中没有
intel_iommu=on
,也没有iommu=pt
,需要添加intel_iommu=on
。
-
在
/etc/default/grub
配置文件中添加intel_iommu=on
。-
打开配置文件。
sudo vim /etc/default/grub
-
按
i
切换到编辑模式,在GRUB_CMDLINE_LINUX中添加intel_iommu=on
,然后保存配置文件。修改完成后的示例如下图所示。
-
应用修改后的配置。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
执行以下命令,重启实例并再次远程连接实例。
reboot
警告 重启实例会造成您的实例停止工作,可能导致业务中断,建议您在非业务高峰期时执行该操作。
-
安装VFIO和VFIO-PCI驱动。
sudo modprobe vfio && \ sudo modprobe vfio-pci
-
配置noiommu_mode。
sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode'
-
查看并记录网卡设备的bus-info值。
ethtool -i ethX
请将ethX替换为对应网卡的编号,查看eth1网卡的示例如下图所示。
-
切换到DPDK安装目录的usertools目录下,然后执行以下命令绑定网卡到vfio-pci驱动。
sudo ./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应用程序。-
DPDK 18.02及更高版本
sudo ./testpmd -w 0000:00:06.0 -c 0x3 -- --total-num-mbufs=2048 -ai
-
低于DPDK 18.02的版本
sudo ./testpmd -w 0000:00:06.0 -c 0x3 -- --total-num-mbufs=2048 --disable-hw-vlan -ai
说明
-w 0000:00:06.0
用于指定网卡,total-num-mbufs=2048
对应设置的HugePages大小,请按实际情况替换。运行DPDK应用程序的示例如下图所示。
-
关于阿里云ecs服务器的内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
本文来自投稿,不代表新手站长_郑州云淘科技有限公司立场,如若转载,请注明出处:https://www.cnzhanzhang.com/9279.html