DOCA 文档 v2.10.0

NVIDIA DOCA IP 分片应用指南

本文档提供了基于 NVIDIA® BlueField® DPU 的 IP 分片实现。

此 IP 分片应用程序旨在高效处理 IP 分片和重组,确保非分片数据包的处理开销最小,同时保持分片数据包的高性能。

该应用程序在多核架构上运行,使用接收端缩放 (RSS) 来分配流量,并支持可配置模式以实现灵活的端口配置。

主要特性

  • IP 重组

    • 功能:应用程序根据分片标头组装在输入端口接收到的分片数据包。

    • 流程:成功重组后,完整的数据包将转发到其目标端口。

  • IP 分片

    • 功能:超过可配置最大传输单元 (MTU) 的数据包将被分片成更小的数据包。

    • 流程:生成具有正确标头的分片并转发,同时保持高效的资源利用率。

  • 透明转发:既未分片也不需要重组的数据包将直接转发,而无需额外的处理开销。

  • 内部和外部碎片处理:该应用程序支持处理内部(例如,GRE、VXLAN 等封装流量)和外部 IP 层的分片。

  • 性能优化

    • 专为使用多核处理的高吞吐量而设计。

    • 利用 RSS 在多个核心之间分配流量,确保高效的 CPU 利用率和可扩展性。

  • 可通过计数器进行调试。

  • 双操作模式

    • 双端口模式(双向):流量在端口 A ↔ B 之间双向流动。

    • 四端口模式(多端口):从端口 A ↔ 端口 B 和端口 C ↔ 端口 D 的独立单向转发。在此模式下,流量方向被隔离为每次通过两个端口。

    • 在这两种模式下,非分片或有效大小的数据包都遵循相同的路径,而无需额外的操作。

IP 分片应用程序既可以在 BlueField-3 的内核上作为 SW 运行,作为主机应用程序的底层服务,也可以在主机上运行。

操作流程

  • 数据包接收和分类

    • 流量在输入端口上接收,RSS 将流量分配到应用程序运行的核心。

    • 数据包分为三类

      • 分片(需要重组)

      • 过大(需要分片)

      • 标准数据包(直接转发)

  • 重组

    • 分片被缓冲并使用可配置的超时时间进行重组。

    • 重组完成后,将验证完整的数据包并将其转发到专用端口(取决于模式)。

  • 分片

    • 超过 MTU 的大型数据包被分片。

    • 分片使用正确的标头、序列号和大小进行准备。

  • 直接转发

    • 标准数据包以最少的处理转发

性能和可扩展性

  • 多核处理:应用程序随 CPU 核心数量水平扩展,每个核心处理流量流的子集。

  • RSS 流量分配:接收端缩放确保跨核心的最佳负载平衡。

  • 最小开销:处理逻辑针对标准数据包的低延迟处理进行了优化,同时确保高效的分片和重组操作。

调试和监控

应用程序提供实时计数器以洞察

  • 已处理的数据包。

  • 已重组或分片的分片。

  • 错误,例如不完整分片的超时。

此应用程序利用以下 DOCA 库

有关所用 DOCA 库的更多信息,请参阅相应的编程指南。

  • 需要 NVIDIA BlueField-3 DPU。

  • Ubuntu 22.04 主机 (x86)

请参阅《DOCA Linux 安装指南》以了解如何安装 BlueField 相关软件的详细信息。

DOCA 参考应用程序的安装包含应用程序的源代码以及匹配的编译说明。这允许“按原样”编译应用程序,并提供修改源代码,然后编译应用程序新版本的能力。

有关应用程序以及开发和编译技巧的更多信息,请参阅《DOCA 参考应用程序》页面。

应用程序的源代码可以在应用程序的目录下找到:/opt/mellanox/doca/applications/ip_frag/

要构建 IP 分片应用程序

cd /opt/mellanox/doca/applications/

meson /tmp/build -Denable_all_applications=false -Denable_ip_frag=true

ninja -C /tmp/build

doca_ip_frag/tmp/build/ip_frag/ 下创建。

或者,可以在 meson_options.txt 文件中设置所需的标志,而不是在编译命令行中提供它们

  1. /opt/mellanox/doca/applications/meson_options.txt 中编辑以下标志

    1. enable_all_applications 设置为 false

    2. enable_ip_frag 设置为 true

  2. 执行

    cd /opt/mellanox/doca/applications/

    meson /tmp/build

    ninja -C /tmp/build

    doca_ip_frag/tmp/build/ip_frag/ 下创建。

故障排除

如果您在编译 DOCA 应用程序时遇到任何问题,请参阅《DOCA 故障排除》。

前提条件

  • 分片应用程序基于 DOCA Flow。因此,用户需要分配大页。

    $ echo'4096' | sudo tee -a /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

    $ sudo mkdir /mnt/huge

    $ sudo mount -t hugetlbfs -o pagesize=2M nodev /mnt/huge

  • Flex Parser Profile 是一项设置,可在 NVIDIA NIC/DPU 上启用灵活的协议解析。要启用 GTP 协议支持,请将 Flex Parser Profile 设置为 3。此配置是强制性的,必须在系统中手动完成

