APP下载

智能网卡综述

2022-01-19马潇潇元国军安学军

计算机研究与发展 2022年1期
关键词:密集型网卡智能网

马潇潇 杨 帆 王 展 元国军 安学军

1(中国科学院计算技术研究所高性能计算机研究中心 北京 100190)2(中国科学院大学 北京 100190)

随着网络技术、存储技术、芯片设计制造技术的不平衡发展,目前,计算机网卡的设计面临新的问题.网络速度在2020年已经迈向400 Gb/s以太网大关,并正向着更快的800 Gb/s,甚至1.6 Tb/s发展[1],而后摩尔时代意味着CPU的频率已经趋于稳定,在这种不平衡的现状下,使用传统的CPU来进行网络处理已经显得不尽如人意.在速度上,现代CPU需要用10~15 ns来访问L3 Cache,而400 Gb/s的网络仅需1.2 ns便可传送64 B的消息[2];在计算能力上,CPU适合于处理串行的复杂指令操作,对大量并行的固定模式的计算并不适用;再者,在云环境多租户的情况下,开放虚拟交换(open virtual switch, OVS)等网络功能虚拟化将占用更多的CPU资源[3-4].此外,通过CPU访问内存进行数据搬移的开销在很多应用中占据了极大的比例,如在快速傅里叶变换(fast Fourier transform, FFT)计算中,数据搬移占据了40%的开销[5],旁路CPU已经成为一种重要的解决方式.因此,能够满足高速的网络处理需要、卸载CPU不适合的网络处理任务、提供一定编程灵活性的智能网络终端设备——智能网卡(smart network interface card, SmartNIC),应运而生,并且在协议处理[2,6-7]、网络功能[8-10]、数据中心云服务[11-14]、人工神经网络加速[6,15-17]、科学计算[5,18]等诸多场景中发挥了重要作用.

在学术界,智能网卡的雏形是微软亚洲研究院在2014年提出的基于现场可编程门阵列(field programmable gate array, FPGA)的Catapult设计,一种用于加速大规模数据中心服务的可重构网络[19],并在后续的一系列研究[3,20-22]中逐渐发展,且已经部署到Azure云中;在产业界,智能网卡的产品最初主要由有一定市场和技术储备的成熟网络设备生产商Mellanox[23],Netronome[24],Broadcom[25],Cavium[26]提供,Netronome公司于2016年9月在公司网站发文,对智能网卡的需求和定义进行了阐述,提出智能网卡必须具备实现复杂网络数据平面功能的能力,可以灵活地更改数据平面,并且与现有生态无缝衔接[27].而Mellanox公司则于2018年8月发文,借助PC Magazine对智能网卡的定义——能够卸载CPU通用处理任务的网卡[28],介绍了该公司推出的3种基于不同处理器架构的智能网卡产品[29].此外,近几年陆续出现了许多推出智能网卡的小公司,如BittWare[30],Ethernity[31]等,而Amazon[32]、华为[33]这样的大公司在近5年里也陆续收购小公司或者研发智能网卡用于自身部署,甚至推向市场.综合以上学术界和产业界的观点,本文认为智能网卡至少应当具有4个特性:

1) 满足现有数据平面网络处理需求;

2) 兼容现有网络协议生态;

3) 能够灵活卸载通用CPU不适合的处理任务;

4) 提供用户友好的可编程性.

本文将从智能网卡的基础架构设计、编程框架、重点应用、未来研究热点4个方面进行综述,系统介绍智能网卡在产业界和学术界的发展过程和现状,分类对比不同设计的优势和不足,列举典型的智能网卡应用场景和潜在问题,为今后智能网卡的软硬件协同设计提供参考和思路.

本文的主要贡献包括4个方面:

1) 对基于FPGA、多核处理器(multi-core pro-cessors, MP)、特定应用集成电路(application specific integrated circuit, ASIC)的不同处理器架构和基于On-Path,Off-Path的不同数据通路设计架构进行分类,明确不同设计思路的优势和不足;

2) 对可用于智能网卡的多种编程框架进行总结,权衡分析数据流驱动、控制流驱动的设计思路;

3) 对智能网卡在数据中心、科学计算中的典型应用场景进行总结,明确智能网卡的使用价值和设计目标;

4) 对当前智能网卡的设计缺陷和使用瓶颈进行总结,指出未来智能网卡软硬件协同设计的研究方向和值得思考的问题.

1 智能网卡基础架构

目前,产业界和学术界中智能网卡的硬件设计架构多种多样,在性能、成本、使用灵活性等方面亦表现得参差不齐.本节我们将从核心处理器选择和数据通路设计2个维度对智能网卡的基础架构设计进行分类综述.

1.1 按核心处理器分类

从核心处理器角度来分析,目前智能网卡的设计主要有三大类,分别为基于FPGA,MP,ASIC的设计.下文将依次对基于不同处理器智能网卡的研究和商业产品进行介绍.

1.1.1 基于FPGA的设计

在学术界,以FPGA作为智能网卡核心可编程处理器的研究主要以微软研究院为代表[3,19-22].图1描述了微软一系列设计架构的演进.2014年,微软提出了基于高端FPGA——Altera Stratix V D5[34]的Shell(通用逻辑)+Role(可重构处理逻辑)的可重构数据中心云服务加速方案,用于解决商用服务器满足不了飞速增长的数据中心业务需求、定制化加速器成本开销大且灵活性不足的问题[19].如图1(a)所示,其中Shell为可重用的通信、管理、配置等通用逻辑,包含2个DRAM(dynamic random access memory)控制器(管理FPGA上的2块DRAM)、4个10 Gb/s轻量级FPGA间串行通信接口SerialLite3、管理DMA通信的PCIe核、路由逻辑(用于管理来自PCIe,Role,SerialLite3的数据)、重新配置逻辑(用于读、写、配置Flash)、事件翻转逻辑(用于阶段性的监督FPGA状态以减少错误);而Role则位于FPGA芯片的固定区域中,是跟用户加速应用紧密相关的逻辑,文中以加速Bing搜索为例,将排序逻辑映射到Role中进行加速.在Catapult设计中,考虑到FPGA的管理和使用,同机架下的所有FPGA以6×8的2维Torus网络拓扑的形式组成一套新的网络进行连接,可以将同机架下的所有FPGA作为加速资源使用.但是,使用第2套网络的设计方式:一方面,增加了网络的开销和容错管理;另一方面,对于网络流、存储流、分布式应用仅能提供有限的加速.此外,机架内的2维Torus直连使得用户对跨机架的FPGA资源无法得到有效的使用.

Fig. 1 The evolution process of Microsoft SmartNIC architecture[19-22]

微软在2016年的研究工作中对Catapult进行了改进,将FPGA网络与数据中心网络融合,提出了新的云加速架构设计[20].如图1(b)所示,在Stratix V D5 FPGA板卡上设计了2个40 Gb/s的QSFP(quad small form-factor pluggable)端口,分别与主机端已有的普通网卡和架顶交换机(top-of-rack, ToR)相连接,对应地,在新的Shell设计中,原来Catapult的4端口SerialLite3被替换为轻量级传输层(lightweight transport layer,LTL)引擎用于处理2个40 Gb/s端口.这样,所有的网络数据都要经过FPGA的以太网端口,FPGA便可以更直接、高效地对网络数据流、存储数据流进行加速,在可扩展性上也有很大提升.文中除了加速网页搜索应用,还对传输中的网络数据加密进行了FPGA加速,以体现该设计的加速效果.此时,微软初代智能网卡已成雏形,只是FPGA和通用网卡还未集成在一块板卡上.同年,微软提出了针对该FPGA智能网卡的一套高级编程语言——ClickNP[21](类似C语言),实现FPGA和CPU之间的协同编程,使用模块化的实现方法,向用户提供友好的编程接口.文中以多种网络功能为例进行了实验评估验证,一定程度上解决了权衡FPGA高性能和编程复杂的问题.

