centos7.4+vmware12安装dpdk环境

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
sudo $DPDK_DIR/examples/l2fwd/build/l2fwd -l 0-1 -w 01:00.0 – -p 0x1

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值