DOCA 文档 v2.10.0

DOCA 加速 UPF 参考应用指南

本文档介绍了使用 NVIDIA® BlueField®-3 DPU 的 DOCA 加速 UPF 参考应用程序的实现,并提供了使用指南。

缩略语

定义

DN

数据网络

DPI

深度包检测

FAR

转发操作规则

gNB

下一代 NodeB

GTP-U

GPRS 隧道协议用户平面

N3

将无线接入网 (gNB) 连接到 5G 网络中的用户平面功能 (UPF) 的接口。

负责使用 GTP-U 协议传输用户数据。

N6

将用户平面功能 (UPF) 连接到外部数据网络(例如,互联网、企业网络、云服务)的接口连接,

充当 5G 网络和外部网络之间的网关。

PDR

数据包检测规则

PDU

协议数据单元

PSC

PDU 会话容器。GTP 中的扩展标头,用于 5G 核心网络中。

QER

QoS 实施规则

QoS

服务质量

RAN

无线接入网

RAP

参考应用程序

RSS

接收端扩展。一种将数据包分派到多个队列的功能。

SMF

会话管理功能

UE

用户设备

UPF

用户平面功能

URR

使用情况报告规则

WAN

广域网

加速 UPF-RAP 提供了 NVIDIA® BlueField-3® 之上 UPF 加速数据路径的参考实现。

此项目旨在供希望对其 UPF 数据平面进行硬件加速的 UPF 供应商使用。它为开发人员提供了参考实现,以及评估功能和性能的平台。重要的是要注意,此项目本身不是 UPF 实现,用户不应期望它作为功能齐全的 UPF 工作或完全符合 3GPP 标准。

硬件加速: 加速 UPF RAP 通过利用 BlueField-3 硬件加速功能,优化 RAN (gNB) 和 WAN (DN) 之间的数据流量处理。使用 DOCA Flow API,应用程序将 UPF 的特定于领域的网络管道直接编程到 BlueField-3 的硬件中,通过在硬件而不是软件中处理数据包,显着降低 CPU 开销。

双向处理(上行链路、下行链路)

  • RAN 到 DN 流(上行链路)

    • 入口:所有 N6 流量都在 BlueField-3 端口 A 上接收。

    • 处理:BlueField-3 对 N6 流量应用适当的处理,包括 GTP 封装、路由、策略实施、配额管理或任何其他基于流量特征和网络配置的相关操作。

    • 出口:处理后,BlueField-3 将 N6 流量转发到端口 B。

  • DN 到 RAN 流(下行链路)

    • 入口:所有 N3 流量都在 BlueField-3 端口 B 上接收。

    • 处理:BlueField-3 处理 N3 流量,根据核心网络的要求应用诸如 GTP 解封装、QoS 实施、用户平面策略应用或路由等操作。

    • 出口:处理后,BueField-3 将 N3 流量转发到端口 A。

此流程确保了 N6 和 N3 接口的高效和精简的流量处理和转发,从而通过清晰的流量路径实现了强大的用户平面功能。

Unidirectional_(Dual_Port)_Mode-version-30-modificationdate-1739348305313-api-v2.png

加速 UPF-RAP 旨在高效地处理和管理流量,同时结合功能、性能、可观察性和资源优化的关键功能。详细操作和功能如下

硬件加速功能

  • 速率计:可配置的速率计监控和实施 N3 和 N6 接口上的流量吞吐量。

  • 配额计数器:启用每个用户的配额管理,跟踪数据使用量与分配的限制。当超过配额时,可以应用操作(例如,限制或重定向流量)。

  • 流老化:流老化机制有效地跟踪活动流,并根据可配置的超时删除非活动流,从而确保资源效率并防止陈旧流累积。

