RecoNIC 入门:SmartNIC 上支持 RDMA 的计算卸载-FPGA-智能网卡-AMD-Xilinx

摘要

当今的数据中心由数千台网络连接的主机组成,每台主机都配有 CPU 和 GPU 和 FPGA 等加速器。 这些主机还包含以 100Gb/s 或更高速度运行的网络接口卡 (NIC),用于相互通信。 我们提出了 RecoNIC,这是一种基于 FPGA、支持 RDMA 的 SmartNIC 平台,旨在通过使网络数据尽可能接近计算来加速计算,同时最大限度地减少与数据副本(在以 CPU 为中心的加速器系统中)相关的开销。 由于 RDMA 是用于改善数据中心工作负载通信的事实上的传输层协议,因此 RecoNIC 包含一个用于高吞吐量和低延迟数据传输的 RDMA 卸载引擎。 开发人员可以在 RecoNIC 的可编程计算模块中灵活地使用 RTL、HLS 或 Vitis Networking P4 来设计加速器。 这些计算块可以通过 RDMA 卸载引擎访问主机内存以及远程对等点中的内存。 此外,RDMA 卸载引擎由主机和计算块共享,这使得 RecoNIC 成为一个非常灵活的平台。 最后,我们为研究社区开源了 RecoNIC,以便能够对基于 RDMA 的应用程序和用例进行实验

整体架构:

1.简介

为了满足数据和工作负载/应用程序的爆炸性增长,当今的数据中心由大量网络连接的主机组成,每个主机都具有多核 CPU 和 ASIC、FPGA 和/或 GPU 形式的加速器。 这些主机通过网络接口卡 (NIC) 相互通信。 短短几年内,数据中心网络吞吐量激增了 100 多倍,从 1GbE 提升到 100GbE 甚至更高。 这种显着的增长远远超过了 CPU 在计算能力方面的发展。 在如此高的带宽下,传统上依赖 CPU 进行网络处理和数据传输会导致 CPU 利用率提高,导致延迟更长、吞吐量降低,并增加向客户提供数据中心服务的成本 [1]。 这导致了 SmartNIC 技术的出现 [1]、[4],它将网络功能从主机 CPU 卸载到 SmartNIC 上。 在该数据中心架构中,SmartNIC 发挥着至关重要的作用,充当中间枢纽,如图 1 所示。

所有网络流量都通过 SmartNIC 传输到各种计算元件,例如 CPU、GPU、FPGA 和 ASIC。 作为外部网络连接的对等点。 存在各种 SmartNIC 架构,包括基于 ASIC 的解决方案(例如,配备 RDMA 卸载和 ARM 处理器的 NVIDIA BlueField [4])、基于 P4 可编程的设计(例如 AMD Pensando [5])和基于 FPGA 的 SmartNIC(例如 AMD Alveo SN1000) [6] 和 Microsoft Azure SmartNIC [1])。 尽管与 ASIC 和 P4 可编程解决方案相比,基于 FPGA 的智能网卡的学习曲线更陡峭,但 Microsoft Azure 数据中心 [1] 已经展示了基于 FPGA 的智能网卡的大规模部署,实现了 CPU 无法实现的高性能和效率,并提供了可编程性远远超出 ASIC 所能提供的范围,而且成本合理。 在这项工作中,我们主要关注基于 FPGA 的 SmartNIC 解决方案。 数据中心工作负载的需求不断增长,包括机器学习训练/推理和高性能计算应用程序,需要具有高吞吐量、低延迟和最小 CPU 开销的高速网络。 这种需求推动了远程直接内存访问 (RDMA) 的出现,成为高速数据中心网络的事实上的标准。 RoCEv2(融合以太网上的 RDMA 版本 2)作为一种流行的 RDMA 协议脱颖而出,在 NVIDIA BlueField 等基于 ASIC 的 SmartNIC 中得到良好支持和卸载 [4]。 然而,现有的基于 FPGA 的 SmartNIC [1]、[2]、[7]、[10] 对 RDMA 卸载的支持有限。 我们推出 RecoNIC,这是一个支持 RDMA 的开源 SmartNIC 平台,具有计算加速功能,旨在实现网络附加计算加速并最大限度地减少与数据复制相关的开销。 开发人员可以灵活地在 RecoNIC 的可编程计算模块中使用 RTL、HLS 或 Vitis Networking P4 来设计加速器。 这使得无需多个数据副本即可处理网络数据,而这通常是传统以 CPU 为中心的解决方案的特征。 借助基于 FPGA 的 SmartNIC,可以将传统以 CPU 为中心的解决方案转变为以 FPGA 为中心的解决方案,将网络数据存储在 SmartNIC 的设备内存中,从而显着减少 PCIe 上的数据副本,并使数据尽可能接近计算。 计算块内执行的逻辑可以通过 RDMA 访问远程对等点中的主机和设备内存。 我们的贡献可概括如下:

