深度:如何采用FPGA设计SmartNIC?
智能服务器适配器或智能网卡(SmartNIC)通过从服务器的CPU上卸载网络处理工作负载和任务,提高云端和私有数据中心中的服务器性能。将网络处理卸载到智能网卡并不是一个新的概念,例如有些网卡(NIC)可以卸载诸如校验和计算与分段等一些网络处理功能。
然而,由软件定义网络(SDN)、开放虚拟交换机(OVS)和网络功能虚拟化(NFV)驱动的数据中心网络通信的快速增长,需要一种具有更强卸载能力的新型网卡:智能网卡。
智能网卡为数据中心网络提供了几项重要优势,包括:
1. 通过直接在网络接口卡上执行任务来加速网络、存储和计算任务,消除了在服务器上运行这些工作负载的需要,并释放了CPU周期,从而显着提高服务器性能并降低总体功耗,进而降低系统级的总体拥有成本。
2. 卸载日益复杂的网络任务,包括诸如VxLAN等覆盖隧道协议和来自服务器处理器的复杂虚拟交换,使服务器处理器能够执行实际的创收性任务。
3. 通过在更快速的硬件而不是较慢的软件中去执行卸载功能,从而提高有效网络带宽和吞吐量。
提供附加的、灵活的功能,它们都易于适应新的和不断变化的网络和存储协议。
智能网卡的三种形式
目前,智能网卡设计采用以下三种形式之一:
1. 多核智能网卡,基于包含多个CPU内核的ASIC
2. 基于现场可编程门阵列(FPGA)的智能网卡
3. FPGA增强型智能网卡,它将硬件可编程FPGA与ASIC网络控制器相结合
一个多核智能网卡设计可能包括一个集成了许多软件可编程微处理器内核的ASIC。这些内核通常是性能更高的Arm处理器,它们处理数据包并从主服务器CPU(昂贵)上卸载任务。多核智能网卡ASIC还可以集成固定功能硬件引擎,它们可以卸载定义明确的任务,如标准化的安全和存储协议。
然而,多核智能网卡至少受到两个制约因素的限制:
1. 这些智能网卡基于软件可编程处理器,由于缺乏处理器并行性,它们在被用于网络处理时速度较慢。
2. 这些多核ASIC中的固定功能硬件引擎缺乏智能网卡卸载功能越来越需要的数据平面可编程性和灵活性。
基于处理器的多核智能网卡设计在10G这一代网卡中得到了广泛的应用。然而,随着数据中心中的以太网数据速率从10G上升到25G、40G、50G、100G甚至更高,这些以软件为中心的多核智能网卡就已经难以跟上了。这些多核智能网卡在这些较高的数据速率下无法达到所需的峰值带宽。同时,多核智能网卡ASIC中的固定功能引擎无法扩展去处理新的加密或安全算法,这是因为它们缺乏足够的可编程性,只能适应算法的细微改变。
基于FPGA的智能网卡
基于FPGA的智能网卡利用FPGA更大硬件可编程性来构建卸载到智能网卡上的任务所需的任何数据平面功能。由于FPGA是可重编程的,利用FPGA实现的数据平面功能可以任意并且实时地去除和重新配置。所有这些卸载功能都以硬件而非软件速度运行。
与单纯基于软件的实现相比,基于FPGA的智能网卡设计可以将网络功能提速几个数量级。在智能网卡设计中使用FPGA可提供定制硬件的线速性能和功率效率,并能够创建支持复杂卸载任务和提高单数据流网络性能的深度数据包/网络处理流水线。通过利用FPGA中固有的大量硬件并行性来复制这些流水线,可以提高巨大数据性能,足以满足基于更快的以太网网络的下一代数据中心架构的高性能、高带宽、高吞吐量需求。
FPGA增强型智能网卡
对向后兼容性的需求催生了另一种类型的智能网卡——即FPGA增强型智能网卡,它为网卡增加了FPGA功能。基于这种设计,网卡可以是现有的多核智能网卡,也可以只是一个简单的网卡专用集成电路(NIC ASIC)。集成到这些设计中的网卡提供了向后兼容性,特别是对于超级管理程序的兼容性。因此,基于现有网卡的FPGA增强型智能网卡设计,加上用于扩展功能的FPGA,可以立即实现其投资收益,因为它自动与现有网络API和接口协议兼容,因此可以使用现有的API和驱动程序。一个FPGA增强型智能网卡设计中的板载FPGA能够显著提高性能和扩展功能。
有三种方法可以开发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并模拟现有接口协议,否则将这些智能网卡在投入使用时需要修改软件栈。
转载申明:转载本号文章请注明作者和来源,本号发布文章若存在版权等问题,请留言联系处理,谢谢。
推荐阅读
更多架构相关技术知识总结请参考“架构师技术全联盟书店”相关电子书(35本技术资料打包汇总详情可通过“阅读原文”获取)。
内容持续更新,现下单“架构师技术全店打包汇总(全)”,后续可享全店内容更新“免费”赠阅,格仅收188元(原总价270元)。
温馨提示:
扫描二维码关注公众号,点击阅读原文链接获取“架构师技术全店资料打包汇总(全)”电子书资料详情。