微软在2018年的研究中将软件定义网络(software define network, SDN)栈卸载到其二代智能网卡[3],用以更好地支持单根I/O虚拟化(single root I/O virtualization, SR-IOV)[35].如图1(c)所示,此时,二代智能网卡已将通用网卡和高端Intel Arria 10[36]FPGA集成到1个板卡上,对外的ToR端口已经达到50 Gb/s,但从架构上而言并无实质的变化,仍然采用将FPGA放置在通用网卡和ToR数据通路之间的设计,用于高效地处理数据流,提供路径上的网络功能、特定应用加速.微软在后来的研究中指出,鉴于当前可编程网卡、可编程交换机的硬件条件支持,充分利用可编程网络设备组成高效的全网可编程云将成为一种趋势[22].

在产业界,近些年,涌现出众多基于FPGA设计智能网卡的小公司,如BittWare,Ethernity等.同时,部分老牌公司如Mellanox,Intel,Xilinx也相继推出基于FPGA的智能网卡类产品.

BittWare[30]公司推出了基于FPGA的100 Gb/s智能网卡Shell.支持网络功能虚拟化(network function virtualization, NFV)、网络监控(network monitoring)、预防DDoS(distributed denial of service)攻击等功能.此外,用户可以自定义对数据包的处理,其中自定义IP的设计支持Xilinx SDNet编译器,因此满足P4[37]编程,可以通过Match-Action[38]的方式对数据包进行用户自定义处理.Netcope[39]于2017年推出的基于Xilinx Virtex UltraScale+[40]FPGA的NFB(Netcope FPGA board)系列智能网卡亦支持P4编程.Eynx[41]公司亦推出了与BittWare类似的基于FPGA的1~40 Gb/s智能网卡产品.Ethernity[31]推出ACE-NIC系列基于Xilinx Ultrascale+FPGA智能网卡,主要提供网络功能虚拟化的卸载、OVS的卸载.Reflex CES[42]推出了基于Intel FPGA和Xilinx FPGA的两大类PCIe终端网络设备.其中XpressGX S/A**系列分别基于Intel的4款FPGA产品:1)带有2块HBM(high bandwidth memory)的Stratix 10[43];2)无HBM的Stratix 10;3)Arria 10;4)Stratix V.XpressV***系列则分别基于Xilinx的4款FPGA产品:1)分别使用带有HBM的Virtex UltraScale+;2)无HBM的Virtex UltraScale+;3)Kintex UltraScale+[44];4)Virtex 7.其中XpressGX S10-FH800G板卡使用Intel Stratix 10 FPGA,可以满足800 Gb/s以太网需求,可用于数据中心、云计算、安全、高性能计算、军队安防、视频广播等领域.Silicom[45]同样推出基于Intel FPGA和Xilinx FPGA的可编程网卡.带宽分为1 Gb/s,10 Gb/s,40 Gb/s,100 Gb/s这4个级别.基于Xilinx FPGA的设计中,分别有基于Virtex 6,Virtex 7,Virtex UltraScale,Kintex UltraScale,Kintex UltraScale+的产品;基于Intel FPGA的设计中,分别有基于Airra 10,Stratix 10的产品.

Mellanox推出了Innova系列[46]基于Xilinx Kintex UltraScale高端FPGA的智能网卡,包含Innova和Innova-2 Flex共2代产品.最新的Innova-2智能网卡中内嵌其ConnextX-5[47]网卡控制器,提供40 Gb/s,100 Gb/s双端口以太网或者InfiniBand网络,ConnextX系列ASIC已经满足基本的智能网卡卸载功能,如RoCE(remote direct memory access over converged Ethernet)网络协议、vSwitch/vRouter、I/O虚拟化的硬件卸载,而高端的可编程FPGA则可以为用户提供更高效的特定应用加速服务,例如安全、存储、机器学习等方面的应用加速.

Intel则推出了基于两大类可编程PCIe加速卡,其中基于Arria10/Arria10 GX FPGA的可编程加速卡Intel FPGA PAC(Intel FPGA programmable acceleration card) N3000[48],用于加速协议栈处理、NFV等应用;此外,另有基于Stratix 10 SX的可编程加速卡Intel FPGA PAC D5005[49],面向数据流分析、视频编码转换、金融、人工智能、基因分析等领域.

Xilinx于2019年4月收购Solarflare[50]公司,其实,自2017年Xilinx便与Solarflare合作,其推出的网卡含有XtremeScale X2和8000共2个系列以太网卡.其中X2系列产品是面向数据中心的设计,带宽达到10 Gb/s,25 Gb/s,40 Gb/s,100 Gb/s,其Cloud Onload[51]旁路内核技术、TCP-Direct技术与X2的结合可以在负载均衡、数据库缓存、容器应用、网页服务方面减轻操作系统的开销,提高性能;其中8000系列产品,带宽达到10 Gb/s,40 Gb/s,延时小于1 μs,提供用户自定义功能的软件接口,可用于特定应用加速,以及网络包抓取、监控、分析、过滤等.2020年3月,Xilinx将已有技术进行整合,将XtremeScale以太网控制器与高端Zynq UltraScale+XCU25 FPGA结合,推出其最新的Alveo U25[52]智能网卡一体化平台,应对业界的挑战性需求与工作负载,如 SDN,OVS,NFV,NVMe-oF(non-volatile memory express over fabric)[53],以及电子交易、AI 推理、视频转码和数据分析等,在编程框架方面,Alveo U25支持高级综合语言(high level synthesis, HLS)、P4高级编程抽象,同时支持Xilinx的Vitis[54]统一软件平台计算加速框架,方便Xilinx及第三方应用加速.

小结:总体而言,基于FPGA的智能网卡产品设计大多数与Catapult中的设计方案类似,即FPGA分为Shell+Role,再与网卡芯片集成到一个板卡上.在具体的设计细节中,部分设计将逐渐趋于成熟的卸载技术转移到ASIC网卡中,FPGA的使用也逐渐向高端产品迈进.基于FPGA的设计方式,在产业界得到了一定的认可,因为可以极大地利用FPGA丰富的逻辑单元实现对数据快速地并行处理,并且引入较小的能耗开销;但是,FPGA对应的硬件编程语言在编程复杂度上较繁琐,需要高效的编程框架(如ClickNP)支持,其次,FPGA的价格相对昂贵,在数据中心中大量部署需要具备雄厚的经济实力.

1.1.2 基于MP的设计

另一种得到业内认可的智能网卡的设计方式为采用片上多核的方式来进行网络数据的可编程加速处理,多数使用片上系统(system on chip, SoC)的实现方案,使用的处理器核可以是专用的网络处理器(network processor,NP),如Netronome NFP系列[55]、Cavium Octeon系列[56],也可以是通用处理器(general processor,GP),如ARM.下文将从通用处理器和网络处理器2个方面进行介绍.

1) 基于NP-SoC的智能网卡

Netronome早期在2016年推出了NFE-3240系列用于网络安全相关应用的智能网卡,对数据包可达到20 Gb/s的C语言可编程线速处理.在2018,2019年,Netronome陆续推出了三大系列Agilio[24]智能网卡:①面向计算节点的Agilio CX,基于NFP-4000或者 NFP-5000网络处理器,可以完全卸载虚拟交换机对网络功能中数据平面的处理、卸载典型的计算密集型任务;②面向Bare-Metal服务器的Agilio FX,基于NFP-4000网络处理器和4核ARM v8 Cortex-A72 CPU(可运行Linux OS);③面向服务节点的Agilio LX,基于NFP-6000网络处理器,主要用于虚拟化、非虚拟化的X86服务节点和广域网网关.Agilio系列产品支持灵活的包解析和Match-Action处理,可以进行eBPF,C,P4编程.