• RecoNIC,一个基于 FPGA、支持 RDMA 的开源 SmartNIC 平台。

• RecoNIC 支持RDMA 和非RDMA 流量,以及流式传输和后备计算加速。 计算块允许用户通过 Vitis Networking P4、HLS 和 RTL 开发加速器。

• RDMA 卸载引擎由主机CPU(通过PCIe)和FPGA 计算块共享,这使得该平台非常灵活。 RDMA 队列对 (QP) 可以在主机或设备内存上分配

表 I:最先进的基于 FPGA 的网络和 SmartNIC 平台对比

2.相关工作

基于 FPGA 的网络解决方案可以分为两类:基于 FPGA 的网络平台和基于 FPGA 的 SmartNIC 平台。 基于 FPGA 的网络平台可以作为独立节点工作,并配备传输层卸载引擎和媒体访问控制 (MAC) 组件,使自适应加速器能够通过网络相互通信。 基于 FPGA 的 SmartNIC 充当 NIC,除了一些高级网络功能之外,还为主机 CPU 提供标准网络功能。 这两类之间的主要区别如下:

• 基于FPGA 的SmartNIC 平台可以取代传统网络接口卡 (NIC) 并提供标准 NIC 功能,例如通过软件网络堆栈处理各种协议、流量管理和虚拟交换机支持 。

• 基于FPGA 的SmartNIC 平台可以支持额外的NIC 功能,例如带或不带卸载引擎的各种协议的网络测量和遥测。

• 基于FPGA 的SmartNIC 平台能够处理第4 层及以上协议,这些协议不会作为传输层协议卸载到硬件中。

表 I 概述了现有最先进的基于 FPGA 的网络和 SmartNIC 平台。基于 FPGA 的网络平台 [13]、[14]、[15]、[16]、[17] 包括 配备传输层卸载引擎,并与通过这些引擎连接的其他FPGA板建立通信。 然而,由于缺乏软件网络堆栈,这些平台无法通过其传输层卸载引擎不支持的第 4 层协议与其他设备(FPGA 板或传统 NIC)进行通信。 相比之下,基于 FPGA 的 SmartNIC 平台 [1]、[2]、[7]、[10] 采用软件网络堆栈与其他设备通信,无论它们是 FPGA 板还是传统 NIC。 然而,大多数基于 FPGA 的 SmartNIC 平台 [2]、[7]、[10],除了由轻量级传输层卸载引擎提供支持的 Microsoft Azure SmartNIC [1] 之外,都严重依赖主机 CPU 进行处理 网络数据。 这种依赖会导致网络带宽利用率不足和高延迟,尤其是在高速网络 (>= 100Gb/s) 中。 RDMA 是机器学习和高性能计算应用中高速数据通信的事实上的标准。 值得注意的是,最先进的基于 FPGA 的 SmartNIC 平台 [1]、[2]、[7]、[10] 不支持 RDMA。 在基于 FPGA 的网络平台中,三项工作 [13]、[15]、[17] 包括 RDMA 卸载引擎。 COPA [15] 采用非 RoCEv2 RDMA 卸载引擎,而 AlveoLink [13] 和 Coyote [17] 则采用基于 HLS 的 RDMA 卸载引擎,如表 I 所示。AlveoLink 的 RDMA 引擎 [13] 具有 AXI4-Streaming 接口, 缺乏有关其支持的 RDMA 操作的全面信息。 相比之下,Coyote [17]设计了一个基于 HLS 的 RoCEv2 RDMA 的简化版本,支持 RDMA 读/写/发送操作。 与现有的基于 FPGA 的网络平台[13]、[14]、[15]、[16]、[17]相比,RecoNIC 是一个基于 FPGA 的 SmartNIC 平台,可以利用软件网络堆栈来管理跨网络的非 RDMA 流量。 各种传输层协议,而不需要所有这些协议的硬件卸载引擎。 在考虑最先进的基于 FPGA 的 SmartNIC 平台 [1]、[2]、[7]、[10] 时,RecoNIC 提供自适应 SmartNIC 基础设施,提供 RoCEv2 RDMA 卸载引擎以及后备和流式传输 用于网络附加加速的计算块

