本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
本文介紹如何在普通云服務器和彈性裸金屬服務器中使用VFIO驅動替代UIO驅動,解決DPDK應用運行異常的問題。
前提條件
已為實例設置HugePages。具體操作,請參見調整Linux實例大頁內存的方法。
已為實例安裝DPDK。關于DPDK的更多信息,請參見Data Plane Development Kit (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
在
/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應用程序的示例如下圖所示。