Cavium推出基于cnMIPS III网络处理器的LiquidIO[26]系列智能网卡.其中cnMPIS III是Cavium公司实现的基于MIPS64指令集架构(instruction set architecture,ISA)的Octeon系列第3代产品,此外,Octeon系列产品中还有基于ARM的产品.cnMPIS III 中的CN7***系列产品频率可达2.5 GHz,集成48个处理器核,cnMPIS III系列处理器面向智能网络相关应用(从Layer2到Layer7)的可编程需求,吞吐可满足100 Mb/s到200 Gb/s的网络,以此为核心处理器设计的LiquidIO,LiquidIO II智能网卡,可进行C语言编程,可以用于OVS、NFV、安全、存储、应用加速等智能网络服务.

华为[33]推出了IN系列三大类智能网卡:早期2012年的iNIC系列、2017年的SD100(基于ARM通用处理器,含16个2.1 GHz Cortex-A57处理核心)、2018年5月的IN500系列(IN200基于海思Hi1822芯片,IN300 FC HBA基于海思高性能Fibre Channel HBA芯片).此外,SolidRun[57]推出基于NXP LX2160A通信处理器的智能网卡,Silicom[58]推出基于NetLogic XLP316和RMI XLS416网络处理器的2类智能网卡,Kalray推出基于第3代MPPA[59](massively parallel processor array) 架构Coolidge处理器的KONIC200[60]系列智能网卡,其中每个Coolidge处理器含有80个64 b超长指令字核、80个协处理器、其他加速部件及外围连接逻辑.

2) 基于GP-SoC智能网卡

Mellanox除了推出基于FPGA的Innova系列可编程智能网卡,还推出了基于BlueField IPU(I/O processing unit)系列可编程智能网卡[23],支持Ubuntu,Centos系统.其中BlueField初代产品集ConnectX-5控制器、ARM v8 A72处理器阵列(最多16核,0.8 GHz)、8 GB,16 GB DDR4内存控制器于一体,最大支持双端口25 Gb/s,50 Gb/s,100 Gb/s的以太网或者Infiniband网络连接.BlueField-2则集成了最新的ConnectX-6控制器,仍然使用ARM处理器阵列,可支持单口200 Gb/s以太网或者Infiniband网络连接,该系列智能网卡可用于加速数据中心或者超算中的安全、存储、网络协议及功能的卸载和加速.

Broadcom推出Stingray系列智能网卡产品[25],其PS410T,PS225,PS250产品分别定位为4×10 Gb/s, 2×25 Gb/s, 2×50 Gb/s高性能数据中心智能网卡,支持数据平面加速和软件定义存储(software defined storage, SDS),如NVMe-oF.以PS250为例,Stingray SoC集成了NetXtreme E系列100 Gb/s以太网卡控制器、TruFlow可配置流加速器、8个ARM v8 Cortex-A72处理器核(3.0 GHz)及多种加速引擎,支持RoCE v1/v2,SR-IOV,使用标准的Linux系统、GNU工具库,定位用于Bare Metal和虚拟化服务器平台(OVS卸载)、存储服务器场景.

Amazon于2015年初收购以色列芯片制造商Annapurna,次年,Annapurna实验室发布Alpine系列[32]基于ARM v7或者ARM v8架构的芯片,可用于网络存储、虚拟化、云服务等场景,并在AWS中得到使用.在此基础上,Amazon相继推出几代Nitro系统,并于2018年发布Graviton处理器,虽然并未公开Nitro系统的架构,但其中应当存在基于ARM的智能网卡的影子.

小结:基于MP的智能网卡设计框架如图2所示,均含有5个重点模块:①多种已经成熟的加速部件,如Hash计算、加解密(Crypto)等;②用于与主机通信的PCIe接口,多数支持SR-IOV;③多种与外设通信的接口,如I2C,JTAG等;④访问智能网卡板上内存的控制器;⑤ 片上NP或者GP多核,用于OVS,RSS(receive side scaling)等网络功能,以及用户自定义功能.NP或者GP多核的具体片上布局会有差异,多数设计采用Mesh方式,但也有例外,如MPPA[59]则采用多个Cluster的方式,Cluster内部共享内存.此外,有的NP内部含有多种处理器核,如Netronome NFP系列[55]NP内部有包处理器核和流处理器核两大类,分别用于包的解析、分类和数据流的处理.

基于NP和GP的SoC具体设计上略有差异:①如图2中左斜阴影部分所示,基于NP-SoC的设计,会将网络协议如TCP、远程数据直接访问(remote direct memory access, RDMA)放在NP核上处理,如华为智能网卡[33];②如图2中右斜阴影部分所示,基于GP-SoC的设计,其内部多数会集成专门的网络控制器,用于网络协议的处理,甚至部分典型的网络功能卸载,而将更复杂的任务放在GP核上处理,如Mellanox BlueField智能网卡内部集成了ConnectX控制器[23],而Broadcom Stingray智能网卡内部集成了NetXtreme E控制器[25,61]专用于网络协议处理;③如图2中网格阴影部分所示,部分基于NP-SoC设计,除了集成众多NP核用于实现可编程功能,还有可能集成几个GP核,可运行Linux系统,用于Bare-Metal服务器场景,如Netronome Agilio FX智能网卡[24]同时集成了NFP-4000和ARM v8 Cortex-A72.

Fig. 2 MP-based SmartNIC block diagram

在性能方面,基于NP-SoC的智能网卡会略胜于基于GP-SoC的智能网卡,因为在并行性上,NP相比GP更占优势,但基于MP的性能均不及基于FPGA的性能;在成本方面,基于NP-SoC的智能网卡会低于基于GP-SoC,FPGA的智能网卡;在编程方面,基于NP-SoC的编程复杂度居于FPGA和GP-SoC之间,基于GP-SoC的智能网卡在编程方面最友好.

1.1.3 基于ASIC的设计

目前,基于ASIC的智能网卡并不多,ASIC芯片主要以网络控制器的角色出现在智能网卡中,如Mellanox的ConnectX系列[47]、Broadcom的NetXtreme系列[61]、Cavium的FastLinQ系列[62].此类ASIC网络芯片除了能够满足传统的网络协议(如TCP,RoCE)处理需求,又具备一定的卸载CPU处理能力和可编程性.以Mellanox最新的ConnectX-6产品为例,其在一定程度上提供对数据平面的可编程处理和硬件加速,提供虚拟化、SDN的支持,可硬件卸载网络虚拟化中的VxLAN(virtual extensible local area networks),NVGRE(network virtualization use generic routing encapsulation)等协议,卸载网络安全中的部分加解密运算,支持NVMe-oF等用于存储场景的存储协议处理,支持GPU-Direct等机器学习应用场景中数据零拷贝的低延时通信.

