dpdk最细流程,包含虚拟机安装dpdk

1 设置巨页的方法(如果使用辅助工具安装,可以在辅助工具内设置巨页)

  • 如果使用辅助工具安装,可以在辅助工具内设置巨页
  • 如果使用辅助工具安装,请跳到2.4

1.1 设置1G巨页(在虚拟机成功,在计算平台未成功)

  1. 查看是否支持hpet,如果不支持则无输出内容,需要在BIOS中开启:grep hpet /proc/timer_list

    在这里插入图片描述

  2. 修改grub文件vim /etc/default/grub , 在GRUB_CMDLINE_LINUX中加入如下配置:

    default_hugepagesz=1G hugepagesz=1G hugepages=4
    
    • 下面是找的其他的,弄成这个,我的虚拟机就挂了
    default_hugepagesz=1G hugepagesz=1G hugepages=16 hugepagesz=2M hugepages=2048 iommu=pt intel_iommu=on isolcpus=1-15,16-31
    
    • 修改后的grub文件示例如下

      GRUB_TIMEOUT=5
      GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
      GRUB_DEFAULT=saved
      GRUB_DISABLE_SUBMENU=true
      GRUB_TERMINAL_OUTPUT="console"
      GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap default_hugepagesz=1G hugepagesz=1G hugepages=4 rhgb quiet"
      GRUB_DISABLE_RECOVERY="true"
      
  3. 编译grub配置文件 grub2-mkconfig -o /boot/grub2/grub.cfg

在这里插入图片描述

  1. 重启 reboot
  2. 查看是否设置成功cat /proc/meminfo | grep Huge

1.2 设置2mb页

  1. 查看系统当前巨页设置cat /proc/meminfo | grep Huge

在这里插入图片描述

  1. 输入lscpu查看系统架构,可以知道是numa架构,并且有4个node节点

  1. 对于NUMA结构,要显示的对每一个node节点设置巨页数量
echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
echo 1024 > /sys/devices/system/node/node2/hugepages/hugepages-2048kB/nr_hugepages
echo 1024 > /sys/devices/system/node/node3/hugepages/hugepages-2048kB/nr_hugepages

在这里插入图片描述

  1. 在 DPDK 中使用 Hugepages
    1. mkdir /mnt/huge
    2. mount -t hugetlbfs nodev /mnt/huge

2 安装过程

2.1 选择合适版本下载

  • http://core.dpdk.org/doc/archives/ 这个网址可以通过查看文档,看到不同DPDK版本对linux内核和python的要求,linux默认安装的python是2.x版本,dpdk的新版本要求python版本为3.x,所以如果仅仅学习目的,可以安装dpdk旧版本
  • 输入uname -r 查看linux内核版本

2.2 虚拟机准备(如果你不是虚拟机,请跳过)

2.2.1 网卡设置
  • vm默认只有一个虚拟网卡,为了成功运行testpmd实例,需要额外添加两个网卡

  • 打开vm,虚拟机->设置
    在这里插入图片描述

  • 最后如下所示,即已经给vm虚拟机设置了三个网卡

在这里插入图片描述

2.2.2 其他配置
  • 内存 > 1g,越大越好,因为要设置巨页
  • 核心至少为2,因为有一个会专门用于dpdk

2.3 方法1 : 源代码编译 DPDK (推荐使用内置辅助工具,请跳过2.3,直接从2.4开始)