具有硬件辅助的软件功能

  • 可配置的慢路径数据包重定向:允许配置在将流加速到硬件之前由软件处理的来自流的数据包数量,这适用于诸如 DPI 之类的用例。

  • 连接跟踪基础设施:为同一连接的 N3 和 N6 流维护共享软件上下文。

    这是通过利用对称 RSS 以面向性能的方式实现的,这确保了两个流都在同一核心上处理。

    这种方法实现了无锁数据库访问,提高了效率并降低了延迟。

  • 可调试性和遥测:实时调试计数器提供了对流级别和数据包级别操作的可见性。

加速 UPF-RAP 不会在任何端口上强制执行特定的流量类型 (N3/N6)。相反,它旨在处理任何端口上可互换的两种流量类型。

这些高级功能确保 UPF 能够以高效率、强大的可观察性和 N3 和 N6 流的最佳资源管理来满足现代网络需求。

加速 UPF-RAP 在主机系统上运行,并将加速策略编程到 BlueField-3 加速引擎中。

此加速 UPF-RAP 架构利用 DOCA Flow 通过加速 BlueField-3 转向机制内部的流处理来有效地管理 N3 和 N6 流量。

该架构旨在优化性能、降低 CPU 利用率、减少内存使用量,并通过使系统中的非活动流老化来保持高效的流扩展,从而为新添加的流腾出空间。

Application_Architecture-version-31-modificationdate-1739348467700-api-v2.png

UPF-RAP 中的主要功能

  • DOCA Flow 框架

    • 充当加速 UPF-RAP 的基础 API,支持与 BlueField-3 直接交互以进行规则(添加/删除)和计数器管理。

    • 促进高性能数据包处理、流转向和硬件加速操作。

  • 流管理逻辑

    • 数据包转发加速

      • DOCA Flow 的管道预先分配了固定大小,以包含未来的规则插入。

      • 新流由加速 UPF-RAP 识别,并通过 DOCA Flow API 加速 BlueField-3。

      • BlueField-3 处理数据包转发、特定于流的操作(例如,QoS)和遥测收集。

    • 流老化和删除

      • 使用超时和遥测反馈来监控非活动流。

      • 超过其不活动阈值的流将自动从 BlueField-3 中删除,从而释放资源。

  • 双向流量管理逻辑

    • 上行链路流量 (gNB → N3 → UPF → N6 → DN)

      • 从 RAN 接收并处理,以便与核心网络交互。

      • 通过 DOCA Flow 管理,以加速用户平面流量到 BlueField-3,以实现低延迟转发(QoS、解封装)。

    • 下行链路流量 (DN→ N6 → UPF → N3 → gNB)

      • 从 DN 接收并处理,以便交付到 RAN 或其他目的地。

      • 加速到 BlueField-3 以实现高效处理(QoS、封装)。

    • 加速 UPF-RAP 利用对称 RSS 运行多线程,从而实现以下功能

      • 在同一核心上处理 N3 和 N6 流量:对称 RSS 确保同一流的 N3 和 N6 流量都定向到同一 CPU 核心。

        这是通过以某种方式哈希数据包标头来实现的,使得属于同一流的数据包始终如一地映射到同一核心。

        这减少了上下文切换的开销并提高了缓存效率,从而带来更好的性能。

        RSS 应用于流量的 GTP 隧道和非隧道方向

      • 单个流的软件上下文:通过对称 RSS,为每个流维护单个软件上下文。这意味着同一流的 N3 和 N6 流量都在同一线程或进程中处理。

        这种统一的上下文简化了流管理,并确保与流相关的所有操作都按顺序执行,从而避免了竞争条件并减少了同步开销。

      • 无锁数据访问:为了进一步提高性能,加速 UPF-RAP 实现了无锁数据结构,用于管理流状态信息。

        这种方法最大限度地减少了争用和延迟,确保数据库操作高效执行。

      • RSS 仅适用于流的新数据包,一旦流被加速,它将由硬件处理。

SMF

