Amiya · 2021年05月14日

软件定义智能网卡FIA:ASIC vs. FPGA

软件定义智能网卡FIA:目标

软件定义智能网卡FIA:ASIC vs. FPGA

软件定义智能网卡FIA:架构

软件定义智能网卡FIA:分组处理流水线实现

软件定义智能网卡FIA:基于RMT的分组处理流水线

软件定义智能网卡FIA:原型



重读“Azure Accelerated Networking: SmartNICs in the Public Cloud”这篇SmartNIC的开山之作,重塑网卡方向,高山留存阅读点滴。

原版见NSDI2018。

软件定义SmartNIC实现途径

针对不同数据中心应用场景和需求,SmartNIC主要有多种不同的实现方案:ASIC、SoC、FPGA和CPU。不同的SmartNIC应用场景下,这几种方案各有千秋。

(1)基于ASIC的NIC

定制ASIC设计提供了最高的性能潜力,然而,随着时间的推移,它们缺乏可编程性和适应性。特别是,需求规格与ASIC到货之间的长时间跨度按1-2年的顺序进行,然而,在这大跨度内需求持续变化,使得新的ASIC已经落后于应用需求。ASIC设计必须继续提供服务器在5年使用寿命内的所有功能。所有或无卸载意味着,今天定制的ASIC规格必须满足未来7年内所有SDN要求。

ASIC厂商通常会添加嵌入式CPU内核来支持新功能。与其它NIC处理硬件相比,这些CPU内核可能成为处理的性能瓶颈。此外,随着新功能的增加,这些CPU内核可能会随着时间的推移而增加处理负担,加剧性能瓶颈。这些CPU内核通常也通过对NIC的固件更新进行编程,NIC由ASIC供应商处理,并减缓新功能的部署。

(2)基于多核SoC的NIC

基于多核SoC的NIC使用大量嵌入式CPU核来处理分组,损失了一些性能,以提供比ASIC设计更好的可编程性。这些设计在10GbE NIC一代中广泛可用,如Cavium,使用通用CPU内核(MIPS,后来是ARM64),如Netronome和Tilera,则具有特定的内核用于网络处理。通用SoC实现方法,它们更易于编程(可以使用标准的DPDK样式的代码并在熟悉的Linux环境中运行)。与同类的ASIC设计相比,性能方面没有太大的缺点。

然而,在40GbE及以上的更高链路速度下,CPU核数显著增加。SoC芯片上网络和调度程序分散和收集数据包变得越来越复杂和效率低。经常看到10µs或更多延迟与将数据包放入核心、处理数据包并返回网络,显著高于ASIC,且具有更大的变异性。并且有状态的数据流往往只映射到一个CPU核心/线程,以防止状态共享和单流中的无序处理。由于嵌入式CPU的性能没有与网络带宽相匹配的速度提升,因此单网络流性能没有大幅度提高。这导致开发人员必须在多个流中传播流量的问题,将更快网络的性能优势限制在仅限于最并行的工作负载。

SoC网络卸载的未来也值得怀疑。在10GbE时,整个封装是可容忍的,通用SoC核足够。40GbE需要将近4倍的核心,尽管有几个供应商仍然创建了可行的解决方案。尽管如此,40GbE部分具有基于软件的数据路径已经惊人地庞大、耗电且昂贵,对于100GbE、200GbE和400GbE的可扩展要求看起来很弱。

SoC方法具有熟悉的编程模型的优势,但是单流性能、更高的延迟和更高网络速度下较差的可扩展性不得不寻找另一种解决方案。

(3) FPGA

现场可编程门阵列(FPGA)是由通用逻辑块和存储器组成的可重构硬件设备,它们都通过静态配置的网络连接。程序员编写代码,将通用逻辑和内存组装成“软逻辑”电路,形成定制的特定于应用程序的处理引擎,平衡ASIC的性能和SoC NIC的可编程性。

与基于SoC的NIC的CPU不同,FPGA仅使用基本LUT来编程以完成应用程序,甚至可以利用应用程序特性(如数据的最大大小)来减少总线宽度和存储需求。有许多研究表明,在微处理器模拟、基因组学、机器学习、网络、模式匹配、图形处理等广泛的应用领域,FPGA可以比纯软件实现几个数量级的应用性能加速。

FPGA具有可编程性,以适应新应用需求,定制硬件的性能和效率,以及创建深加工管道的能力,从而提高单流性能。

如微软已经完成了将FPGA部署到Azure数据中心Catapult加速器的工作,实现数千个节点的联网FPGA集群为Bing进行搜索排名,大大提高了性能,降低了成本,并在两个节点之间运行了网络传输层机架内的FPGA。FPGA在规模上可能是SmartNIC的一个可行选择,因为它们有可能解决我们的难题:需要ASIC的性能特征,但需要SoC等软件解决方案固有的可编程性和可重构性。

