NVIDIA BlueField-2 DPU和DPDK开发入门指南

本文详细介绍了DPDK在DOCA软件框架中的作用,以及如何将dpdk-testpmd、dpdk-l2fwd和dpdk-pktgen三个DPDK应用程序迁移到NVIDIABlueField-2DPU上运行,用于网络功能测试和性能压测。文章提供了环境配置、程序运行和端口绑定等具体步骤,并强调了DPDK在DPU开发中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DOCA与DPDK的关系

DPDK作为DOCA软件框架重要的组成部分,几乎在所有DOCA APP中都会出现,并且占有非常大的比重。因此,除了可以根据DOCA SDK以及提供的示例进行网络相关功能的开发,也可以直接用DPDK API和相关示例进行开发。本人理解的两者区别如下:
1. DPDK是DOCA的功能子集,DOCA包含了更丰富的功能和加速特性;
2. 如果设备能够运行DOCA APP,则一定可以运行DPDK APP,反之则不一定;

综上,对于熟悉DPDK的开发者来说,无论是利用DOCA开发还是利用DPDK进行开发都会相对容易很多。因此,特别建议初学者先学会DPDK开发再上手DOCA开发。本文将介绍如何把如下三个DPDK APP快速迁移到NVIDIA BlueField-2 DPU(以下简称bf2)上运行:

  1. dpdk-testpmd:DPDK中非常重要的测试工具,主要功能包括快速配置端口转发和下发流规则;
  2. dpdk-l2fwd:DPDK中最简单的转发示例程序,很多APP都可以在此基础上进行开发,进而避免“造轮子”、“从零开始”;
  3. dpdk-pktgen:非kernel版本的pktgen,能够更快速的生成、发送和接收报文。特别是在DPU Arm上进行对比时,DPDK版本的pktgen效率相对kernel版本的pktgen提升了许多。提起该工具旨在方便对DPU进行网络性能压测。

迁移环境

  • bf2 运行在嵌入式模式(Embedded CPU Function Ownership Mode)下,即默认模式;
  • DOCA 版本为DOCA_1.4.0;
  • 网络拓扑:
    在这里插入图片描述
    :如果只有一块bf2且没有光模块,也可以在如下拓扑中用VF+VM进行迁移和压测,VF的申请方式和Mellanox CX系列网卡一致,不再赘述,唯一区别是代表口下沉到bf2的Arm子系统中。
    在这里插入图片描述

运行dpdk-testpmd

① DOCA默认集成DPDK(无源码,只有编译后的目录,在/opt/mellanox/dpdk下),查询默认版本的DPDK版本号:

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/mellanox/dpdk/lib/aarch64-linux-gnu/pkgconfig
pkg-config --modversion libdpdk

在这里插入图片描述
② 可执行DPDK程序在/opt/mellanox/dpdk/bin下。查询可用的dpdk端口:
在这里插入图片描述

特别注意,Mellanox的网卡无需绑定uio或者vfio驱动,即开即用,只不过在运行dpdk app时,该端口的内核网络栈无法使用;
③dpdk-testpmd同在/opt/mellanox/dpdk/bin下。在root下运行,转发pf0hpf和p0间的流量:

#关闭OVS:
/etc/init.d/openvswitch-switch stop 
#申请大页:
echo 4096 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
#运行app:
/opt/mellanox/dpdk/bin/dpdk-testpmd -a 03:00.0,representor=[0,65535] -- --nb-ports=2 --total-num-mbufs=131000  -i

在这里插入图片描述

注意

  • 检查mac是否和pf0hpf和p0对应;
  • testpmd的使用(转发和下发流规则)可在DPDK官网dpdk.org参看学习,不做赘述;
  • 可以用在宿主机上用ping和iperf等工具进行流量测试;

运行dpdk-l2fwd

①该示例的源码需要DPDK官网(dpdk.org)下载,寻找与默认版本相近的版本下载并复制到Arm中即可,该程序没有任何复杂的功能,非常适合初学者进行学习,以便深入了解bf2;

②进入源码目录,利用make编译,这里不建议使用meson+ninja进行编译;
在这里插入图片描述

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/mellanox/dpdk/lib/aarch64-linux-gnu/pkgconfig
make

③ 运行
在这里插入图片描述

注意

  • 一定要加上–no-mac-updating,一定要加上–no-mac-updating,一定要加上–no-mac-updating,重要的事情说三遍!!!
  • -p指定了端口号(eg:3=0x0011,即绑定0号dpdk端口和1号dpdk端口),不同bf2上的pf0hpf和p0对应的dpdk端口号可能是不一样的,可以多次切换参数值并根据mac地址将端口号识别出来;

运行dpdk-pktgen

①pktgen需要再arm中编译安装新版本的DPDK,经过测试可行的DPDK版本是21.11;

#下载源码至arm,解压并进入源码目录;
meson build
ninja -C build
cd build 
ninja install(卸载:ninja uninstall)
ldconfig

注意

  • 编译可能出现类似如下问题,错误类似“找不到rxp-compiler头文件”,这个应该是其它厂商(Marvell)的驱动。修改报错目录下的meson文件,删除build目录重编即可。
    在这里插入图片描述

  • 按照如下修改drivers/regex/octeontx2/meson.build,再重编DPDK:
    修改前
    在这里插入图片描述
    修改后
    在这里插入图片描述

②安装好的版本可能和默认版本冲突,本人解决方案如下:

#使用DPDK-21.11:
mv  /opt/mellanox/dpdk  /opt/mellanox/dpdk_ 
ldconfig
#使用默认版本DPDK:
cd  dpdk-statble-21.11/build (进入编译目录)
ninja  uninstall (卸载)
mv  /opt/mellanox/dpdk_  /opt/mellanox/dpdk(还原目录)
export  PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/mellanox/dpdk/lib/aarch64-linux-gnu/pkgconfig
ldconfig
#使用时,记得检测当前环境使用的版本:
pkg-config  --modversion  libdpdk

③DPDK-21.11环境部署好后,在DPDK官网下载pktgen-21.11,最后在Arm中利用meson和ninja进行编译即可正常使用;

./pktgen -m 1024 -b 03:00.0 -- -m "[1:2].0"

在这里插入图片描述

参考文档:

  • NVIDIA BlueField-2 Ethernet DPU User Guide(硬件文档):https://docs.nvidia.com/networking/display/BlueField2DPUENUG
  • NVIDIA BLUEFIELD DPU PLATFORM OPERATING SYSTEM v3.9.2 DOCUMENTATION(软件文档):https://docs.nvidia.com/networking/display/BlueFieldDPUOSLatest
  • DOCA SDK文档:https://docs.nvidia.com/doca/sdk/index.html
  • DPDK官网:https://www.dpdk.org/
  • DPDK文档:http://core.dpdk.org/doc/archives/
  • DPDK-Pktgen文档:https://pktgen-dpdk.readthedocs.io/en/latest/
  • 原文链接:https://developer.nvidia.com/zh-cn/blog/nvidia-bluefield-2-dpu-dpdk/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值