3.RECONIC 平台

RecoNIC 平台如图 2 所示,由硬件和软件元素组成。 硬件外壳(shell)包括数据包分类模块、RDMA 引擎、两个可编程计算模块(Lookaside 和流计算)以及包括 MAC 子系统和 DMA 子系统 (QDMA) 的基本 NIC 模块。 此外,它还包含粘合逻辑,例如系统/内存交叉开关和仲裁器。 RDMA 引擎负责处理 RDMA 流量,提供访问通过网络连接的远程对等点的主机或设备内存中的数据的能力。 流计算和后备计算块中实现的用户定义加速器可以直接处理设备内存中的数据,包括网络接收的数据。 在软件方面,包含三个组成部分:(1)网络驱动程序,管理 TCP/IP、UDP/IP、QUIC 和 ARP 等非 RDMA 流量; (2)内存驱动程序,促进主机和设备内存之间的无缝内存传输; (3)控制驱动程序,负责配置和控制各种硬件外壳组件。

A. RDMA 引擎 RecoNIC 利用 AMD ERNIC IP [3] 作为其 RDMA 卸载引擎,其设计符合 RoCEv2 标准。 ERNIC IP 最初用作嵌入式 RDMA 软 IP,具有由 ARM 或 MicroBlaze 处理器编排的控制操作。 RecoNIC 的独特之处在于,除了可编程计算块之外,它还可以将 ERNIC IP 与 x86 主机 CPU 接口。 RDMA 引擎具有两个用于 RDMA RX/TX 数据包的 AXI4-Streaming 输入/输出接口和五个 AXI4-MM 接口,用于检索工作队列元素、处理有效负载数据和记录完成队列条目。 此外,RDMA 引擎的配置是通过 PCIe AXI4-Lite 接口完成的。 RecoNIC 的另一个显着特征是可以灵活地在主机内存或设备内存中分配队列对 (QP) 和有效负载缓冲区。 RDMA引擎可以根据提供的地址偏移通过sys crossbar和mem crossbar访问这些QP和缓冲区。 例如,在当前实现中,设备内存(16GB DDR4)的地址范围从 0xa350000000000000 到 0xa3500003ffffffff,从而产生 12 位 MSB 掩码(即 0xa35)。 因此,任何具有 0xa35 MSB 的 QP 或有效负载缓冲区地址都将从设备内存中读取。

B. 可编程计算块 有两种类型的计算块:后备计算(LC-lookaside compute)块和流计算(SC-streaming compute)块。 LC 块专为需要内存访问(例如矩阵乘法)的加速器而定制。 相比之下,SC 块专为需要以流模式处理传入数据包的应用程序而设计,例如数据包处理和网络遥测。

1) 后备计算(LC):如图 3 所示,

LC 块具有容纳多个内核的能力。 这些内核可以使用 HLS 工具或 RTL 编码来制作。 每个内核都配有一个控制 FIFO 和一个状态 FIFO。 控制 FIFO 接收来自主机 CPU 的控制消息。 控制消息类似于调用 C 函数时的参数列表。 例如,它可以是由唯一的工作负载ID、地址参数的数量以及作为参数的那些地址组成的数据结构。 要启动内核,主机 CPU 可以通过 AXI4-Lite 接口向控制 FIFO 发送控制消息。 一旦控制 FIFO 不为空,内核就会检索控制消息并开始执行。 使用控制消息中的地址,内核可以通过 AXI4 数据接口访问主机或设备内存中存储的数据。 内核可以支持多个 AXI4 接口以增强内存访问带宽,并且可以让主机 CPU 通过 AXI4-Lite 接口访问内存映射寄存器。 执行完成后,内核通过关联的状态 FIFO 发出其状态信号。 来自状态 FIFO 的空信号可以连接到 PCIe/主机的中断系统或使用内存映射寄存器的轮询系统。 在具有中断系统的设计中,当状态 FIFO 不为空时,LC 内核会触发系统中断,让主机相应地处理中断。 在轮询系统设计中,当状态 FIFO 中的输出就绪时,LC 内核将完成信号写入专用内存映射寄存器。 主机监视专用寄存器的值并做出相应响应。 有关如何在 LC 模块中设计内核的说明,请参阅第 IV-C 节。