小结:1)在性价比方面,基于ASIC的智能网卡,基本上可以满足多数通用网络处理的应用场景,可以在预定义的范围内对数据平面进行可编程处理,并提供有限范围内的硬件加速支持,如果是批量使用,在性价比上会有较大的优势;2)在编程复杂度方面,基于ASIC的智能网卡虽不及基于MP的智能网卡那么简单,却也远易于基于FPGA的智能网卡;3)在使用灵活性方面,基于ASIC的智能网卡相比于其他的智能网卡灵活性最差,对于更复杂的应用场景则显得力不从心,更明确地来说,单纯基于ASIC的智能网卡应该称之为卸载网卡,因为其可编程性并不完全.从长远的角度分析,其定制化的逻辑,对于已经成熟的应用场景虽然能够提供显著的性能提升,但是随着时间的推移,新的应用场景对智能网卡将会提出新的功能要求.目前,很多厂家采用ASIC+GP的设计方式来解决这一问题,类似前文Mellanox的BlueField产品(集成了ConnectX-5和ARM).同时,商家不断地更新ASIC产品,将成熟的技术定制化到网卡中,如ConnectX系列已更新到第6代.可见,体系结构中灵活性和性能之间的斗争依然在继续着.

1.2 按数据通路分类

从核心处理器与数据通路的关系来分析,目前智能网卡的设计主要有On-Path,Off-Path两大类设计[13].其中On-Path架构如图3(a)所示,核心处理器在数据发送、接收的路径上,直接对数据包进行处理;Off-Path架构如图3(b)所示,核心处理器并不在数据发送、接收的路径上,而是通过网卡上的交换部件(图3(b)中的SmartNIC Switch)决定将数据直接送往主机端还是由核心处理器做处理.下文将依次对On-Path,Off-Path智能网卡的研究和商业产品进行综述.

Fig. 3 On-Path,Off-Path SmartNIC architecture

1.2.1 On-Path设计

如图3(a)所示,基于FPGA,NP-SoC,ASIC的智能网卡一般采用On-Path的设计架构,NP处理器核、FPGA、ASIC位于数据通路上,便于处理器直接对数据进行预定的处理.基于NP-SoC的智能网卡,如华为的IN系列、Cavium的LiquidIO系列、Netronome的Agilio系列,基于FPGA的智能网卡,如微软Catapult系列、Mellanox Innova系列,基于ASIC的智能网卡(卸载网卡),如Mellanox的ConnectX系列、Cavium的FastLinQ系列,均属于On-Path架构.当主机端服务器需要发送数据时,主机端处理器向网卡下达发送请求,一般包括具体的处理指令(如发送、原子操作等普通指令,或者用户自定义的其他操作)和包地址,网卡中的DMA引擎从主机端内存中取出数据到网卡中的缓冲区,然后由核心处理单元(FPGA/ASIC/NP)进行对应的数据处理,处理完的数据再由发送端口发出.反之,当主机端服务器接收数据时,接收的数据经网卡缓冲区,直接由处理器核进行对应的数据处理,处理完成后通过DMA引擎将数据存入主机端对应的内存中.

On-Path架构的设计方式优点在于处理器可以直接对数据通路上的网络数据进行处理,而使用该架构的处理器(FPGA/ASIC/NP)一般具有较高的并行度,可以提供低时延、高带宽的服务;缺点则是,在编程灵活性和易用性方面不及基于GP-SoC的智能网卡.因此,On-Path架构在大多数普通需求的应用场景下能够提供较好的性能,而在较为复杂的情况下,如Bare -Metal、以智能网卡为中心搭建加速平台等情况[4,6]下,该架构的智能网卡则略显逊色.

1.2.2 Off-Path设计

如图3(b)所示,基于GP-SoC的智能网卡一般采用Off-Path的设计架构,GP处理器核与数据通路松耦合,位于网卡上的可编程交换部件根据预先设定的规则决定数据流的转发对象是否为GP处理器核.基于GP-SoC的智能网卡,如Broadcom的Stingray系列、Mellanox的BlueField系列,均属于Off-Path架构.当主机端服务器需要发送数据时,主机端处理器向网卡下达发送请求,一般包括具体的处理指令(如发送、原子操作等普通指令,或者用户自定义的其他操作,包含网卡中交换机用于转发的标志)和包地址,网卡中的DMA引擎从主机端内存中取出的数据经过网卡中交换机的转发,或者流向通用网卡ASIC逻辑直接由发送端口发出,或者流向GP处理器核,由GP处理器核进行对应的处理,最终再由发送端口发出.反之,当主机端服务器接收数据时,数据先通过网卡ASIC,然后经网卡中交换机转发,或者直接通过DMA引擎存入主机端对应的内存中,或者进入GP处理器核处理并根据处理结果进行后续操作.

Off-Path架构的设计方式优点有:1)数据通路与网卡处理器松耦合,对于无需特定处理的普通数据流可以直接旁路GP处理器;2)使用该架构的处理器一般具有较高的编程灵活性和易使用性,可以运行独立的Linux操作系统,能够应对复杂的应用场景.缺点则有:1)网卡上用于数据转发的交换部件需要具备灵活的可编程性和高效的转发能力,如果设计不合理将很有可能成为性能瓶颈,因而使用Off-Path架构的Mellanox BlueField和Broadcom Stingray分别研发了ASAP2(accelerated switching and packet processing)技术[63]和TruFlow技术[64]用于提高网卡交换部件的可编程性及转发能力;2)使用该架构的GP处理器在处理并行性方面较差,相比于其他架构,对于固定模式的数据流处理性能略差.因此,Off-Path架构更适用于较为复杂的应用场景下,如Bare-Metal服务器、以智能网卡为中心的加速平台等[4,6],可以充分利用GP的易用性和灵活性,而对于较为成熟的应用场景,如NFV卸载、网络协议卸载等,则Off-Path架构并非最优选择.

1.3 基础架构小结

表1从智能网卡的核心处理器和数据通路架构2个维度,对智能网卡基础架构部分内容进行总结,对比了不同基础架构设计的特性.图4以相关公司官网站发布的产品简介和公开的论文为时间节点,从核心处理器和数据通路架构2个维度,列举了近10年典型智能网卡相关设计成果.

Table 1 The Comparison of Different SmartNIC Designs

从核心处理器分析,总体而言,目前,产业界对核心处理器的选择仍众说纷纭,基于FPGA的设计除了被Microsoft和Xilinx采用外,因FPGA产品逐渐成熟,并有Catapult作为设计框架参考而受到很多小公司青睐;而基于MP,ASIC的设计则需要较成熟的网络技术积累,因而只有少数典型的网络设备供应商推出对应的产品.从技术发展的角度分析,已经成熟的网卡卸载技术(如协议处理、特定加解密计算等)将被逐渐定制化到网卡ASIC芯片中;趋于成熟且需要一定编程灵活性的功能(如Match-Action操作)则使用NP处理可以获得更高的性价比和易用性;对于涌现出来更为复杂的新需求(如Bare-Metal服务器)则需要GP来做更通用的处理.智能网卡的设计将根据应用的需求走向多元化、异构化,如Netronome Agilio系列网卡分为CX,FX,LX三大类产品,分别对应计算节点、Bare-Metal、服务器节点3种应用场景,其Agilio FX智能网卡中已集成了NetXtreme网卡控制器ASIC、NFP网络处理器、ARM通用处理器3种处理器,是异构化的典型代表.

Fig. 4 SmartNIC milestone list

从数据路径分析,On-Path架构更适合数据密集型应用场景,尤其适合传输路径上的流式处理,这也与此架构对应的FPGA,ASIC,NP处理器特性相符合;Off-Path架构则更适合控制密集型应用场景,这也与此架构对应的GP处理器特性相符合.后文将对数据密集型和控制密集型的编程框架进行综述.

2 智能网卡编程框架

智能网卡的处理器架构是设计智能网卡的硬件基础,智能网卡的编程框架则是设计和使用智能网卡的软件基础,软硬协同是设计智能网卡的重要方法.在此,将智能网卡的编程框架设计分为面向数据密集型和面向控制密集型两大类设计,分别偏向于对数据流和控制流提供更友好的支持.