SMF 是 5G 核心网络架构的关键组件。它负责管理用户会话,包括在 UE 和 DN 之间建立、修改和终止数据会话。

加速 UPF-RAP 使用 JSON 文件提供的静态 SMF 策略进行实体创建,绕过了通过 N4 接口与真实 SMF 集成的需要。基于生产的 UPF 应实施和适应 N4 接口,以便根据网络更新动态更新规则。

示例配置可以在此处找到。

加速 UPF-RAP 支持以下字段

  • PDR

字段路径

注释

createPdr.pdrId

PDR ID

createPdr.pdi.sourceInterface.type

确定数据包方向(源接口),支持的值:0(接入/DL)、2(SGi-LAN/N6-LAN)。

createPdr.pdi.localFT

定义与 PDR 匹配的数据包标头

createPdr.pdi.localFT.teid_start, createPdr.pdi.LocalFT.teid_end

定义要匹配的 GTPU TEID 范围

createPdr.pdi.localFT.ip.v4

定义要匹配的外部 IPV4 源/目标地址,具体取决于“sourceInterface”值(分别为 2 或 0)

createPdr.pdi.qfi

定义 GTPU 标头中 QFI 字段的匹配项

createPdr.pdi.userEquipment.ip.v4

定义要匹配的外部 IPV4 源/目标地址,具体取决于“sourceInterface”值(分别为 0 或 2)

createPdr.pdi.sdf.description

定义数据包匹配的标准

createPdr.farId, createPdr.urrIds, createPdr.qerIds

FAR 以及 URR 列表和 QER 列表。

  • FAR

字段路径

注释

createFar.farId

FAR ID

createFar.fp.outerHeader.ip.v4, CreateFar.fp.outerHeader.teid

定义需要添加到数据包的外部标头(外部标头创建)。

  • URR

字段路径

注释

createUrr.urrId

URR ID

createUrr.volumeQuota.totalVolume

定义总配额(以字节为单位)

  • QER

字段路径

注释

createQer.qurId

QER ID

createQer.maxBitRate.ulMBR, createQer.maxBitRate.dlMBR

定义以 1kbps 单位允许的 UL/DL 最大比特率。

createQer.qfi

标识 GTPU 标头中的 QFI 字段

SMF 策略示例

以下示例说明了典型的 SMF 策略 JSON 格式。此示例包括各种策略元素,例如 FAR、URR 和 QER。

以下 JSON 示例根据以下许可证提供

复制
已复制!
            