$ sudo mlxconfig -d <pcie_address> s FLEX_PARSER_PROFILE_ENABLE=3


应用程序执行

IP 分片应用程序以源代码形式提供,因此在执行应用程序之前需要进行编译。

  1. 应用程序使用说明

    用法:doca_ip_frag [DPDK 标志] -- [DOCA 标志] [程序标志]

    DOCA 标志

    -h, --help 打印帮助概要

    -v, --version 打印程序版本信息

    -l, --log-level 设置程序的(数字)日志级别for 程序 <10=DISABLE,20=CRITICAL,30=ERROR,40=WARNING,50=INFO,60=DEBUG,70=TRACE>

    --sdk-log-level 设置 SDK(数字)日志级别for 程序 <10=DISABLE,20=CRITICAL,30=ERROR,40=WARNING,50=INFO,60=DEBUG,70=TRACE>

    -j, --json <路径> 从输入 json 文件解析所有命令标志

    程序标志

    -m, --mode Ip_frag 应用程序模式。双向模式在单个重组端口和单个分片端口之间转发数据包。多端口模式在两对重组和分片端口之间转发数据包。有关更多信息,请查阅《DOCA IP 分片应用指南》。格式:bidir, multiport

    -u, --mtu MTU 大小

    -t, --frag-aging-timeout 分片表中等待数据包重组的分片老化超时时间(毫秒)

    -s, --frag-tbl-size 分片表大小,即每个工作线程的最大并发解分片上下文数量

    -c, --mbuf-chain 启用 mbuf 链接

    有关更多信息,请参阅下面的“命令行标志”部分。

    可以使用 -h(或 --help)选项将上述用法打印到命令行

    /tmp/build/ip_frag/doca_ip_frag -- -h

  2. 在 BlueField-3 上运行应用程序的 CLI 示例

    /tmp/build/ip_frag/doca_ip_frag -a auxiliary:mlx5_core.sf.2,dv_flow_en=2,sft_en=1 -a auxiliary:mlx5_core.sf.4,dv_flow_en=2,sft_en=1 -a auxiliary:mlx5_core.sf.3,dv_flow_en=2,sft_en=1 -a auxiliary:mlx5_core.sf.5,dv_flow_en=2,sft_en=1 -l3-15 -- -l50 -m multiport

  3. 在主机上运行应用程序的 CLI 示例

    /tmp/build/ip_frag/doca_ip_frag -l0-7 -a0000:08:00.0,dv_flow_en=2 -a0000:08:00.1,dv_flow_en=2 -- -l60 -m bidir -t1000

  4. 该应用程序还支持基于 JSON 的部署模式,其中所有命令行参数都通过 JSON 文件提供

    /tmp/build/ip_frag/doca_ip_frag --json [json_file]

    例如

    /tmp/build/ip_frag/doca_ip_frag --json /opt/src/doca/applications/ip_frag/ip_frag_params.json

    在执行之前,请确保使用的 JSON 文件包含正确的配置参数,尤其是部署所需的 PCI 地址。

命令行标志

标志类型

短标志

长标志/JSON 键

描述

JSON 内容

DPDK 标志

a

devices

将设备添加到允许列表

这是一个强制性标志。

"devices": [

{

"device": "pf",

"id": "0000:08:00.0",

"hws": true,

},

{

"device": "pf",

"id": "0000:08:00.1",

"hws": true,

},

],

l

core-list

应用程序数据路径要使用的核心列表

这是一个强制性标志。

"core-list": "0-1"

通用标志

h

help

打印帮助概要

N/A

v

version

打印程序版本信息

N/A

l

log-level

设置应用程序的日志级别

  • DISABLE=10

  • CRITICAL=20

  • ERROR=30

  • WARNING=40

  • INFO=50

  • DEBUG=60

  • TRACE=70(需要使用 Trace 级别支持进行编译)

"log-level": 60

N/A

sdk-log-level

设置程序的日志级别

  • DISABLE=10

  • CRITICAL=20

  • ERROR=30

  • WARNING=40

  • INFO=50

  • DEBUG=60

  • TRACE=70

"sdk-log-level": 40

j

json

从输入 json 文件解析所有命令标志

N/A

程序标志

m

mode

执行模式:bidir, multiport

这是一个强制性标志。

"mode": "bidir"

u

mtu

用于分片的 MTU

"mtu": 1518

t

frag-aging-timeout

分片表老化超时时间(毫秒)

"frag-aging-timeout": 2

s

frag-tbl-size

分片表大小

"frag-tbl-size": 2048

c

mbuf-chain

在数据包重组时启用 mbuf 链接支持

"mbuf-chain": false

有关支持的标志和执行模式的更多信息,请参阅《DOCA Arg Parser》。

故障排除

如果您在安装或执行 DOCA 应用程序时遇到任何问题,请参阅《DOCA 故障排除》。

  • /opt/mellanox/doca/applications/ip_frag/

  • /opt/mellanox/doca/applications/ip_frag/ip_frag_params.json

© 版权所有 2025,NVIDIA。 上次更新时间:2025 年 2 月 12 日。