基于FPGA的SmartNIC优点

FPGA已经广泛应用于路由器、蜂窝应用程序和设备的网络,针对特定应用场景和需求,FPGA实现智能网卡似乎是一个很好的选择。主要由于以下原因:

(1)FPGA逻辑资源大小

FPGA的通用逻辑部分大约比ASIC中的相同逻辑大10倍,甚至20倍,因为使用可编程存储器(查找表或LUT)代替门,并且使用由导线和多路复用器组成的可编程网络代替专用导线将组件连接在一起。FPGA的设计仅仅是普通逻辑,需要比ASIC多10-20倍的芯片面积。然而,FPGA有许多硬化块,例如嵌入式SRAM、收发器和I/O协议块,所有这些都是定制组件,几乎与定制ASIC中的组件相同。

现代网卡中数据包处理逻辑通常不是最大的部分。相反,大小通常由SRAM内存(例如,用于保存流上下文和数据包缓冲区)、支持I/O的收发器(40GbE、50GbE、PCIe Gen3)和驱动这些接口的逻辑(用于以太网的MAC+PCS、PCIe控制器、DRAM控制器)控制,所有这些都可以是FPGA上的硬逻辑。此外,ASIC设计通常包括重要的额外逻辑和可配置性(甚至嵌入式CPU核),以适应不同客户的不同需求。为了处理不断变化的需求和解决不可避免的bug,需要这种额外的逻辑。先前的工作表明,这种可配置性可以为ASIC逻辑增加一个数量级的面积。因此,FPGA的趋势是包含越来越多的定制逻辑,而ASIC则包含越来越多的可编程逻辑,从而缩小了两种方案之间的效率差距。

FPGA应该比功能相似的ASIC大2-3倍左右,这对于大规模增加的可编程性和可配置性是合理的。

(2)FPGA成本

FPGA市场竞争激烈(有两个强大的供应商),根据经验,大规模应用部署允许不可回收的工程成本进行摊销,芯片的成本由芯片面积和产量决定。服务器中的总芯片面积往往由CPU、Flash和DRAM控制,由于其规则的结构,FPGA的芯片大小也是比较合适。

(3)FPGA编程开发

与可编程逻辑的CPU相比,FPGA可以提供令人难以置信的性能,但前提是硬件设计师真正考虑应用程序的高效管道设计并将其按此布局。比如,微软研究院的Catapult团队在Azure Networking中为SmartNIC构建了自己的FPGA团队,这个团队比一个典型的ASIC设计团队要小得多,AccelNet团队在任何给定的时间平均不到5个FPGA开发人员。

在AccelNet上的经验以及微软内部的其他项目,例如Bing排名用于web搜索,LZ77用于数据压缩,以及BrainWave用于机器学习,都表明编程FPGA对于生产规模的云工作负载非常容易处理。这四个应用程序都使用了完全相同的硬件,显示了Azure SmartNIC的可编程性和灵活性远远超出了SDN和网络处理能力。

FPGA最重要的因素是让硬件和软件团队在一个团队中协同工作,并使用软件开发方法(如敏捷开发)而不是硬件(如瀑布)模型。

(4)FPGA虚拟化

让FPGA进入数据中心并不是一件容易的事,当微软开始使用SmartNIC时,Catapult已经解决了超大规模部署所需的许多公共基础设施细节。FPGA运行Shell和相关的软件库抽象出了底层特定硬件的细节,并允许SmartNIC的硬件和软件开发主要集中在应用程序功能上。

(5)FPGA代码锁定

FPGA开发几乎完全是用硬件描述语言完成的,比如SystemVerilog,如最初的开发是为了方便移植,那么这些语言是可移植的。有一些特定于供应商的细节,如Intel FPGA有40b宽的SRAM,而Xilinx有36b宽的SRAM,但是一旦考虑到这些细节,为不同的FPGA编译代码就没有那么困难了。如微软Catapult最初是在Xilinx FPGA上开发的,但在最初试点之前就被移植到Altera FPGA上了。

FPGA的灵活性使用户能够以比任何其他类型的硬件设计更快的时间间隔进行编码、部署、学习和修改,这种软硬件协同设计模式使SmartNIC硬件开发具有软件般的灵活性。

作者:珠穆朗玛2048
来源:https://zhuanlan.zhihu.com/p/360654087

更多FPGA智能网卡相关技术干货请关注FPGA加速器技术专栏。

推荐阅读
关注数
1611
内容数
22
阐述CPU性能瓶颈问题如何破解,FPGA如何突围
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息