2.4 方法2 : 使用内置工具辅助

  1. 选择DPDK 16.11.11 (LTS)版本

  2. 解压 : tar xJf dpdk-<version>.tar.xz,之后进入目录cd dpdk-<version>

  3. cd dpdk-<version>/tools

  4. 如果你是在虚拟机上安装dpdk,请额外做如下操作,由于虚拟机的网卡不支持某些中断,所以需要修改源代码,跳过pci检查

    1. cd /root/dpdk-stable-16.11.11/lib/librte_eal/linuxapp/igb_uio/
    2. vim igb_uio.c
    3. 定位到435行,找到如下代码
    case RTE_INTR_MODE_LEGACY:
        if (pci_intx_mask_supported(dev)) {
            dev_dbg(&dev->dev, "using INTX");
            udev->info.irq_flags = IRQF_SHARED;
            udev->info.irq = dev->irq;
            udev->mode = RTE_INTR_MODE_LEGACY;
            break;
        }
        dev_notice(&dev->dev, "PCI INTX mask not supported\n");
        /* fall back to no IRQ */
    
    
    • 注释三行代码成为如下
    case RTE_INTR_MODE_LEGACY:
        //if (pci_intx_mask_supported(dev)) {
            dev_dbg(&dev->dev, "using INTX");
            udev->info.irq_flags = IRQF_SHARED;
            udev->info.irq = dev->irq;
            udev->mode = RTE_INTR_MODE_LEGACY;
            break;
        //}
        //dev_notice(&dev->dev, "PCI INTX mask not supported\n");
        /* fall back to no IRQ */
    
    • 完成
  5. source dpdk-setup.sh

  6. 选择13 : [13] x86_64-native-linuxapp-gcc,输入数字13,然后摁回车,等待编译完成

在这里插入图片描述

  • 接着选择16[16] Insert IGB UIO module

  • 接着选择17[17] Insert VFIO module

  • 选择20,给NUMA结构计算机设置巨页[20] Setup hugepage mappings for NUMA systems,自己输入数字,这里我输入的是1024,输入的数字最好超过128
    在这里插入图片描述

  • 输入21可以查看当前网络设备情况[21] Display current Ethernet/Crypto device settings,可以看出,有三个网卡绑定在内核上,接下来要做的就是选取两个网卡,将其绑定到dpdk,由于ens33是active状态,所以这里选择ens37和ens38

    • 绑定两个网卡是由于在运行testpmd的时候,必须有偶数个端口,也就是至少两个网卡才可以

在这里插入图片描述

  • 之后输入33退出,接下来要进行的步骤是将网卡绑定到dpdk上,但是为了,将来解绑网卡后,将网卡方便的绑回内核,要提前记录下网卡的信息

    1. 输入ifconfig查看网卡名称,可以看到有三个因特尔网卡,ens33,ens37,ens38
      在这里插入图片描述

    2. 我们计划将ens37和ens38绑定到dpdk上,所以要提前记录这两个网卡的信息,输入ethtool -i ens37

      在这里插入图片描述

      driver: e1000
      version: 7.3.21-k8-NAPI
      firmware-version:
      expansion-rom-version:
      bus-info: 0000:02:05.0
      supports-statistics: yes
      supports-test: yes
      supports-eeprom-access: yes
      supports-register-dump: yes
      supports-priv-flags: no
      
    3. 其中driver: e1000即为ens37网卡驱动类型。相关的,还有ixgbe、igbe、i40e等驱动类型。这里要记录驱动类型driver: e1000和对应的pci地址bus-info:0000:02:05.0这两条信息

    4. 之后就可以继续绑定网卡,等待之后解绑网卡后,将网卡绑定回内核的时候,需要参考这里记录的信息

  • 再次进入source dpdk-setup.sh中,选择[22] Bind Ethernet/Crypto device to IGB UIO module

    在这里插入图片描述

  • 绑定两个网卡,之后输入21可以查看如下情况,表明已经将两个网卡绑定到dpdk

    在这里插入图片描述

3 运行实例

  • 运行实例之前先配置环境变量

    • 进入实例目录/root/dpdk-stable-16.11.11/examples/helloworld

    • 配置环境变量export RTE_SDK=/root/dpdk-stable-16.11.11 export RTE_TARGET=x86_64-native-linuxapp-gcc

3.1 运行helloworld

  • 输入cd examples/helloworld/

  • 输入make

    在这里插入图片描述

  • cd /root/dpdk-stable-16.11.11/examples/helloworld/build/app

  • ./helloworld -c f -n 4

    在这里插入图片描述

3.2 运行testpmd

  • cd /root/dpdk-stable-16.11.11/tools/

  • source dpdk-setup.sh

  • 选择[26] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)

    在这里插入图片描述
    在这里插入图片描述

  • 输入stop结束,并且可以看到收发包情况

    在这里插入图片描述

  • 输入quit,推出命令行模式
    在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值