2.1 数据密集型

网络带宽发展迅速,正向着Tbps时代迈进,尤其是在云环境、虚拟化的情况下,出现了大量的应用需要对数据流进行模式固定、运算简单的可编程操作,如防火墙、网关、深度包检测等网络功能,以及Hash计算等,我们称这种计算相对简单、模式固定、控制相对较少的应用为数据密集型应用.智能网卡作为一种可编程网络终端设备,具备高效的I/O处理能力、内存读写能力、可观的软件处理开销,是智能网卡设计的必然需求[2,7],而智能网卡编程框架是其中的重要一环.我们把智能网卡编程框架中,对数据密集型应用提供良好的编程支持和性能加速的编程框架,称为数据密集型编程框架.

数据密集型智能网卡编程框架至少要具备3个特点:1)尽可能减少主机服务器在数据通路上对数据搬移的开销;2)向用户提供具备一定编程能力的接口,满足可编程应用的需求;3)将软件编程和硬件架构之间进行合理的映射,以实现对数据流进行高效的流水处理.

RDMA作为一种在高性能计算中常用的通信方式,近些年逐渐被广泛应用到数据中心网络中[65-70],使用RDMA通信可以旁路主机端操作系统、减少通信中数据拷贝的开销,提供低延时、高带宽的通信性能,是进行数据通路优化的一种重要方式.Mellanox的OFED[71]提供了标准的RDMA支持,Portals 4[72]也提供了类似RDMA的通信接口,FlexNIC[7]和sPIN[2]则在支持RDMA的基础上对网卡进行了可编程功能的强化和流水处理的设计.此外,基于FPGA的ClickNP[21]和基于MP的Floem[73]也是典型的数据密集型智能网卡编程框架,后文将对以上提到的典型究进行介绍.

如图5所示,FlexNIC[7]的设计继承了RMT(reconfigurable match table)可编程交换机架构[38],对数据包的处理分为入口流水线和出口流水线2部分,每一部分都包含包解析、Match-Action(匹配包头字段并执行对应的操作)、数据包整合3个处理阶段,可编程的功能以Match-Action的形式映射到多核处理器中,对数据包中自定义的域进行流水处理,由于智能网卡需要与主机端进行数据交互,如图5中左斜阴影部分所示,FlexNIC的设计中增加了DMA操作流水线和DMA引擎.FlexNIC使用P4[37]语言进行编程,并且增加了部分原语用于简化编程.这种设计方法,对于简单的操作,经过一次流水便可以完成处理;但是,对于复杂的操作,需要的Match-Action操作数量大于流水线中Match-Action单元总数n时,未处理完的数据包需要重新进入流水线进行新一轮流水处理,这样将大大增加处理延时.

sPIN[2]的设计则是在Portals 4[72]的基础上进行了数据通路的进一步优化和可编程功能的强化,充分利用了智能网卡片上内存和处理单元,在数据到达接收端网卡后,网卡直接向发送端返回响应,然后由网卡进行数据处理并搬移到对应的应用存储空间,减少了接收端对数据包的响应时间,将RDMA的性能进一步提高.如图6所示,sPIN将每个消息的多个数据包处理划分为3部分,即包头handler、负载handler、完成handler,由智能网卡上的1个或者多个逻辑处理单元(handler processing unit,HPU)进行流水处理,HPU可以映射到智能网卡的多核处理器上.在编程方面,为了方便对智能网卡进行管理和对3种handler进行编程处理,sPIN对Portals 4 编程接口进行了扩充,提出了P4sPIN编程接口,提供了智能网卡片上内存管理、HPU管理、handler处理的多种原语.

Fig. 5 FlexNIC (RMT-enhanced DMA architecture)

Fig. 6 sPIN SmartNIC network interface design

微软针对基于FPGA的智能网卡——Catapult架构提出了ClickNP[21]编程框架,用于商用服务器中,以提供高性能的网络功能,如防火墙、网关、负载均衡器等.ClickNP向用户提供了类似C语言语法、面向对象的编程语言,并且提供了近100个处理单元(elements)库,解决FPGA编程困难的问题,用户将各个功能模块以elements为对象进行编写,如图7所示,编写的程序经过编译器的预编译后得到中间C文件,然后由FPGA厂商提供的后端编译器和C编译器分别对运行在FPGA和主机CPU的程序进行编译处理,将不同的任务分配到FPGA和CPU中,达到FPGA与主机端CPU协同工作的效果.FPGA内部采用了模块化设计,映射到FPGA的多个elements可以异步并行处理数据,类似于多核处理器,elements之间通过缓冲通道连接,而非共享内存.ClickNP的设计主要面向商用服务器中网络功能加速的应用场景,在后续工作AccelNet[3]中,微软使用智能网卡卸载了SDN协议栈,向虚拟机提供高效的SR-IOV功能,均是典型的数据密集型设计,对控制复杂的应用逻辑则并非最佳选择.

Fig. 7 ClickNP architecture(used in Catapult)

华盛顿大学研究团队提出基于数据流的CPU-SmartNIC协同编程框架——Floem[73],运用类似于ClickNP模块化设计的思想,将数据包模块化处理逻辑组件——elements(C语言实现的Python类),映射到智能网卡的硬件资源上,并设计了通用的elements库便于用户编程,向用户提供了编程语言、编译器、运行时管理一整套技术支持.通过编程抽象用户可以完成硬件资源访问、逻辑映射、数据包元数据访问、计算卸载、应用加速等操作,编译器负责维护CPU和网卡之间的数据传输和缓存机制,运行时则负责DMA数据通路的优化.文中使用基于多核网络处理器的智能网卡——Cavium LiquidIO作为硬件平台,实现了键值存储(key-value store, KVS)、分布式实时数据分析(real-time analytics, RTA)系统的智能网卡应用加速.

2.2 控制密集型

数据密集型智能网卡编程框架设计注重对数据流提供高效的数据通路和流水处理,与网络功能、协议处理应用场景更加匹配;而控制密集型的编程框架则更注重对数据进行控制相对复杂的处理,卸载到智能网卡的计算模式一般相对简单,通信模式并不固定,有一定的延时敏感要求,因此,控制密集型设计在调度策略、性能隔离、操作系统支持等方面更有优势,与分布式应用、Bare-Metal场景更加匹配.控制密集型编程框架的典型设计有iPipe[13],NICA[74-75],INCA[76],λ-NIC[4].

鉴于actor[77-79]编程模型支持异构硬件、并行处理、独立内存、动态迁移的特点,华盛顿大学研究团队在actor编程模型的基础上进行设计,提出面向多核SoC硬件平台的iPipe[13]编程框架,iPipe的贡献主要包括调度器、分布式内存抽象和安全隔离3个方面.iPipe的核心是将FCFS(first come first serve)和DRR(deficit round robin)调度策略进行结合的混合调度方案,用来协调调度CPU和智能网卡之间开销不断变化的执行任务,最大化智能网卡资源的利用率;分布式内存抽象是指各个actor之间不共享内存,每个actor拥有独立的ID,actor可以进行灵活的迁移;安全隔离是指维护多个actor在智能网卡上可以并发执行、互不影响,并对意外状况作出反应.由于灵活的调度策略和编程抽象,与Floem相比,iPipe更适合复杂逻辑的分布式应用加速,如RTA,KVS等,对于描述状态简单甚至stateless的网络功能卸载,基于FPGA的设计更合适,文中实现了防火墙、网关、深度包检测等网络功能,其性能均不及ClickNP.

