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 流量分配:接收端缩放确保跨核心的最佳负载平衡。
最小开销:处理逻辑针对标准数据包的低延迟处理进行了优化,同时确保高效的分片和重组操作。
调试和监控
应用程序提供实时计数器以洞察
已处理的数据包。
已重组或分片的分片。
错误,例如不完整分片的超时。
需要 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
文件中设置所需的标志,而不是在编译命令行中提供它们
在
/opt/mellanox/doca/applications/meson_options.txt
中编辑以下标志将
enable_all_applications
设置为false
将
enable_ip_frag
设置为true
执行
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 分片应用程序以源代码形式提供,因此在执行应用程序之前需要进行编译。
应用程序使用说明
用法: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
在 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
在主机上运行应用程序的 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
该应用程序还支持基于 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 标志 |
|
| 将设备添加到允许列表 这是一个强制性标志。 |
| |
|
| 应用程序数据路径要使用的核心列表 这是一个强制性标志。 |
| ||
通用标志 |
|
| 打印帮助概要 | N/A | |
|
| 打印程序版本信息 | N/A | ||
|
| 设置应用程序的日志级别
|
| ||
N/A |
| 设置程序的日志级别
|
| ||
|
| 从输入 json 文件解析所有命令标志 | N/A | ||
程序标志 |
|
| 执行模式:bidir, multiport 这是一个强制性标志。 |
| |
|
| 用于分片的 MTU |
| ||
|
| 分片表老化超时时间(毫秒) |
| ||
|
| 分片表大小 |
| ||
|
| 在数据包重组时启用 mbuf 链接支持 |
|
有关支持的标志和执行模式的更多信息,请参阅《DOCA Arg Parser》。
故障排除
如果您在安装或执行 DOCA 应用程序时遇到任何问题,请参阅《DOCA 故障排除》。
/opt/mellanox/doca/applications/ip_frag/
/opt/mellanox/doca/applications/ip_frag/ip_frag_params.json