DPA 子系统
NVIDIA® BlueField®-3 数据路径加速器 (DPA) 是一个嵌入式子系统,旨在加速需要高性能访问特定数据包和 I/O 处理工作负载中 NIC 引擎的工作负载。与在主机上相比,利用 DPA 功能的应用程序在 DPA 上运行速度更快。与其他可编程嵌入式技术(如 FPGA)不同,DPA 通过使用 C 编程模型、多进程支持、编译器和调试器等工具链、SDK、动态应用程序加载和管理,实现了高度的可编程性。
DPA 架构针对执行数据包和 I/O 处理工作负载进行了优化。因此,DPA 子系统的特点是拥有许多可以并行工作的执行单元,以克服延迟问题(如访问主机内存)并提供更高的整体吞吐量。
下图说明了 DPA 子系统。应用程序通过 DOCA 库 (DOCA DPA) 或 DOCA 驱动程序层 (FlexIO SDK) 访问 DPA。在主机或 DPU 侧,应用程序将其代码加载到 DPA 中(显示为“运行 DPA 进程”),并为 DPA 进程分配内存、NIC 队列和更多资源以供访问。DPA 进程可以使用设备侧库来访问资源。提供的 API 支持从主机或 DPU 发出 DPA 进程的信号,以显式传递控制权或从 DPA 获取结果。

DPA 上的线程可以独立地对来自硬件的中断传入消息做出反应,从而为数据路径操作提供 DPU 或 Arm CPU 的完全绕过。
以下部分概述了 DPA 平台设计。
DPA 平台支持多个进程,每个进程都有多个线程。每个线程都可以映射到不同的执行单元以实现并行执行。进程在其自己的地址空间内运行,并且它们的执行上下文是隔离的。进程根据用户的请求动态加载和卸载。这通过平台的硬件设计(即,特权层、内存转换单元、DMA 引擎)和轻量级实时操作系统 (RTOS) 实现。RTOS 强制执行不同进程之间的特权和隔离。
RTOS 旨在依靠基于硬件的调度,为执行处理程序实现低激活延迟。RTOS 在协作运行到完成的调度模型中工作。
在协作调度下,执行处理程序可以使用执行单元而无需中断,直到它放弃它。一旦放弃,执行单元将交还给 RTOS 以调度下一个处理程序。RTOS 为处理程序设置看门狗,以防止任何处理程序不适当地垄断执行单元。
下图说明了 DPA 内存层次结构。DPA 访问的内存可以在三个级别(L1、L2 和 L3)缓存。每个执行单元都有一个私有的 L1 数据缓存。L1 代码缓存在 DPA 核心中的所有执行单元之间共享。L2 缓存由所有 DPA 核心共享。DPA 执行单元可以通过内存光圈通过加载/存储操作访问外部内存。
提取的外部内存可以直接缓存在 L1 中。DPA 缓存由 NIC 私有内存支持,该内存位于 DPU 的 DDR 内存库中。因此,地址空间是可扩展的,并且仅受 NIC 私有内存大小的限制,而 NIC 私有内存大小又仅受 DPU 的 DDR 容量的限制。

有关更多详细信息,请参阅“ 内存模型 ”。
DPA 可以向 NIC 发送和接收任何类型的数据包,并利用 BlueField DPU 上的所有加速器(例如,加密/解密、哈希计算、压缩/解压缩)。
DPA 平台具有高效的 DMA 加速器,使不同的执行单元能够并行且无争用地访问 NIC 可访问的任何内存位置。这包括由执行单元触发的同步和异步 DMA 操作。此外,NIC 可以将数据 DMA 到 DPA 缓存,以实现低延迟访问和快速处理。例如,从线路接收的数据包可以“DMA 收集”直接到 DPA 的最后一级缓存。