Mellanox研究团队提出了基于FPGA智能网卡加速数据平面应用的软硬件协同框架——NICA[74-75],并用于自身的Innova系列智能网卡,与微软的ClickNP框架不同,NICA框架突破了基于FPGA智能网卡在支持操作系统、虚拟化方面的障碍, 适用于Bare-Metal、多租户的应用场景.NICA通过新的ikernel(inline kernel)抽象,动态管理智能网卡上的一个或多个专用的硬件加速部件——AFUs(accelerator functional units)[80],同时,NICA集成了VMA内核旁路协议栈[81],实现了KVM hypervisor中AFU的虚拟化,满足云环境下对网络数据流进行灵活的自定义处理需求.其中,一个ikernel抽象即是一个OS对象,代表用户程序中的一个AFU,对进程来说是私有的,可以保护AFU的应用和网络状态.AFU可以由用户自定义,亦可以由云产商提供,根据需求部署,AFU支持I/O通道的虚拟化和细粒度的时分复用来实现NICA对虚拟化的支持.文中实现了KVS和IoT身份认证2种应用的加速.

在网计算的抢占式处理编程框架INCA[76]则在Portals 4的基础上,实现了优于sPIN的在网计算处理模式,解决了sPIN流式处理中智能网卡的处理能力受计算复杂度(指令数量)、数据包速率、计算单元数量限制的问题.INCA以抢占式的触发机制对智能网卡的计算资源进行更高效的调度,实现deadline-free的处理效果,即对每一个到达的包都能进行及时的处理,将已处理且未能完成处理的包的处理状态保存并发往下一节点做后续处理,支持更加复杂的计算.此外,网络空闲时,智能网卡中的包处理引擎(packet processing engine,PPE)可以用于非网络数据的处理.

基于NP多核智能网卡的编程框架λ-NIC[4]则面向云计算模式中的serverless负载(诸多细粒度的定制化小程序,如Lambdas),在P4语言Match-Action编程抽象[37]的基础上,设计了基于事件的Match-Lambda编程抽象,支持更加复杂的操作,数据包通过Match之后被发往主机端CPU或者智能网卡上对应的Lambda处理单元(NP核)进行处理.同时,该工作使用远程过程调用(remote procedure calls,RPC)技术和RDMA技术加速通信,并对智能网卡存储空间访问和Lambda任务分配进行了优化,实现了数据隔离和性能隔离.

2.3 编程框架小结

根据数据密集型和控制密集型的分类,我们对编程框架面进行总结,得到表2.数据密集型和控制密集型的设计分别强调对数据流和控制流处理,数据密集型的设计在流水处理和并行度上表现更好,更适合模式较为简单的应用,如网络功能;控制密集型的设计则在灵活性、资源调度、性能隔离,以及面向Bare-Metal,Serverless的OS支持方面更好,更适合云计算、控制略显复杂的分布式计算应用.2种编程框架的设计均有基于Portal 4,P4 Match-Action的研究,在硬件方面对多核和FPGA方式都有实现,但从性能上看,面向数据密集型的设计更适合FPGA,面向控制密集型的设计更适合多核架构.

根据以上工作的分析,我们发现编程框架的设计过程中需要注重5点:1)模块化设计,如ClickNP,NICA均采用了模块化设计思想;2)智能网卡与主机端CPU协同设计,这一点在基于Click包处理编程抽象[82]的许多编程框架中皆有体现,如Snap[83-84],NBA[85],ClickNP[21],UNO[86],在λ-NIC,INCA的设计中也有实现;3)良好性能隔离和虚拟化的支持,这一点成为了近些年研究中的一个热点问题,如性能隔离在iPipe[13],NICA[74-75],λ-NIC[4],FairNIC[70]中皆有体现,对网络虚拟化的研究也受到业内的重视,如AccelNet[3],Freeflow[68],MasQ[87]等;4)优化调度策略,提高智能网卡的资源利用效率,如PIEO[88],Loom[89],在包调度方面提供更加灵活高效的硬件支持,iPipe[13],λ-NIC[4],FairNIC[70]则在网卡资源方面进行更加合理的调度管理;5)简洁的编程接口,兼顾易用性和灵活性,这一点在ClickNP,NICA,λ-NIC等工作中皆有体现.

Table 2 Comparison of Different SmartNIC Programming Framework

3 应用方向

更快的网络速率、更加复杂的处理场景、更高昂的网络处理开销催生了智能网卡,智能网卡作为一种应用驱动的产物,在众多场景中得到应用.本节将从网络协议处理、网络功能、数据中心应用、科学计算应用4个方面介绍智能网卡的典型应用场景.

3.1 网络协议处理

智能网卡作为一种具备一定编程能力的网卡,其最基础的功能就是快速处理网络协议,提供高效的网络I/O.

在网络协议种类方面,传统的网卡多是仅支持一种网络,标准的以太网,或者标准的Infiniband,或者自定义的网络协议.部分智能网卡(如Mellanox网卡)则可以根据用户设置,兼容以太网和Infini-band,除了传统的TCP/IP协议,智能网卡大多支持RDMA协议或者其他加速数据通路的协议,如Portals 4,RoCE v1/v2,iWARP,在数据中心或者高性能计算机集群中提供低延时、高带宽的网络服务;智能网卡甚至支持存储方面的协议,如NVMe-oF[53].此外,如Mellanox产品还支持MPLS(multi-protocol label switching)协议、GPU-Direct,迎合当下虚拟化、人工智能的应用场景.

在网络协议处理方面,以微软为例,早期的工作中已经将TCP/IP协议中模式固定、计算简单的处理卸载到网卡,如TCP校验(chueksum)、IPsec(Internet protocol security)的卸载[90];之后,逐渐有更多的网络协议处理卸载到网卡上,如RSS卸载[91]、VMQ(virtual machine queues)卸载[92].近些年,为加速虚拟化的云场景的网络处理,如NVGRE,VxLAN的处理也在网卡中得到卸载处理[93],进一步释放主机端CPU.此外,智能网卡对多种加解密方法提供加速,如Stringray智能网卡,可以卸载Hash计算、SHA、MD5、PKA(public key accelerator)等.在学术界,不断有智能网卡卸载网络协议的新方式提出,如TriEC[94]对现有智能网卡卸载纠删码(erasure coding, EC)的方式进行了改善,提出3分图式纠删码卸载模式.1RMA[95]则对现有RDMA网络可靠连接高开销的通信模式进行改善,提出Connection-free的网络连接模式,同时通过软件保证连接的可靠性,并且对安全方面提供了网卡卸载支持.

3.2 网络功能卸载

网络功能的作用是通过一系列方式对数据包进行检测和修改,典型的网络功能有防火墙(firewall)、网关(gateway)、入侵检测(instruction detection system,IDS)、负载均衡器(load balancer)、域名服务(domain name service,DNS)等.微软基于Catapult[19]硬件架构的ClickNP[21]编程模型一文中主要对卸载网络功能进行了实现和评估,iPipe[13]中也对卸载网络功能进行了实现和评估,文献[14]则对DNS进行了卸载,从网络功能的性能上看基于FPGA的ClickNP优于基于多核处理器的iPipe,可见,相比于数据中心中的其他复杂应用,逻辑相对简单的网络功能更适合流式处理的实现方法.

此外,智能网卡在卸载SDN协议栈、加速SR-IOV[3]、卸载NFV、卸载OVS[96]方面也有很好的应用场景,在微软的AccelNet[3]工作中得到了充分的体现,NetBricks[97]也对NFV进行了卸载.在产业界,Mellanox则将加速OVS的ASAP2[63](accelerated switching and packet processing)技术应用到新一代的智能网卡产品中.

3.3 数据中心应用

智能网卡在数据中心应用的十分广泛,在此总结为5类:

