DPDK入门学习之Ubuntu 开发环境搭建(dpdk-setup.sh)


正文

最新的DPDK版本可见DPDK官网 https://dpdk.org/ ,本文主要介绍DPDK的使用自动化(dpdk-setup.sh)方式来完成开发环境的搭建以及在虚拟机中搭建过程中所遇到一些问题和解决方法。

1.所使用的系统和软件版本

系统:Ubuntu 16.04.3 LTS 64位 [下载地址]

dpdk: 17.08.1 [下载地址]

DPDK 17.08.1 在虚拟机试验,由于网卡兼容性等问题,会使得配置好开发环境后运行各示例都有以下错误

EAL:Error reading from file descriptor

解决方法:

在解压后文件中,路径:DPDK所在文件夹/lib/librte_eal/linuxapp/igb_uio/igb_uio.c中

	/* fall back to INTX */
	case RTE_INTR_MODE_LEGACY:
		if (pci_intx_mask_supported(dev)) {
			dev_dbg(&dev->dev, "using INTX");
			udev->info.irq_flags = IRQF_SHARED | IRQF_NO_THREAD;
			udev->info.irq = dev->irq;
			udev->mode = RTE_INTR_MODE_LEGACY;
			break;
		}
		dev_notice(&dev->dev, "PCI INTX mask not supported\



修改为:
	/* fall back to INTX */
	case RTE_INTR_MODE_LEGACY:
		if (pci_intx_mask_supported(dev)||true) {
			dev_dbg(&dev->dev, "using INTX");
			udev->info.irq_flags = IRQF_SHARED | IRQF_NO_THREAD;
			udev->info.irq = dev->irq;
			udev->mode = RTE_INTR_MODE_LEGACY;
			break;
		}
		dev_notice(&dev->dev, "PCI INTX mask not supported\

2.虚拟机配置

vmware:11.1.1 build-2771112
CPU: 2个CPU,每个CPU 2个核心
内存:2GB
网卡:网卡*3  (网络连接方式:NAT 桥接 桥接)

3.DPDK版本配置环境要求

如果使用不同的dpdk版本,最好看一下官方dpdk的pdf要求,dpdk16.07要求内核•Kernel version >= 2.6.34(使用uname –r查看),glibc>=2.7,(ldd –version查看)。

4.DPDK环境搭建过程

建议首先获取root权限,root没开的话使用在编译和配置环境会出现问题,会5.所遇到的问题及解决方法中介绍
其次解压下载好的DPDK文件
tar xvJf dpdk-17.08.1.tar.xz

    4.1 配置环境变量

    
export RTE_SDK=<dpdk主目录> 
export RTE_TARGET=x86_64-native-linuxapp-gcc

      然后用source启用这几个环境变量; source  dpdk.rc
     注意:每次重启后需要重新配置环境

    4.2 利用dpdk-setup.sh进行配置 

     
sudo ./dpdk-setup.sh
      注意:此命令在dpdk-stable-17.08.1/usertools路径下运行
     运行后会出现
    Step 1: Select the DPDK environment to build
----------------------------------------------------------
[1] arm64-armv8a-linuxapp-clang
[2] arm64-armv8a-linuxapp-gcc
[3] arm64-dpaa2-linuxapp-gcc
[4] arm64-thunderx-linuxapp-gcc
[5] arm64-xgene1-linuxapp-gcc
[6] arm-armv7a-linuxapp-gcc
[7] i686-native-linuxapp-gcc
[8] i686-native-linuxapp-icc
[9] ppc_64-power8-linuxapp-gcc
[10] x86_64-native-bsdapp-clang
[11] x86_64-native-bsdapp-gcc
[12] x86_64-native-linuxapp-clang
[13] x86_64-native-linuxapp-gcc
[14] x86_64-native-linuxapp-icc
[15] x86_x32-native-linuxapp-gcc

----------------------------------------------------------
 Step 2: Setup linuxapp environment
----------------------------------------------------------
[16] Insert IGB UIO module
[17] Insert VFIO module
[18] Insert KNI module
[19] Setup hugepage mappings for non-NUMA systems
[20] Setup hugepage mappings for NUMA systems
[21] Display current Ethernet/Crypto device settings
[22] Bind Ethernet/Crypto device to IGB UIO module
[23] Bind Ethernet/Crypto device to VFIO module
[24] Setup VFIO permissions

----------------------------------------------------------
 Step 3: Run test application for linuxapp environment
----------------------------------------------------------
[25] Run test application ($RTE_TARGET/app/test)
[26] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)

----------------------------------------------------------
 Step 4: Other tools
----------------------------------------------------------
[27] List hugepage info from /proc/meminfo

----------------------------------------------------------
 Step 5: Uninstall and system cleanup
----------------------------------------------------------
[28] Unbind devices from IGB UIO or VFIO driver
[29] Remove IGB UIO module
[30] Remove VFIO module
[31] Remove KNI module
[32] Remove hugepage mappings

[33] Exit Script

Option: 
注意:不同版本的dpdk,配置目录不同,要仔细查看内容所对应的数字是多少
(1)这里选择13(x86_64-native-linuxapp-gcc),进行编译

(2)编译完成后,选择16, 插入igb_uio模块

(3)选择19,配置大页内存(非NUMA),选择后会提示你选择页数,输入128

       选择27可以查看大页的情况

(4)绑定网卡,选择21,查看当前网卡状况

     若Active,则33退出,输入指令
    
sudo ifconfig ens38 down
sudo ifconfig ens39 down
重新进入配置目录,选择22,输入指令绑定
02:06.0
02:07.0

并选择21重新查看网卡状况

注意 要绑定两张网卡
(5) 选择26, 运行testpmd测试程序

如果没有问题,回车后出现以下输出


输入start,开始转发

输入stop,停止包转发,显示统计信息

5.所遇到的问题及解决方法

 问题1:选择13编译失败报错

解决方法:sudo ./dpdk-setup.sh 或者 su 获得root权限在运行
问题2:选择13编译失败报错,显示找不到numa.h
解决办法:sudo apt-get install libnuma-dev
问题3:ERROR: Target does not have the DPDK UIO Kernel Module.  please try to rebuild target.
解决办法:没有插入igb_uio模块
问题4:绑定网卡报错

解决方法:这是由于网卡被占用,需要sudo ifconfig   ens38(具体) down 在重新进行绑定
问题5:无法运行26选项的testpmd测试

解决方法:这是提到的为什么第一步要获得root权限,一般用户下root设置环境变量时会出问题的。其次在设置环境变量时,请自己编写,复制粘贴有时仍会出错。
问题6:cause:creation of mbuf pool for socket 0 failed can not allocate memory

解决办法:重新分配大页内存大小,给予足够大,即可解决问题
至于25测试仍然无法运行,显示command not found 还没有解决














  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 首先,如果您想要在 DPDK 上使用自定义的编译器,您需要确保 DPDK 支持使用该编译器。您可以在 DPDK 文档中找到有关受支持的编译器的信息。 如果确实支持使用您想要使用的编译器,您可以在运行 dpdk-setup.sh 脚本时添加编译器。您可以使用 `--cc=<compiler>` 参数指定编译器。例如: ``` ./dpdk-setup.sh --cc=gcc ``` 这样,DPDK 将使用 GCC 编译器来编译。 请注意,在某些情况下,还可能需要使用其他参数来正确配置 DPDK 以使用您的编译器。您可以使用 `./dpdk-setup.sh --help` 命令查看有关可用参数的更多信息。 ### 回答2: 要在dpdk-setup.sh中添加编译器,可以按照以下步骤进行操作: 第一步,打开dpdk-setup.sh文件,查找并定位到编译器相关的部分。一般情况下,这部分代码会包括定义编译器变量以及相关的设置和选项。 第二步,确定要添加的编译器。根据需要,可以选择GCC、Clang或其他编译器。确保已经在系统中安装了选定的编译器。 第三步,添加编译器变量。在适当的位置,添加类似以下代码的语句,将编译器的路径赋值给相应的变量: ``` export CC=/usr/bin/gcc ``` 其中,`/usr/bin/gcc`是编译器的路径,可以根据实际情况进行调整。 第四步,保存并关闭文件。 第五步,运行dpdk-setup.sh脚本。在终端中进入dpdk源代码目录,并运行以下命令: ``` ./dpdk-setup.sh ``` 脚本会加载并使用新定义的编译器变量进行编译器设置。 通过以上步骤,就可以成功将编译器添加到dpdk-setup.sh中,以便在编译DPDK时使用指定的编译器。 ### 回答3: 在使用dpdk-setup.sh脚本添加编译器时,需要按照下面的步骤进行操作: 1. 首先,确保您已经安装了您想要添加的编译器,并将其路径添加到环境变量中,以便在任何位置都能够访问。 2. 打开终端,并切换到dpdk目录,例如cd /path/to/dpdk。 3. 运行dpdk-setup.sh脚本,通过输入./dpdk-setup.sh命令进行启动。 4. 在dpdk-setup.sh脚本的菜单中,选择“3) Set RTE_TARGET and Compiler”,并按下Enter键。 5. 接下来,该脚本将列出当前已安装的编译器。如果您要添加的编译器未列出,请选择“c”来继续添加。 6. 在下一个菜单中,选择“1) Add a new compiler”选项,并按下Enter键。 7. 输入您要添加的编译器名称,例如gcc或clang,并按下Enter键。 8. 然后,指定编译器的路径,例如/usr/bin/gcc或/usr/bin/clang,并按下Enter键。 9. 最后,脚本将提示您是否要将该编译器设置为默认编译器。选择“y”将其设置为默认编译器,选择“n”将保留当前的默认编译器设置。 10. 添加编译器后,脚本将显示更新的编译器列表,并返回主菜单。 通过以上步骤,您应该能够成功添加编译器到dpdk-setup.sh脚本中,并使用新添加的编译器进行编译操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值