centos7.4+vmware12安装dpdk环境

匿名 (未验证) 提交于 2019-12-02 23:06:17

centos7.4+vmware12安装dpdk环境

编译dpdk

cd /home/ych/ wget https://fast.dpdk.org/rel/dpdk-18.05.1.tar.xz tar -xvf dpdk-18.05.1.tar.xz  export DPDK_DIR=/home/ych/dpdk-stable-18.05.1 export DPDK_TARGET=x86_64-native-linuxapp-gcc export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET export RTE_SDK=/home/ych/dpdk-stable-18.05.1 cd $DPDK_DIR sudo rm -rf x86_64-native-linuxapp-gcc install sudo make -j30 install T=$DPDK_TARGET DESTDIR=install 

绑定网口到dpdk驱动

  1. 使用vfio驱动绑定网口
#for vfio sudo modprobe vfio-pci sudo /usr/bin/chmod a+x /dev/vfio sudo /usr/bin/chmod 0666 /dev/vfio/* sudo ifconfig ens38 down sudo $DPDK_DIR/usertools/dpdk-devbind.py --bind=vfio-pci ens38 sudo $DPDK_DIR/usertools/dpdk-devbind.py --status sudo mount -t hugetlbfs none /dev/huge 
  1. 使用uio驱动绑定网口
#for igb_uio sudo modprobe uio sudo insmod $DPDK_DIR/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko  sudo ifconfig ens38 down sudo $DPDK_DIR/usertools/dpdk-devbind.py --bind=igb_uio ens38 sudo $DPDK_DIR/usertools/dpdk-devbind.py --status sudo mount -t hugetlbfs none /dev/huge 

这里的网口名ens38是在vmware配置的虚拟网口,内核驱动是e1000,dpdk驱动对支持的硬件是有要求的,具体可以查看dpdk官网 dpdk支持的硬件类型

$ethtool -i ens38 driver: e1000 version: 7.3.21-k8-NAPI firmware-version:  expansion-rom-version:  bus-info: 0000:02:06.0 supports-statistics: yes supports-test: yes supports-eeprom-access: yes supports-register-dump: yes supports-priv-flags: no 

修改dpdk源码,才能支持虚拟机的虚拟网卡

执行test程序时输出:  EAL: Error reading from file descriptor 23: Input/output error  原因:在虚拟机添加的网卡,dpdk不支持导致的。需要修改一行代码,跳过dpdk pci 检查修改代码行 lib/librte_eal/linuxapp/igb_uio/igb_uio.c  找到 	case RTE_INTR_MODE_LEGACY: 		if (pci_intx_mask_supported(udev->pdev)) { 			dev_dbg(&udev->pdev->dev, "using INTX"); 			udev->info.irq_flags = IRQF_SHARED | IRQF_NO_THREAD; 			udev->info.irq = udev->pdev->irq; 			udev->mode = RTE_INTR_MODE_LEGACY; 			break; 		} 		dev_notice(&udev->pdev->dev, "PCI INTX mask not supported\n");   这行代码,然后修改为 	case RTE_INTR_MODE_LEGACY: //		if (pci_intx_mask_supported(udev->pdev)) { 			dev_dbg(&udev->pdev->dev, "using INTX"); 			udev->info.irq_flags = IRQF_SHARED | IRQF_NO_THREAD; 			udev->info.irq = udev->pdev->irq; 			udev->mode = RTE_INTR_MODE_LEGACY; 			break; //		} //		dev_notice(&udev->pdev->dev, "PCI INTX mask not supported\n"); 

重新编译后
rmmod igb_uio

然后再
insmod igb_uio

运行dpdk的测试例子

cd $DPDK_DIR/examples/l2fwd
make

文章来源: https://blog.csdn.net/yaochuh/article/details/88218489
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!