2)流计算(SC):SC块如图4所示,

是为可能需要以流模式处理网络流量的应用程序而设计的。 它具有用于入口和出口网络流量的 AXI4-Streaming 接口。 SC 块中的内核可以使用 Vitis Networking P4 [12]、HLS 或 RTL 编码来实现。 有关如何在 SC 块内设计内核的说明,请参阅第 IV-D 节。

C. 数据包分类 P数据包分类模块旨在将传入网络流量分类为 RDMA 和非 RDMA 流量。 RDMA 流量由 RDMA 引擎处理,而非 RDMA 流量则重定向到 QDMA 子系统,由主机上的网络驱动程序转发和处理。

D. 软件堆栈 RecoNIC 的软件堆栈如图 5 所示,

由内核空间驱动程序和用户空间 API 组成。

  1. 内核空间驱动由onic-driver和reconicmm组成。 onic-driver [9] 是一个基于 AMD qep-driver [10]、OpenNIC 驱动程序 [2] 和 libqdma [11] 的网络驱动程序,支持非 RDMA 流量。 reconic-mm 是一个字符设备驱动程序,用于处理来自主机的设备内存读/写请求。 onic-driver 在 RecoNIC 中进行了扩展,支持 QDMA AXI4-Memory-Mapped 通道,并与 renic-mm 配合使用以实现设备内存访问。
  2. 用户空间API包括内存API、控制API和RDMA API。 内存 API 用于从主机访问设备内存,而控制 API 中的计算控制和寄存器控制 API 分别设计用于 Lookaside Compute 块的控制和寄存器配置。 RDMA API 提供了利用 RDMA 引擎发送和接收 RDMA 流量所需的功能。 用户空间 API 被编译并分组为 libreconic 库。 有关用户空间 API 的更多信息,请参阅 RecoNIC 存储库的 lib 文件夹中生成的 doxygen 文档

4.示例

在本节中,我们将描述 RecoNIC 存储库中包含的几个示例:DMA 测试、RDMA 测试、网络脉动阵列矩阵乘法和数据包分类。

A. DMA 测试, DMA 测试示例评估主机和设备内存之间复制数据的功能。 当主机充当主设备时,它支持对 NIC 内存的读取和写入。 其用法如清单 1 所示。

B. RDMA 测试, RDMA 测试包含使用 libreconic API 的 RDMA 读、写、发送/接收和批量读/写示例。 这些示例遵循客户端-服务器模型,下面的描述使用工作队列元素 (WQE)、发送队列 (SQ)、接收队列 (RQ)、完成队列 (CQ) 和队列对 (QP;由 SQ、RQ 和 CQ) 术语。

• 读取(Read):客户端节点向服务器节点发出RDMA 读取请求(每个SQ 门铃响一个WQE)。 然后服务器节点回复 RDMA 读取响应数据包。

• 写入(Write):客户端节点直接向服务器节点发出RDMA 写入请求(每SQ 门铃响一个WQE)。

• 批量读取(Batch Read):客户端节点通过按突发中的请求数量(批量大小)按相应的 SQ 门铃,向服务器节点发出突发 RDMA 读取请求(每个 QP 的一组 WQE,具有相同的有效负载大小)。 然后服务器节点陆续回复RDMA读取响应数据包

• 批量写入(Batch Write):客户端节点通过按批量大小相应的 SQ 门铃,直接向服务器节点发出突发的 burst RDMA、写入请求(每个 QP 一组具有相同负载大小的 WQE)。

• 发送/接收(Send/Receive):服务器节点发布RDMA 接收请求,等待对其分配的RQ 的RDMA 发送请求。 然后,客户端节点向服务器节点发出 RDMA 发送请求。

清单 2 显示了这些场景的用法。

通过指示“-l host mem”或“-l dev mem”,可以在主机内存或设备内存中分配 QP