Copyright (c) 2025 NVIDIA CORPORATION AND AFFILIATES. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the NVIDIA CORPORATION nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TOR (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

SMF 策略

复制
已复制!
            

{ "createPdr": [ { "pdrId": 1, "pdi": { "sourceInterface": { "type": "0" }, "localFT": { "teid_start": 1073741824, "teid_end": 1073807359, "ip": { "v4": "192.168.1.1" } }, "userEquipment": { "ip": { "v4": "172.0.0.0/16" } }, "sdf": [ { "description": "permit out ip from any to assigned" } ] }, "farId": 1, "urrIds": [ 1 ], "qerIds": [ 1 ] }, { "pdrId": 2, "pdi": { "sourceInterface": { "type": "2" }, "userEquipment": { "ip": { "v4": "172.0.0.0/16" } }, "sdf": [ { "description": "permit out ip from any to assigned" } ] }, "farId": 2, "urrIds": [ 2 ], "qerIds": [ 2 ] }, { "pdrId": 3, "pdi": { "sourceInterface": { "type": "0" }, "localFT": { "teid_start": 1073741824, "teid_end": 1073807359, "ip": { "v4": "192.168.1.1" } }, "qfi": 1, "userEquipment": { "ip": { "v4": "172.0.0.0/16" } }, "sdf": [ { "description": "permit out ip from any to assigned" } ] }, "farId": 1, "urrIds": [ 1 ], "qerIds": [ 1 ] } ],   "createFar": [ { "farId": 1 }, { "farId": 2, "fp": { "outerHeader": { "ip": { "v4": "192.168.1.1" }, "teid" : 1 } } } ],   "createUrr": [ { "urrId": 1, "volumeQuota": { "totalVolume": 4000000000 } }, { "urrId": 2, "volumeQuota": { "totalVolume": 200000 } } ], "createQer": [ { "qerId": 1, "maxBitRate": { "ulMBR": "2000000000", "dlMBR": "2000000000" }, "qfi":"20" }, { "qerId": 2, "maxBitRate": { "ulMBR": "2000000000", "dlMBR": "2000000000" }, "qfi":"20" } ] }

流处理

在加速 UPF-RAP 中,从流由其第一个数据包启动的那一刻到它被加速的那一刻,该过程涉及几个关键步骤。以下是此过程的详细描述

  1. 初始数据包接收:当新流的数据包到达时,它将被转发到加速 UPF-RAP,然后应用程序识别流并应用初始数据包处理规则。

    加速 UPF-RAP 使用 PDR 来识别流并确定必要的操作,例如转发、缓冲或丢弃数据包。

  2. 硬件加速:在识别和分类流后,UPF 对 BlueField-3 进行编程以处理此流数据平面。这种硬件加速显着降低了 CPU 负载,并提高了 UPF 的整体效率。

    诸如 GTP-U 封装/解封装、流标记、QoS 实施和数据包转发之类的任务由 NIC 处理,从而提供确定性的性能和可扩展性。

  3. 加速流:该流的后续数据包将由 Bluefiled-3 HW 完全处理并转发到其目的地,而无需经过主机/UPF-RAP。

  4. 流删除:如果流在配置的非活动时间(例如 15 秒)内保持非活动状态。然后,加速 UPF-RAP 从其表中删除流,并释放相关的资源。

测试环境和设置

加速 UPF-RAP 在以下环境和设置中进行了测试。

项目

描述

测试描述

NVIDIA BlueField-3 DPU。

吞吐量和数据包速率测试,最大数据包丢失率为 0.01%。

服务器

Intel(R) Xeon(R) Platinum 8362 CPU @ 2.80GHz

DPU

Nvidia BlueField-3 P 系列 DPU 200GbE/NDR200 VPI 双端口 QSFP112;PCIe Gen5.0 x16 FHHL,带 x16 PCIe 扩展选项;启用加密;启用 SB 32GB 板载 DDR;集成 BMC。

零件编号:900-9D3B6-00CV-AAA_DK_Ax

操作系统

Ubuntu 22.04

DPU 固件

版本

32.43.1014

DPDK 版本

22.11

DOCA 版本

2.10

测试配置

1 个 NIC/DPU,2 个端口。

端口从流量生成器接收 IP 流流。

每个核心分配 1 个队列,总共 10 个核心。

端口 0 接收 RAN 流量,形式为Ether() / IP() / UDP() / GTP_U_Header() / IP() / UDP()

端口 1 接收 WAN 流量,形式为Ether() / IP() / UDP()

DPDK 设置

编译 DPDK,使用:meson ; ninja -C

命令行

./doca_upf_accel -a <PORT_0>,dv_flow_en=2 -a <PORT_1>,dv_flow_en=2 -l 0-9 -- -f <SMF_POLICY_JSON>


此应用程序利用以下 DOCA 库

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

  • NVIDIA BlueField-3 DPU

  • Ubuntu 22.04 主机 (x86)

信息

请参阅 Linux 版 DOCA 安装指南,了解有关如何安装 BlueField-3 相关软件的详细信息。

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

提示

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

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

应用程序依赖于 json-c 开源,需要安装以下内容

  • Ubuntu/Debian

    复制
    已复制!
                

    $ sudo apt install libjson-c-dev

  • CentOS/RHEL

    复制
    已复制!
                

    $ sudo yum install json-c-devel

要构建加速 UPF-RAP

复制
已复制!
            

cd /opt/mellanox/doca/applications/ meson /tmp/build -Denable_all_applications=false -Denable_upf_accel=true ninja -C /tmp/build

信息

doca_upf_accel/tmp/build/applications/upf_accel/ 下创建。

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

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

    1. enable_all_applications 设置为 false

    2. enable_upf_accel 设置为 true

  2. 执行

    复制
    已复制!
                

    cd /opt/mellanox/doca/applications/ meson /tmp/build ninja -C /tmp/build

    信息

    doca_upf_accel/tmp/build/applications/upf_accel/ 下创建。

故障排除

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

运行时先决条件

  • 加速 UPF-RAP 基于 DOCA Flow。因此,用户需要分配巨页。

复制
已复制!
            

$ echo '1024' | 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


应用程序执行

加速 UPF-RAP 以源代码形式提供,因此在执行应用程序之前需要进行编译。

  1. 应用程序使用说明

    复制
    已复制!
                

    Usage: doca_upf_accel [DPDK Flags] -- [DOCA Flags] [Program Flags]   DOCA Flags: -h, --help Print a help synopsis -v, --version Print program version information -l, --log-level Set the (numeric) log level for the program <10=DISABLE, 20=CRITICAL, 30=ERROR, 40=WARNING, 50=INFO, 60=DEBUG, 70=TRACE> --sdk-log-level Set the SDK (numeric) log level for the program <10=DISABLE, 20=CRITICAL, 30=ERROR, 40=WARNING, 50=INFO, 60=DEBUG, 70=TRACE> -j, --json <path> Parse all command flags from an input json file   Program Flags: -f, --smf-config-file-path SMF JSON definitions file path -a, --aging-time-sec Aging period in seconds -o, --dpi-packet-threshold Number of packets processed in software before accelerating to hardware, enabling DPI on initial packets

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

    注意

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

    复制
    已复制!
                

    /tmp/build/upf_accel/doca_upf_accel -- -h

  2. 用于运行应用程序的 CLI 示例

    复制
    已复制!
                

    /tmp/build/upf_accel/doca_upf_accel -a 03:00.0,dv_flow_en=2 -a 03:00.1,dv_flow_en=2 -l 0-10 -- -f <SMF_POLICY_JSON>

  3. 该应用程序还支持 config-file provided mod,其中所有命令行参数都通过 JSON 文件提供

    复制
    已复制!
                

    /tmp/build/upf_accel/doca_upf_accel --json [json_file]

    例如

    复制
    已复制!
                

    /tmp/build/upf_accel/doca_upf_accel --json upf_accel_params.json

    注意

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

命令行标志

标志类型

短标志

长标志/JSON 键

描述

JSON 内容

常规标志

h

help

打印帮助概要

N/A

v

版本

打印程序版本信息

N/A

l

log-level

设置应用程序的日志级别

  • DISABLE=10

  • CRITICAL=20

  • ERROR=30

  • WARNING=40

  • INFO=50

  • DEBUG=60

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

复制
已复制!
            

"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

程序标志

f

smf-config-file-path

SMF 策略 JSON 文件的路径,请参阅 SMF 策略示例

注意

这是一个强制性标志。

复制
已复制!
            

"smf-config-file-path": "/tmp/smf_policy.json"

a

aging-time-sec

老化时间(秒),可选;默认值为 15。

复制
已复制!
            

"aging-time-sec": 10 

o

dpi-packet-threshold

指定在加速到硬件之前在软件中处理的数据包数量,从而在初始数据包上启用 DPI。可选;默认值为 2。

复制
已复制!
            

"dpi-packet-threshold": 5

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

故障排除

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

  • /opt/mellanox/doca/applications/upf_accel/

  • /opt/mellanox/doca/applications/upf_accel/upf_accel_params.json

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