有三种方法可以开发FPGA增强型智能网卡设计。第一种方法是简单地将FPGA连接到现有的网卡。另一种方法是设计下一代智能网卡ASIC,并在该芯片上集成了一个FPGA阵列。第三种方法是在智能网卡ASIC的设计中增加一个高速的芯片到芯片互连,并开发一个连接到智能网卡ASIC的FPGA chiplet合封芯片。这三种设计方法各有优缺点。
在现有网卡上基于FPGA增强型智能网卡设计可带来确保兼容性的优势。现有驱动程序、API和接口协议对于现有功能将保持不变,因为它们是在现有网卡上实现的。现有API和驱动程序的扩展只需要在附加的FPGA中去实现功能扩展而已。
这种方法的缺点来自一定程度的结构性。首先,如果现有的设计缺少为包括FPGA在内的扩展芯片提供的任何接口,那么FPGA将需要直接连接到主机接口总线和与网卡并行的以太网端口。如果设计中确实具有一个用于外部加速器的接口,那么该接口可能会对FPGA必须处理的大量以太网数据包流量造成带宽瓶颈。
为了获得最佳性能,网卡组件和FPGA应该位于同一块芯片上。这种方法需要嵌入式FPGA(eFPGA)。将eFPGA集成到网卡中可以最大限度地提高FPGA功能域与网卡其余部分之间的可用带宽,从而加快从直接的、芯片上的连接到eFPGA的传输速率。
一种中间设计方法涉及到对智能网卡ASIC的重新定义。在这种设计中,增加了一个高速的芯片到芯片接口,从而将ASIC连接到FPGA芯片上;然后将这种组合解决方案合并到多芯片合封模块(MCM)中。这种方法的优点是只需要对智能网卡ASIC进行最小的更改,从而降低设计风险。
这种基于多芯片合封组合的设计方法还为智能网卡的设计引入了删除选项的可能性,该选项可以以芯片或电路板形态提供,也可以加上或者不加不同价位的FPGA。这种方法的缺点是MCM内的芯片到芯片互连可能提供的带宽比片上互连更少。
智能网卡被用于不同的部署中,包括存储、安全和网络处理。如下图所示,最终目标是实现消耗更少处理器内核的解决方案,同时以更低的成本提供更高的性能。
图1:智能网卡释放处理器内核
智能网卡的定义是广泛的,包括一个大型的功能层级结构,所有这些功能都建立在一个基本的网卡基础之上。示例1到13说明了可以添加到网卡的处理元素,以创建功能更加强大的智能网卡。当使用某种形式的FPGA来实现智能网卡时,可以根据需要轻松添加或删除这些功能。基于FPGA的智能网卡和FPGA增强型智能网卡的实现还允许对每种任务加速功能进行简便的远程修改或改进,即使智能网卡已经安装在数据中心服务器上之后也可以进行。
示例1展示了一个基本型网卡的基础,它采用多个以太网MAC和一个用于主处理器接口的PCIe块。主处理器随后必须处理所有以太网通信。
图2:示例1 –基本型网卡的基础
示例2将DMA引擎添加到基本型网卡中,通过允许网卡在以太网MAC和服务器内存之间移动以太网通信,而无需服务器CPU的大量干预,从而减少了主处理器的工作负载。
图3:示例2 –将DMA引擎添加到基本型网卡中
示例3添加一个过滤引擎,它通过阻止无需处理器注意的数据包,进一步减少主处理器的任务负载。
图4:示例3 –添加一个过滤引擎
示例4将外部DRAM添加到过滤引擎,这显著增加了智能网卡上可用于过滤的规则数量。有了足够的外部内存,智能网卡可以管理数百万条规则。
图5:示例4 –将外部DRAM添加到过滤引擎
示例5添加了L2/L3卸载引擎,该引擎可以通过处理智能网卡的以太网端口之间的低层交换和路由,进一步减少主处理器的工作负载。为了有效,L2/L3卸载引擎将需要大量外部DRAM来缓冲网络数据包。
注意,智能网卡FPGA或ASIC与外部DRAM之间的接口必须满足正被交换的以太网通信带宽要求。
图6:示例5 –添加一个L2/L3卸载引擎
示例6添加了一个隧道引擎,以允许智能网卡卸载各种隧道封包,并进一步减轻处理器的周期密集型隧道性需求。
图7:示例6 –添加一个隧道引擎
示例7添加快速外部存储,以允许智能网卡对传入的网络数据包进行深度缓冲,从而实现了线速数据包交换和具有多个队列的分层QoS调度。
图8:示例7 –添加深度数据包缓冲
示例8添加一个具有自己的DRAM缓冲的流引擎,以使智能网卡的路由引擎能够处理数百万个路由表条目。流引擎有助于卸载网络地址转换/协议地址转换(NAT / PAT)操作的负担。
图9:示例8 –带有流引擎的智能网卡
示例9添加一个TCP卸载引擎来处理TCP堆栈的全部/部分工作,这样可以在不消耗更多CPU周期的情况下提高智能网卡性能。
图10:示例9 – TCP卸载引擎
示例10将部分/全部安全引擎添加到智能网卡中,以每个流为基础从主处理器卸载加密和解密任务。
图11:示例10 –添加安全引擎以卸载加密和解密任务
示例11添加了一个单独的QoS引擎,以允许智能网卡管理服务等级协议(SLA),而无需服务器CPU的干预。
图12:示例11 –添加单独的QoS引擎以管理SLA
示例12添加一个可编程的数据包解码器,该解码器将类似P4的可编程性集成到智能网卡中。P4是一种标准的网络编程语言,专门用于描述和编程分组数据包转发面的操作。
图13:例12 –添加可编程分组数据包解码器
示例13添加一个或多个板载处理器,它们为智能网卡提供了完整的软件可编程性(用于诸如OAM等任务),进一步实现服务器处理器的任务卸载。
图14:示例13 –带有板载处理器的智能网卡
在数据中心引入带有FPGA的智能网卡设计的最大障碍之一是基于软件的多核智能网卡在10G时代获得的巨大成功所带来的工程惯性。网络卸载和加速技术已经在API和接口协议采用并标准化,这些API和接口协议允许服务器任务与某些多核智能网卡交互。
每个服务器软件栈都以几个特定的网卡和智能网卡为目标。为现有网卡和智能网卡开发的API和驱动程序被硬编码到在服务器CPU上运行的软件栈中。除非使用FPGA设计的智能网卡可以支持这些现有API并模拟现有接口协议,否则将这些智能网卡在投入使用时需要修改软件栈。