C. 后备计算:矩阵乘法

后备计算示例描述了网络连接矩阵乘法 (MM) 内核的工作原理。 MM 计算基于 HLS C 中的脉动数组实现(遵循 Vitis [8] 中的示例之一)。 当前的实现使用两个对等点,其中数据存储在对等点 1 上,而 MM 计算在配备 RecoNIC(充当 SmartNIC)的对等点 2 上完成。 图 6 说明了工作流程。

Peer2 从 Peer1 获取数据,执行计算,然后通知其主机 CPU。

在步骤1,主机CPU初始化系统,建立连接,并与peer1交换信息。

在步骤2和3中,CPU在分配的SQ中构建WQE,并敲响相应的SQ门铃,这将触发RecoNIC中的RDMA引擎发送读取请求。

然后,CPU 在步骤 4 中通过轮询相应的 CQ 门铃来等待来自 Peer1 的数据。

一旦RecoNIC中的RDMA引擎将数据存储在其存储器中,它就会在步骤5中通过在相应的CQ门铃上发出读取完成信号来通知主机CPU。 然后,

在步骤6中,主机CPU为后备计算块中的内核生成计算控制命令。 在内核执行过程中,CPU在步骤7中通过轮询或中断等待计算完成信号。 一旦计算完成并将结果存储在存储器中,在步骤8中,CPU就可以继续处理下一个计算请求。 在当前的 RecoNIC 实现中,主机负责所有控制操作。 然而,这些控制操作可以在未来卸载到 RecoNIC。

D. 流计算:数据包分类 shell/-数据包分类目录中的数据包分类 (PC) 块说明了流计算块的示例,其中传入的网络数据包被分类为 RDMA 和非 RDMA 数据包。 NonRDMA 流量转发到主机(通过 QDMA AXI-Streaming 接口),而 RDMA 流量由 RDMA 引擎处理。 PC块用P4语言编写,用于解析数据包标头,并生成可用于对流量进行分类的相关元数据。 数据包标头字段的一些示例包括以太网、IP、UDP、RoCEv2 基本传输标头 (BTH)、RDMA 扩展传输标头 (RETH)、ACK 扩展传输标头 (AETH)、立即数据扩展传输标头 (ImmDt) 和无效扩展传输标头 标头(IETH)。 然后,使用 Vivado 中提供的 Vitis Networking P4(简称 VitisNetP4,以前称为 SDNet)[12] 将 P4 实现转换为 RTL 实现。 然后将 RTL 实现集成到 RecoNIC 设计中。 更多信息请参考shell/数据包分类/数据包解析器.p4

5.硬件仿真

硬件仿真框架如图7所示。

该框架背后的思想是利用Python根据用户定义的JSON文件生成RDMA配置文件,并让硬件测试平台模块相应地配置RDMA引擎。 因此,用户只需更改 JSON 配置文件即可创建多个测试用例,从而形成更简单、灵活的测试和调试框架。 模拟框架通过运行testcase.py脚本支持回归测试。 激励、控制元数据和黄金数据是从 packet gen.py 脚本生成的,用户可以在其中指定自己的 JSON 文件以在 sim/testcases 目录下生成新的测试用例。 运行 testcase.py 脚本将自动读取这些生成的文件并以 AXI 流格式构建数据包以及所有与控制相关的信号(例如,RDMA 配置文件包括全局控制寄存器、内存注册、QP 和 WQE 寄存器的配置,以及 统计寄存器)。 对于周期精确仿真,该框架支持 Questa 模拟器 (questasim) 和 Vivado 模拟器 (xsim)。 有关更多信息,请尝试使用“debug”选项的模拟示例,如清单 3 所示,并检查位于 sim/testcases/your sim example 的生成文件

6.实验评估

A. 系统要求, 以下所有实验均在具有以下设置的计算机上进行测试:

• 两台服务器,每台服务器均具有通过 PCIe 3.0 x16 插槽连接的 AMD Alveo U250 FPGA 卡。

• 两个Alveo U250 卡通过100Gb/s 电缆直接连接或通过100Gb/s 交换机连接。

• Ubuntu 20.04 和 Linux 内核版本 5.4.0-125-generic

• Python >= 3.8

