• dpdk环境搭建


    一、首先我们需要准备一个物理机或者一个虚拟机。
    物理机:
    需要一个高性能的网卡跑dpdk和一个普通网卡进行网络通信,机器安装Ubuntu16.04.
    虚拟机:
    使用vnware安装Ubuntu16.04,配置一个多队列网卡和一个普通网卡。

    二、虚拟机配置
    如果使用物理机,我们不需要做任何配置,只需要安装Ubuntu16.04即可。如果没有物理机,我们就需要使用vmware安装Ubuntu 16.04,并且进行下面的配置。
    1.添加一个多队列网卡
    在这里插入图片描述
    2.修改新增的网卡类型
    修改虚拟机所在的目录中的vmx文件。
    修改下面的参数:

    ethernet1.virtualDev = "e1000"
    
    • 1

    改为

    ethernet1.virtualDev = "vmxnet3"
    
    • 1

    使得这个网卡为高性能的网卡。

    3.修改虚拟机网卡名字
    我们要修改ens33网卡名为eth0,需要修改/etc/default/grub文件,在GRUB_CMDLINE_LINUX参数后面添加net.ifnames=0 biosdevname=0:

    GRUB_CMDLINE_LINUX="find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US net.ifnames=0 biosdevname=0"
    
    • 1

    然后执行下面的命令:

    sudo grub-mkconfig -o /boot/grub/grub.cfg
    
    • 1

    4.重启

    5.查看网卡信息:
    在这里插入图片描述
    我们可以看到有两个网卡了,一个普通网卡eth1和一个多队列网卡eth0,我们可以看到多队列网卡eth0有8个接受队列。

    三、dpdk配置内存巨型页
    Ubuntu16.04支持内存巨型页,但是还是要我们修改启动参数,设置巨型页大小和数量,设置方法是修改linux启动参数,我们需要修改/etc/default/grub文件的GRUB_CMDLINE_LINUX参数,添加default_hugepages=1G hugepagesz=2M hugepages=1024

    GRUB_CMDLINE_LINUX="find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US net.ifnames=0 biosdevname=0 default_hugepages=1G hugepagesz=2M hugepages=1024"
    
    • 1

    然后执行下面的命令:

    sudo grub-mkconfig -o /boot/grub/grub.cfg
    
    • 1

    再重启就可以了。

    四、dpkg源代码下载和编译。
    1.下载源代码
    我们dpdk官方网站上下载dpdk源代码,链接在这里,随便挑选版本,不同版本直接子系统接口会有差异,建议选择 dpdk 19.08.2。

    2.解压源代码
    我们把压缩包放到/home/jian/share/目录中,解压后得到/home/jian/share/dpdk-stable-19.08.2的源代码。

    3.安装编译环境

    sudo apt-get install libnuma-dev
    
    • 1

    4.编译工具链
    dpdk的源代码中自带的脚本来编译工具链,我们在/home/jian/share/dpdk-stable-19.08.2目录中执行下面的脚本:

    ./usertools/dpdk-setup.sh
    
    • 1

    然后选择39,具体log看下面:

    jian@ubuntu:~/share/dpdk-stable-19.08.2$ ./usertools/dpdk-setup.sh 
    ------------------------------------------------------------------------------
     RTE_SDK exported as /home/jian/share/dpdk-stable-19.08.2
    ------------------------------------------------------------------------------
    ----------------------------------------------------------
     Step 1: Select the DPDK environment to build
    ----------------------------------------------------------
    [1] arm64-armada-linuxapp-gcc
    [2] arm64-armada-linux-gcc
    [3] arm64-armv8a-linuxapp-clang
    [4] arm64-armv8a-linuxapp-gcc
    [5] arm64-armv8a-linux-clang
    [6] arm64-armv8a-linux-gcc
    [7] arm64-bluefield-linuxapp-gcc
    [8] arm64-bluefield-linux-gcc
    [9] arm64-dpaa2-linuxapp-gcc
    [10] arm64-dpaa2-linux-gcc
    [11] arm64-dpaa-linuxapp-gcc
    [12] arm64-dpaa-linux-gcc
    [13] arm64-octeontx2-linuxapp-gcc
    [14] arm64-octeontx2-linux-gcc
    [15] arm64-stingray-linuxapp-gcc
    [16] arm64-stingray-linux-gcc
    [17] arm64-thunderx2-linuxapp-gcc
    [18] arm64-thunderx2-linux-gcc
    [19] arm64-thunderx-linuxapp-gcc
    [20] arm64-thunderx-linux-gcc
    [21] arm64-xgene1-linuxapp-gcc
    [22] arm64-xgene1-linux-gcc
    [23] arm-armv7a-linuxapp-gcc
    [24] arm-armv7a-linux-gcc
    [25] i686-native-linuxapp-gcc
    [26] i686-native-linuxapp-icc
    [27] i686-native-linux-gcc
    [28] i686-native-linux-icc
    [29] ppc_64-power8-linuxapp-gcc
    [30] ppc_64-power8-linux-gcc
    [31] x86_64-native-bsdapp-clang
    [32] x86_64-native-bsdapp-gcc
    [33] x86_64-native-freebsd-clang
    [34] x86_64-native-freebsd-gcc
    [35] x86_64-native-linuxapp-clang
    [36] x86_64-native-linuxapp-gcc
    [37] x86_64-native-linuxapp-icc
    [38] x86_64-native-linux-clang
    [39] x86_64-native-linux-gcc
    [40] x86_64-native-linux-icc
    [41] x86_x32-native-linuxapp-gcc
    [42] x86_x32-native-linux-gcc
    
    ----------------------------------------------------------
     Step 2: Setup linux environment
    ----------------------------------------------------------
    [43] Insert IGB UIO module
    [44] Insert VFIO module
    [45] Insert KNI module
    [46] Setup hugepage mappings for non-NUMA systems
    [47] Setup hugepage mappings for NUMA systems
    [48] Display current Ethernet/Baseband/Crypto device settings
    [49] Bind Ethernet/Baseband/Crypto device to IGB UIO module
    [50] Bind Ethernet/Baseband/Crypto device to VFIO module
    [51] Setup VFIO permissions
    
    ----------------------------------------------------------
     Step 3: Run test application for linux environment
    ----------------------------------------------------------
    [52] Run test application ($RTE_TARGET/app/test)
    [53] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)
    
    ----------------------------------------------------------
     Step 4: Other tools
    ----------------------------------------------------------
    [54] List hugepage info from /proc/meminfo
    
    ----------------------------------------------------------
     Step 5: Uninstall and system cleanup
    ----------------------------------------------------------
    [55] Unbind devices from IGB UIO or VFIO driver
    [56] Remove IGB UIO module
    [57] Remove VFIO module
    [58] Remove KNI module
    [59] Remove hugepage mappings
    
    [60] Exit Script
    
    Option: 39
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86

    编译成功则如下图所示:
    在这里插入图片描述

    5.设置dpdk的环境变量
    上面编译成功之后需要退出脚本,然后执行下面的命令设置环境变量:

    export RTE_SDK=/home/jian/share/dpdk-stable-19.08.2
    export RTE_TARGET=x86_64-native-linux-gcc
    
    • 1
    • 2

    6.禁止eth0
    由于我们的多队列网卡是eth0,所以接下来我么都是操作eth0.
    我们先使用下面的命令把eth0禁止:

    sudo ifconfig eth0 down
    
    • 1

    7.igb_uio模块
    设置完dpdk环境变量和禁止eth0后,我们再次执行脚本插入igb_uio模块:

    ./usertools/dpdk-setup.sh
    
    • 1

    然后选择43,具体log看下面:
    在这里插入图片描述
    插入igb_uio模块后,我们选择49绑定igb_uio模块到eth0,我们输入我们的PCI地址:0000:03:00:0,就可以成功绑定我们的网卡到igb_uio模块了,详细log如图所示:
    在这里插入图片描述

    8.运行testpmd程序
    为了测试我们dpdk环境是否ok,我们尝试运行一下dpdk自带的测试程序testpmd。
    option我们选择53,然后bitmask设置为7,运行成功则如下图所示:
    在这里插入图片描述
    这时候我们可以输入指令 show port info 0 查看我们的接口信息:
    在这里插入图片描述

    9.运行第一个dpdk程序
    dpdk的源代码有很多例子程序,都放在example目录中,其中有个最简单的程序helloworld,我们进入example/helloworld中,直接make,可以编译出helloworld程序。最后我们使用root权限执行,结果如下图所示:
    在这里插入图片描述

    到此为止,我们的dpdk环境已经准备好了。下次我们尝试自己编写一个dpdk程序,88!

  • 相关阅读:
    视频格式说明
    Dijkstra算法——单源最短路径查找
    overleaf在线编辑工具使用教程
    【无标题】
    如何合理估算 Java 线程池大小
    $.ajax异步请求总结
    3.数学公式-方程分组共享编号
    大数据培训CombineTextInputFormat案例实操
    ssm+vue基于微信小程序的捷邻生活便利购物超市商城系统#毕业设计
    stm32实现hid鼠标
  • 原文地址:https://blog.csdn.net/sinat_22338935/article/details/125520351