1) 卸载一致性协议.如对Paxos[98-99]一致性协议进行卸载,其中有在交换机端的卸载工作,如文献[100]中使用P4交换机完成了Paxos一致性协议的卸载,也有在网卡端完成一致性协议的卸载,如文献[14]中的P4xos、文献[101]均在网卡上完成了一致性协议的卸载工作.

2) 卸载KVS相关的应用.如KV-Direct[11], Lake[12],加速分布式共享内存(distributed shared memory,DSM)[102-103],如FaRM[104],Grappa[105].在智能网卡软硬件设计的相关研究中,如iPipe,Floem,FlexNIC,sPIN,NICA等,皆以KVS作为性能评测的重要指标,在商业智能网卡产品中,KV加速部件也已成为重要的组件.

3) 加速搜索引擎.在文献[19-20]中,微软加速了Bing搜索引擎业务,将吞吐提高了95%.

4) 加速人工智能应用.如Lynx[6],搭建了以智能网卡为中心来调度管理异构AI加速器的神经网络训练、推理加速平台,将CPU从任务中释放出来做其他事务的处理;而文献[15-17]则把网络设备作为一种神经网路加速器来使用,卸载神经网络模型中的某些层甚至整个模型,数据在网络传输中被计算,降低延时的同时减轻终端加速器的负载.

5) 提供虚拟化、云环境支持.如微软在AccelNet[3]中加速SR-IOV、卸载OVS,Freeflow[68], MasQ[87]则对RDMA网络进行了虚拟化,向多租户提供接近物理网卡性能的虚拟RDMA接口.而FairNIC[70],PIEO[88],Loom[89],1RMA[95]则对云环境下的包调度、性能隔离和数据加密方面进行了研究.Pythia[106]则对RDMA数据安全性方面进行了侧信道攻击的尝试,对网卡安全提出了更高的要求.

3.4 科学计算应用

智能网卡在科学计算中的应用首先表现在通信加速上,如利用RDMA的特性进行非连续数据通信的加速[5,18,107]、集合通信加速[108-110]、MPI加速[5,107,111-112].其次,智能网卡在科学计算的应用中也可以起到卸载计算的作用,如集合通信加速时Allreduce操作中的计算、MPI Tag-Matching[112]均可卸载到网卡处理.再者,针对科学计算应用中存在大量的矩阵计算的特点,在INCA[76]中,作者使用网卡进行了矩阵转置、卷积、矩阵乘等与应用紧耦合的计算任务的卸载,可将高性能计算应用加速11%.

3.5 应用方向小结

智能网卡在分布式应用中几乎无处不在.在传统的网络通信方面,智能网卡可以满足RDMA,TCP/IP等协议下,基本的网络数据传输甚至部分网络协议的硬件卸载,在如今数据中心网络虚拟化的大趋势下,智能网卡可以提供网络功能的卸载、SR-IOV的支持、虚拟交换机的卸载等,将部分CPU的资源从网络处理中释放出来.E3[113]研究表明,高效利用智能网卡中的低功耗处理器处理合适的数据中心任务可以将能效比提高3倍;在用户应用方面,智能网卡在加速一致性协议、KVS相关应用、搜索引擎、分布式共享存储、神经网络等数据中心应用方面皆有优秀表现,在科学计算领域的集合通信加速、MPI加速、矩阵计算中也表现出重要价值.

相信在未来,依然会有各色的新应用驱动智能网卡向更强大的方向发展,如何适应新的应用需求将是智能网卡设计中的一个重要问题.在此,我们从应用场景的专用性和通用性2个方面做简单的总结:1)专用性.智能网卡是应用驱动的产物,在应用相对固定的情况下,如网络功能卸载、机器学习模型训练、KV处理、特定算法的加解密,可以针对特定的一类或者几类应用,做针对性的加速设计,如采用FPGA架构、ASIC的加速部件.2)通用性.在应用场景相对复杂的情况下,如云环境、多租户场景,需要通用性强的智能网卡,可以采用基于网络处理器、甚至通用处理器的多核架构,提供灵活性更友好的编程接口,满足新应用场景下的可用性.

4 热点问题

目前,在产业界和学术界中,涌现出各种智能网卡相关的热点问题,在本节将分为架构及编程框架、应用、协议三大类进行介绍.

4.1 架构及编程框架探索

目前智能网卡的硬件架构主要分为三大类,分别是基于FPGA,MP,ASIC的设计,如1.3节中表1中所示各种架构在性能、成本、功耗上各有千秋.此外,近几年,粗粒度可重构架构[114](coarse-grained reconfigurable architecture, CGRA)作为一种使用多个可重构单元解决领域专用的处理器设计方案,以优于FPGA 1~2倍的能效比、更接近ASIC的性能、优于FPGA的编程灵活性,得到业内的认可和关注.在智能网卡的设计中,ClickNP虽是基于FPGA的设计,但是其模块化的设计与CGRA有异曲同工之妙;GP-SoC的多核设计思路成为部分厂家的选择,但是GP的通用性和易用性在另一方面则限制了专用性和能效比;NP-SoC的设计更像CGRA,但CGRA具备更短的功能重构时间,支持配置流和数据流同时驱动.目前,CGRA的技术还不够成熟,如何设计智能网卡中的可重构单元、如何建立可重构单元之间的拓扑关系(Mesh,Torus等)、是否增加其他处理器进行功能辅助、有异构处理器存在的情况下是否采用共享内存的设计、可重构单元之间使用类似于RMT[38]架构的流水处理还是类似于dRMT[115]的独立处理,各种问题需要进一步的探索.

近5年,涌现出诸如ClickNP,Floem,FlexNIC,sPIN,NICA等多种出色的智能网卡编程框架[2,7,21,73-76],定制与硬件结构协同优化的编程框架、功能调度机制[13]、任务切分机制[21,82-86,116]十分重要,新的硬件架构需要配套的编程框架作为支撑方可最大化发挥智能网卡的通信、计算能力.

4.2 应用探索

如本文第3节所介绍,智能网卡在网络协议处理、网络功能卸载、数据中心应用、科学计算应用中均表现出强大的加速能力.可见,智能网卡正在逐渐将成熟的加速部件模块化集成,同时,卸载的任务与用户应用的关系越来越紧密,如今已有使用智能网卡卸载神经网络模型的运算[15-17]、矩阵计算[76]的探索.在Bare-Metal和云环境中,智能网卡在提供虚拟化支持、性能保障、性能隔离等方向也将继续发挥重要作用[3,70,74-75,87,89,117].而使用智能网卡为中心搭建加速器互联平台——Lynx[6]的探索更是让人耳目一新,可见,智能网卡正在尽可能卸载更多力所能及的CPU处理任务,将CPU资源释放出来用于处理控制逻辑更加复杂的任务.

4.3 协议接口探索

智能网卡的可编程特性使其在通信协议的处理上具备一定的灵活性,为满足不同应用的需求,部分研究工作对已有的协议或者接口进行了拓展.sPIN[2]对 Portals 4[72]进行拓展,增加了智能网卡对加速通信和计算的支持;P4[37]则完全定义了以Match-Action为基础的协议无关的可编程包处理模式;StRoM[118]则对RDMA语义进行了拓展,增加了网卡进行可编程处理的的支持,如设计了RDMA RPC verb用于支持对RPC的加速处理;RIMA[69]针对Infiniband协议中的共享接收队列(shared receive queue, SRQ)造成的内存浪费问题,设计新的append queue verb及处理架构,在保证吞吐和时延的情况下实现了对SRQ的缓冲区更高效的管理;1RMA[95]则设计了Connection-free的连接模式,解决RDMA在数据中心中扩展性差的问题.在应用需求更加灵活的情况下,拓展更丰富的智能网卡协议接口,甚至是制定标准化的面向智能处理的通信协议也将成为可能.