• Vivado 2021.2,具有 Vitis Networking P4 和 ERNIC 许可证

• Questa 模拟器 2021.3(用于模拟)

B. DMA 性能

(1)主机作为主设备访问 RecoNIC 设备内存:在此场景中,主机 CPU 通过 QDMA AXI4-MM 通道访问 FPGA 设备内存。 DMA 读取和写入的有效吞吐量分别为 ∼13.00 GB/s 和 ∼13.07 GB/s,是 PCIe 3.0 x16 插槽理论峰值吞吐量的 82.5%。

(2) RecoNIC 作为主机访问主机内存:在这种情况下,FPGA 逻辑充当主机通过 QDMA 从桥接口访问主机内存。 图 8 报告了延迟与消息大小的函数关系,其中 FPGA 需要 ∼600 ns 到 ∼964 ns 才能从主机内存访问小消息 (<= 2048 B)。

C. RDMA 读/写性能 在 RDMA 读/写测试中,我们使用两种方法:

(1) 测量每个 WQE 的性能,称为单请求;

(2) 测量一批 WQE 的平均性能,称为批量请求。 在批量请求方法中,我们创建 n 个具有相同有效负载大小的 WQE,按一次 SQ 门铃(针对最后一个 WQE)并轮询 CQ 门铃(针对多次完成),而不是为每个 WQE 串行按响 SQ 门铃并轮询 CQ 门铃 正如在单个请求中所做的那样。 我们使用n = 50,主机CPU负责WQE的准备、SQ门铃的响铃和CQ门铃的轮询。

图 9 和图 10 分别报告了 RDMA 读取吞吐量和延迟与传输数据大小的函数关系。 批量请求的吞吐量比单个请求的吞吐量要好得多,例如,当传输 16 KB 时,批量请求的吞吐量约为 89 Gb/s,而单个请求的吞吐量约为 18 Gb/s。 此外,批量请求可以达到接近线速(约 92 Gb/s),且数据大小小得多(32 KB)。 在延迟方面,当传输小数据大小(<= 4 KB)时,批量请求比单个请求可以实现近 10 倍的改进,即每次 RDMA 读取操作约 400 ns。 RDMA写操作的吞吐量和延迟分别如图11和图12所示,其趋势与RDMA读操作类似。 批量请求性能大幅提高的主要原因是 SQ 门铃响铃和 CQ 门铃轮询的开销显着降低。 由于门铃响铃和轮询是通过 PCIe AXI4-Lite 接口作为寄存器读/写操作执行的,这本身就很慢,因此每 n 个 WQE SQ 门铃响铃一次和 CQ 门铃轮询一次可显着降低总体延迟。 此外,当RDMA引擎注意到其SQ生产者索引门铃增加n时,它以流水线方式发出n个读操作。 例如,尽管 PCIe 从桥需要约 170 个周期(680 ns)才能返回第一个 WQE,但 RDMA 引擎可以每约 10 个周期(40 ns)接收后续 WQE。 因此,由 PCIe 总线引起的长延迟的开销可以通过一起发出多个 WQE 来分摊。 通过 PCIe 总线在 CQ 中写入多个条目时,会观察到类似的行为。

读吞吐
读延迟
写吞吐
写延迟

7.结论

这项工作介绍了 RecoNIC,它是一个基于 100Gb/s FPGA 的 SmartNIC 平台,配备 RDMA 卸载引擎和计算加速,并作为开源提供给更广泛的研究社区。 我们提供并解释了 RecoNIC 使用的内置示例,并讨论了用于调试和测试的硬件模拟框架。 最后,我们表征了 RecoNIC 上 RDMA 读写操作的性能。 我们希望 RecoNIC 将使研究人员能够构建有趣的网络附加加速用例

参考

项目: https://github.com/ssbandjl/RecoNIC

论文: https://arxiv.org/pdf/2312.06207

OFA2024: https://www.openfabrics.org/2024-ofa-virtual-workshop-agenda/