5 智能网卡设计与测试

5.1 设计方法

基于第1~3节对智能网卡相关工作的认识和理解,我们总结出一种系统的智能网卡设计方法,主要由图8所示的设计步骤组成:

Fig. 8 SmartNIC design method

1) 明确应用场景.智能网卡是一种典型的应用驱动产物,因此,确定欲设计的智能网卡使用的底层协议(以太网、Infiniband,或者其他自定义协议)、卸载应用的主要类型(数据密集型、控制密集型)、虚拟化的支持情况等,是进行架构设计之前必要的工作.

2) 明确智能网卡设计的基础处理单元.根据明确的应用场景和成本预算,确定使用FPGA,ASIC,MP,还是CGRA 作为基础处理单元.在应用场景相对固定的情况下,需要采用专用性强的设计,可以针对特定的一类或者几类应用,做针对性的加速设计,可以优先考虑FPGA,ASIC,CGRA作为基础处理单元;在应用场景相对复杂的情况下,如云环境、多租户场景,需要采用通用性强的设计,可以优先考虑基于网络处理器、甚至通用处理器的MP架构,提供灵活性更友好的编程接口,满足复杂的应用场景.此外,可以考虑使用模块化开发的思想,对智能网卡进行完全异构化的设计,比如通用处理器搭配卸载成熟应用的专用加速部件和处理器网络协议的专用网络控制器,这一步可以参考1.3节、3.5节、4.1节.

3) 明确数据通路架构.根据设定的的应用场景和选择的基本处理单元选择On-Path或者Off-Path的数据通路设计.一情况下,On-Path架构对应的基础架构一般为FPGA,ASIC,NP,更适合数据密集型应用场景,可以对数据直接进行传输路径上的流式处理;Off-Path架构对应的基础架构一般为GP处理器,更适合控制密集型应用场景,可以对数据进行更为复杂的通用处理.这一步可以参考1.3节及2.3节.

4) 设计软硬件协同编程框架.根据明确的应用场景、处理单元、数据通路设计编程框架,同时考虑编程框架的调度策略、资源使用效率、灵活性、易用性、可扩展性、虚拟化下的性能隔离以及智能网卡与CPU的协同工作问题,这一步可以参考2.3节表2.

5) 仿真验证.对智能网卡进行软硬件协同设计开发周期漫长,尤其是硬件开发更为繁琐,确定合适的设计架构和设计参数是提高网卡设计效率的重要环节,因此,在设计的不同阶段,通过适当的软件模拟、硬件仿真验证是解决部分设计问题的重要方式,然而目前通用模拟器GEM5,NS-3等在网卡仿真方面依然存在适用性、准确性等问题,需要开发者自行开发对应的模拟器来进行系统级的仿真实验.

6) 对接应用.将智能网卡系统平台与真实应用对接,优化应用、充分发挥智能网卡的性能特性,由于智能网卡的设计周期较长,面对新的应用场景,需要及时发现、总结、解决智能网卡的设计问题,迭代新的设计版本.

5.2 测试方法

该部分对智能网卡的测试分为3个阶段进行介绍,涉及到开发阶段的软件仿真测试分析、硬件验证测试分析和商业产品测试分析.

1) 模拟器模拟测试分析.很多软硬件协同设计在具体设计方案以及相关参数确定之前需要进行细致的模拟分析,因此模拟器分析在芯片设计,尤其是复杂应用场景下的网络设计中十分重要.在智能网卡的模拟器测试分析中,需要重点关注4个方面:① PCIe读写效率;②网卡SRAM,DRAM的开销和使用效率;③调度情况是否达到预期;④在吞吐、延时、使用规模方面是否达到预期.目前,虽然有GEM5,NS-3等系统仿真工具或者网络仿真工具,但是在网卡仿真,尤其是智能网卡仿真方面,没有较成熟的网络芯片微体系结构模拟器,进行细致的仿真需要很大的工程量,但是成熟的模拟测试分析会大大提高智能网卡的设计效率.

2) FPGA验证测试分析.经过模拟分析、修正获得相对成熟的设计框架和设计参数之后,进而可以使用FPGA进行RTL(register transfer level)验证,以获取更贴近真实设计的测试效果,FPGA开发、芯片后端验证是一个复杂的过程,需要花费大量的人力和物力,并且需要相当的集成电路设计经验.在此,不做详细的介绍.

3) 智能网卡产品测评.对于商业智能网卡产品,可以从5个方面进行测评分析:①吞吐量、时延、线速处理能力,这3个方面是一个网络产品的基础性能指标;②支持的规模,如支持RDMA的智能网卡可以支持到多少QP连接;③卸载性能,对于相同应用的卸载场景,测试网卡资源使用效率情况、主机端CPU开销占比情况;④编程接口的灵活性、编译器的编译效率,比如测试从用户编写的特定的智能网卡应用程序到网卡发挥卸载作用的配置时间(如Loom[89]中,测试了Mellanox ConnectX-4网卡配置QoS的时间)、对比使用纯硬件语言编写应用加速与使用编程接口经过编译器编译获得的硬件综合效果以及应用加速效果等;⑤核心处理器的处理能力,比如测试基于NP智能网卡的单核处理能力[13]、基于FPGA智能网卡的模块间并行处理吞吐等.

6 总结展望

本文总结了自智能网卡兴起之后相关的重要学术研究和产业界典型产品.对基础架构设计进行了基本处理单元、数据通路2维分类,分析对比了不同基础设计架构的优缺点;对编程框架进行了数据密集型和控制密集型分类,并结合基础架构进行了对比分析;对智能网卡的重点应用方向进行了归类总结;此外,本文指出了目前智能网卡相关的热点研究问题.最终本文根据总结和分析,提出了一种系统的智能网卡设计思路和测试方法.

目前,基于不同基础架构的智能网卡几乎都有产业界的商业产品,其内部微架构的具体实现方法对外均是不透明的,至今,业内没有较为一致的评价标准.因此,无论从学术角度还是产业发展的角度,对基础架构的分析依然需要做很多细致的工作,通过不断的架构探索、更加细粒度的测试来比较分析不同微架构实现智能网卡的详细差异,对性能、能效比、应用场景展开细致的讨论,提出可靠的数据分析,这对智能网卡的设计将产生重要的指导作用.此外,高效的软硬件协同编程框架和不断涌现出来的应用需求对智能网卡的系统化设计也提出了更高的要求,甚至,面向智能网卡的网络协议、面向在网计算的智能化网络处理模式也需要进行标准化的尝试.

作者贡献声明:马潇潇负责搜集、整理产业界和学术界的智能网卡研究工作,以及文章整体架构设计、撰写和修改;杨帆负责智能网卡基础架构部分的分类和特性分析,以及智能网卡软硬件协同设计部分的指导;王展负责相关研究现状的补充和未来研究热点的指导;元国军负责智能网卡应用场景相关内容的补充,尤其是智能网卡在机器学习中的应用;安学军负责文章分类逻辑的调整、整体思路的指导,以及文章最后的总结.

猜你喜欢

密集型网卡智能网
交通运输部:扩大新能源智能网联汽车应用
智能网联汽车漏洞管理实践探索
联网全靠它 认识笔记本的无线网卡
密集型呼吸灯灯串设计与实现
专利密集型产业技术创新效率的研究
智能网联汽车为冬奥会添动力
加快推动知识产权密集型产业发展的思考
智能网联汽车仍面临三大挑战
《专利密集型产业目录(2016)》(试行)印发
挑战Killer网卡Realtek网游专用Dragon网卡