[1] D. Firestone、A. Putnam、S. Mundkur、D. Chiou、A. Dabagh、M.、Andrewartha、H. Angepat、V. Bhanu、A. Caulfield、E. Chung、H. K. Chandrappa、S. Chaturmohta 、M. Humphrey、J. Lavier、N. Lam、F. Liu、K. Ovtcharov、J. Padhye、G. Popuri、S. Raindel、T. Sapre、M. Shaw、G. Silva、M. Sivakumar、N Srivastava、A. Verma、Q. Zuhair、D. Bansal、D. Burger、K. Vaid、D. A. Maltz 和 A. Greenberg,“Azure 加速网络:公共云中的 SmartNIC”,第 15 届 USENIX 网络系统设计会议 和实施(NSDI'18),第 51-64 页。

[2] AMD,“AMD OpenNIC 项目”,https://github.com/Xilinx/open-nic,访问时间:2023-09-04。

[3] AMD,“AMD ERNIC”,https://www.xilinx.com/products/intellectual-property/ef-di-ernic.html,访问时间:2023 年 10 月 31 日。

[4] NVIDIA,“NVIDIA BlueField”,https://www.nvidia.com/en-sg/networking/products/data-processing-unit/,访问时间:2023 年 11 月 7 日。

[5] AMD,“AMD Pensando P4 可编程数据处理单元”,https://www.amd.com/en/accelerators/pensando,访问时间:2023-11-07。

[6] AMD,“AMD Alveo SN1000 SmartNIC”,https://www.xilinx.com/products/boards-and-kits/alveo/sn1000.html,访问时间:2023 年 11 月 7 日。

[7] A. Forencich、A. C. Snoeren、G. Porter 和 G. Papen,“Corundum:开源 100 Gbps Nic”,2020 年 IEEE 第 28 届现场可编程定制计算机 (FCCM) 国际研讨会,费耶特维尔, AR,美国,2020 年,第 38-46 页,doi:10.1109/FCCM48280.2020.00015。

[8] AMD,“Vitis Accel 示例”,https://github.com/Xilinx/Vitis Accel Examples/blob/main/cpp kernels/systolic array/src/mmult.cpp,访问时间:2023 年 10 月 12 日。

[9] Hyunok Kim,“onic-driver”,https://github.com/Hyunok-Kim/onic-driver,访问时间:2023-11-01。

[10] AMD,“qep-driver”,https://github.com/Xilinx/qep-drivers,访问时间:2023 年 11 月 1 日。

[11] AMD,“libqdma”,https://github.com/Xilinx/dma ip drivers/tree/master/QDMA/linux-kernel/driver/libqdma,访问时间:2023 年 11 月 1 日。

[12] AMD,“Vitis Networking P4”,https://www.xilinx.com/products/intellectual-property/ef-di-vitisnetp4.html,访问时间:2023 年 11 月 1 日。

[13] AMD,“AlveoLink”,https://github.com/Xilinx/AlveoLink,访问时间:2023 年 11 月 1 日。

[14] AMD,“XUP Vitis 网络示例”,https://github.com/Xilinx/xup vitis 网络示例,访问时间:2023 年 11 月 1 日。

[15] V. Krishnan、O. Serres 和 M. Blocksome,“可配置网络协议加速器 (COPA):集成网络/加速器硬件/软件框架”,2020 年 IEEE 高性能互连研讨会 (HOTI),美国新泽西州皮斯卡塔韦 ,2020 年,第 17-24 页,doi:10.1109/HOTI51249.2020.00018。

[16] Z. Wang、H. Huang、J. Zhang、F. Wu 和 G. Alonso,“FpgaNIC:用于 GPU 的基于 FPGA 的多功能 100Gb SmartNIC”,2022 年 USENIX 年度技术会议 (USENIX ATC),加利福尼亚州卡尔斯巴德 ,2022 年,第 967-986 页,isbn:978-1-939133-29-25

[17] D. Korolija、T. Roscoe 和 G. Alonso,“操作系统抽象在 FPGA 上有意义吗?”,第 14 届 USENIX 操作系统设计与实现研讨会 (OSDI 20),2020 年,第 991-1010 页,isbn: 978-1-939133-19-9

晓兵(ssbandjl)

博客: https://cloud.tencent.com/developer/user/5060293/articles | https://logread.cn | https://blog.csdn.net/ssbandjl | https://www.zhihu.com/people/ssbandjl/posts

DPU专栏

https://cloud.tencent.com/developer/column/101987

技术会友: 欢迎对DPU/智能网卡/卸载/网络,存储加速/安全隔离等技术感兴趣的朋友加入DPU技术交流群