1 FPGA简介
FPGA(Field Programmable Gate Array),又称为现场可编程门阵列,是在可编程阵列逻辑(PAL)、门阵列逻辑(GAL)、可编程逻辑器件(PLD)等可编程器件上发展来的,同时FPGA与专用集成电路ASIC又有一定的相似,是半定制的电路,所以FPGA在可灵活编程的基础上,兼具了集成电路功耗低、逻辑资源多的优点。
FPGA结构和编程灵活,修改FPGA内部编程逻辑只需要几十秒的时间,从简单的74系列电路到复杂的CPU逻辑都可以利用FPGA实现;FPGA集成度很高,已经进入16nm时代,逻辑单元已经达到数百万,同时集成丰富的专属硬核单元;FPGA使用范围很广,数据中心、通讯领域、控制领域、航天领域等都能看到FPGA的身影。简单来说,FPGA更像一个庞大的PCB,可以根据需要自由的改变数字电路的设计,并且在发现错误或者需要改动时,随时更改电路设计,不仅大大缩减了传统电路设计的开发周期,减少了PCB的面积,而且提高了系统的稳定性。
现在主流的FPGA生产商有Xilinx、Altera、Microsemi(Actel),其中Xilinx和Altera占据了市场的百分之九十以上的份额,而Xilinx一直占据市场的龙头老大的位置。近年由于技术的更新,Xilinx也有将Altera甩开的趋势。Xilinx的FPGA发展历史可以归类为从器件到平台的进化,从简单的FPGA,发展为片上芯片SOC,然后发展为搭载多核的MPSOC,加入便于通讯的射频采样模块后发展为RFSOC。目前,最新最高端的FPGA芯片是Xilinx今年推出的新款芯片ACAP,ACAP依旧使用了ARM架构,结合了分布式存储器与硬件可编程的DSP模块、一个多核 SoC以及一个或多个软件可编程且同时又具备硬件灵活应变性的计算引擎,片上模块全部通过片上网络(NoC)实现互连。如下图所示:
图1 ACAP示意图
2 FPGA架构
FPGA
是基于查找表技术的,基础架构是逻辑单元阵列LCA(Logic Cell Array)。
随着科技的发展,FPGA逐渐发展为一种片上系统,在可编程逻辑的基础上,整合入了一些常用的ASIC型硬核,如RAM、时钟管理、DSP、SERDES等。FPGA的主要构成可以分为六部分:可配置逻辑模块CLB、可编程输入输出模块、布线资源、嵌入式处理单元、内嵌的底层功能单元和内嵌的专用硬件模块。
可编程输入输出单元简称I/O单元
指的是FPGA的输入输出管脚,用于匹配不同电气特性下的输入输出信号。
FPGA中的I/O单元分属于几个不同的BANK中,不同BANK中的I/O电气接口标准可以不相同,但同一个BANK中的I/O单元电气接口标准均相同。每个BANK的接口标准是由其接口电压VCCO决定的,接口电压可以在芯片初始化的时候完成例化,接口电压确定之后对应BANK的I/O单元电气特性就会确定。根据可例化的接口电压的种类不同,FPGA的接口可以分为普通I/O和特殊I/O,普通I/O就是简单的输入输出引脚,而特殊I/O有时钟信号I/O和高速信号I/O等。特殊I/O可以当普通I/O使用,而普通I/O不能当特殊I/O使用。
图2 I/O内部结构图
CLB(Configurable Logic Block)
是FPGA内的基本逻辑单元。
CLB内部包含一个可配置开关矩阵,矩阵中包含4-6个输入单元、一些选型电路(多路复用器等)和触发器(FF)组成。可以通过配置开关矩阵,来实现组合逻辑、移位控制器和RAM的控制。触发器是FPGA内最基本的内存单元,通常通过配置查找表的形式存在,通过在查找表内输入查找信息的地址,来实现读取对应内存位置的信息。
块RAM(Block RAM)
是一种可支持多种内存形式和接口的可配置随机存储器,可以配置为单端口RAM、双端口RAM、内存地址存储器(CAM)和FIFO等,可以存储字节、对字、全字、双字等格式。
因为块RAM是均匀分布在FPGA中,所以数据读写的延迟较低。块RAM可以将数据传给本地片上总线或处理总线等接口。
布线资源用于连接FPGA内部所有单元,根据布线资源的长度、宽度、工艺和分布位置不同,布线资源的种类也不同。FPGA内部的布线资源可以分为:
全局布线资源、长线资源、短线资源、分布式布线资源。
全局布线资源用于全局时钟和全局复位的布线。长线资源用于远距离模块之间的连线,如各bank之间的连线和第二全局时钟信号的布线。短线资源用于同模块内或者相邻模块间逻辑单元的互连。分布式布线资源应用于专有时钟、复位等控制信号。
内嵌功能模块主要指的是FPGA中的软核模块,常见的软核模块有DLL、PLL、DSP和CPU等。软核具有运行操作系统的能力,一般通过驱动和外部设备交流。软核在FPGA中的角色一般是整个系统的控制者,用于协调FPGA内的资源和数据转移。高端的FPGA芯片一般有四个甚至更多的微处理器,即使低端的也有一个小型的处理器。加入软核后,FPGA逐渐向片上系统SOC过渡。
内嵌的专用硬核等效于ASIC电路,集成于芯片内部,用于增加FPGA功能和提高FPGA性能的一种专用硬核。如用于提高FPGA乘法速度的专用乘法器,用于适用通信总线和接口标准的高速串行收发器SERDES。
3 FPGA为什么适合数据中心
随着摩尔定律进入暮年,intel已经不能通过摩尔定律来成倍的增加CPU的运算速度,同时数据规模和计算要求的成长速度已经超过摩尔定律能带来的速度提升。基于这个原因,2015 年 6 月Intel 宣布以 167 亿美元的价格,收购全球第二大 FPGA 厂商 Altera,致力于研发CPU和FPGA协同工作;2016年3月,英特尔宣布正式停用“Tick-Tock”处理器研发模式,未来研发周期将从两年向三年转变。
FPGA之所以处理速度快,得益于其并行处理的架构,CPU、GPU的架构都是冯若依曼结构,需要指令译码执行和共享内存。
FPGA在版本烧入芯片后每个逻辑单元的功能是固定的,不需要指针来控制。因为内存均匀分布,所以在FPGA中完成布局布线之后,每一块逻辑单元都有专属的内存,数据读写速度更加快。FPGA的结构特性决定了它更适合非规则性多并发,密集计算及协议解析处理场景,例如视频、基因、网络等应用领域的加速。在数据中心的计算密集和通讯密集的场景中,FPGA有着很明显的优势。
通讯密集型场景,如防火墙、网络虚拟化、加密等,这些任务的特点是对数据处理计算能力要求较低,而对通讯速度要求比较高。FPGA在通讯方面的强大性能,广泛受到市场的认可,华为和中兴是XILINX在国内最大的客户就可看出。通讯速度的关键参数有两个,吞吐量和延迟。FPGA上拥有多个可以直连光网络的高度SERDES接口,接口速率可达40Gbps,甚至100Gbps。
在数据处理时,FPGA内部进行并行流水线处理,数据宽度也可以灵活配置,网络包处理的带宽大,速度快、延迟低。CPU在处理网络包时,需要从网卡读取网络包信息,并将处理完成的网络包传回网卡,网络延迟较长,通过增加网卡的方法可以达到提升网络性能的目的,但是这种方法成本高,同时由于CPU的PCIE卡槽个数有限,所以提升性能有限。GPU虽然可以高速的处理网络包,但相对于FPGA来说,GPU是没有网口的,其处理的网络数据需要从CPU和PCIE接口中获得,网络延迟较大。ASIC与FPGA结构同源,但其灵活性较低,并不适合应用于业务发展迅猛的数据中心。
计算密集型场景,如矩阵运算、图像处理、机器学习、压缩、非对称加密、Bing搜索的排序等,对处理器的计算能力要求比较高。以intel的Altera Stratic V为例,其浮点计算能力相当于8核的CPU,而整数计算能力相当于20核的CPU。Stratix V的整数乘法运算能力与20核的CPU相当,而浮点乘法运算能力与8核的CPU相当,当然比GPU的处理能力要低很多。而Stratix 10,因为加入更多的乘法器和硬件浮点运算部件,其浮点计算能力与顶级的GPU相当。考虑到数据计算的延迟,FPGA优势就很明显了。FPGA处理数据同时可以流水并行和数据并行,而GPU只能数据并行。
以处理一个数据包需要十个步骤为例
▼
FPGA可以建立一个十级流水的处理方式,每一级的流水可以单独的处理一个数据包,即十级流水最高可同时处理十个数据包,每个数据包在处理完之后可以单独的输出。而GPU数据并行的处理方式,需要建立与要处理的数据包相同的计算单元,每个计算单元对数据包进行一到十级的处理。数据并行的劣势在于需要等待接受完所有需要处理的数据包,进行同步输入输出处理,增加了数据等待时间。
图3 流水并行处理方式
图4 数据并行处理方式
在计算密集型任务当中,FPGA的吞吐量可以达到CPU的十倍以上,而延迟是GPU的千分之一,功耗更是远远低于CPU和GPU。
图5 计算密集型任务各芯片能耗比较
4 FPGA云加速原理
FPGA在云计算中的优势在于其灵活多变的架构和并行处理数据的能力。CPU和GPU因为都是冯诺依曼结构,所以都有固定的指针设置和严格的内存层级,开发者需要去适应这些架构模式。而FPGA不同,它更加的灵活,可以根据整体系统的需求,随意的改变自己的架构,并且可以根据处理数据的不同,随意的改变数据路径、数据宽度、内存分配等。
利用FPGA进行云计算业务加速,简单来说,就是将在CPU中处理耗时较长的业务转移到FPGA中,利用FPGA速度快、延时低的优点,达到业务加速的目的。如下图所示:
图6 FPGA加速原理
但是并不是所有的任务都适合在FPGA中进行加速的,对于FPGA的并行流水线处理方式来说,比较适合加速的算法是并行处理的,特别是该算法计算量大,且重复计算较多。
FPGA相对于CPU的优势,就是可以并行处理多任务。不能并行计算的任务,比较适合CPU来计算,同时重复计算比较多的任务,适合放到FPGA中来执行。当任务较小,计算方法较多时,并不适合于FPGA。计算种类多,算法的设计会占用片内大量的逻辑资源,而这些资源利用率较低的话,会造成FPGA资源的浪费。计算量较小时,计算加速时间会小于FPGA与CPU之间的通讯延迟。所以,我们在设计利用FPGA加速算法时,也要考虑到CPU与FPGA之间的通讯。
图7 FPGA加速时通讯延迟
利用FPGA进行计算或者网络加速时,首先要对业务进行拆分。在设计初期,要考虑清楚,哪些业务适合在FPGA中进行加速,将此任务进行拆分在FPGA中实现,CPU则负责向FPGA下达任务,此时CPU扮演的更多是控制着的角色,大大降低了CPU的负担。业务在FPGA中实现时,需要进行FPGA编程。FPGA编程相对于软件编程来说,是一种底层编程,编程复杂度较高,为了方便FPGA在数据中心的应用,FPGA厂商及其合作伙伴,针对服务器上应用的FPGA加速,进行了初步的开发设计,将X86系统连接FPGA所需的驱动,以及FPGA中的接口控制程序完成开发设计。应用者只需要关注的的是X86系统中CPU所需要处理的任务,以及移植到FPGA中的任务,完成这些任务的开发设计即可。并且,XILINX的FGPA已经支持高级的C语言进行FPGA逻辑设计,ALTERA在被INTEL收购后,相信不久后也即将支持更高级语言的设计开发,这样就极大方便了软件开发者的业务搬离,即使不懂FPGA编程的软件人员,也可以很容易的进行FPGA加速算法开发。数据中心业务的加速方案开发设计者,只需要关注本身的业务,在FPGA加速平台上二次开发,即可完成业务的设计。
图8 FPGA加速设计框架
现在主流的FPGA加速平台是通用或异构服务器搭载FPGA加速卡的形式。FPGA加速卡上放置加速用的FPGA芯片,通常根据应用的不同,FPGA会挂载DDR内存、网络模块、外围电路和散热片。FPGA内部逻辑会包含内存控制IP,网络通讯IP等通用模块,以及用户实现加速的业务IP,(如:DNN加速、网络功能加速、加密等)。
如下图所示,其中Role是用户编辑的业务IP,而网络通讯IP和内存控制IP等主要负责FPGA与外界的通讯以及FPGA内部各Role之间的通讯。
图9 FPGA内部功能图
FPGA与CPU之间一般通过PCIE链路通信的。CPU内部集成有DDR内存控制器和PCIE控制器,FPGA内部通过可编程逻辑实现了PCIE控制、DDR控制和DMA控制。CPU和FPGA之间有三个数据交换通道:
指令通道、数据通道、通知通道。
在指令通道
CPU可以向FPGA芯片写入指令、读取状态,并且可以通过PCIE访问到FPGA芯片内挂载的存储器或内部总线。
在数据通道
CPU通过PCIE配置FPGA芯片内的DMA控制器,输入数据的源物理地址和目的物理地址。DMA控制器控制FPGA卡上的DDR控制器和PCIE控制器,在FPGA卡上的DDR内存和CPU连接的DDR内存之间传输数据。
通知通道
主要是传输FPGA向CPU提出的中断请求。
5 FPGA云加速应用
微软云计算中心部署FPGA:
为了在数据中心大规模的部署、调度和管理FPGA,微软提出了Hardware as a Service(HaaS)概念,即把FPGA等硬件看做为一种可以调度的云服务。
为了将FPGA更加合理的部署在数据中心,微软进行了三个阶段的尝试:
第一阶段
微软将所有的业务加速用的FPGA放入一台异构服务器中,每台异构服务器上插入四块FPGA加速卡,一块FPGA加速卡上搭载6块FPGA。一台FPGA加速异构服务器共插入24颗FPGA,因为FPGA过于集中,容易造成网络上数据量较大,网络延迟不稳定,并且不同服务器之间的FPGA不能通讯,也造成能加速的任务规模有限。过于集中的FPGA芯片,也对机器的维护和运输带来不便,一旦加速服务器出现问题,整个加速网络将会瘫痪。
第二阶段
的FPGA加速平台是在每台服务器上插入一块FPGA加速卡,各服务器之间的FPGA通过专用网络连接起来。微软应用这个平台的FPGA实现了BING搜索结果性能两倍的提升,但此时的FPGA并没有全面的参与到服务器的业务中,应用方向比较单一。
微软第三阶段
设计的FPGA加速服务器,也是现在应用比较广泛的FPGA加速架构,就是将FPGA部署在网卡和交换机之间。如下图所示,FPGA与CPU通过两个PCIe Gen3*8进行连接,NIC为速率40Gbps的物理网卡,用于宿主机和网络之间的通讯,FPGA内部虚拟出多个网卡对应每一个虚拟机,虚拟机可以通过SR-IOV直接访问这块虚拟网卡,不需要CPU和NIC的参与,减少了CPU资源的浪费,提高了虚拟机的网络性能,将同数据中心的网络延迟降低了10倍,同机架之间的服务器延迟仅为3微妙,千块FPGA之间的通讯延迟为10微妙,整个数据中心之间的延迟只有20微妙。网络性能的提高可以加速网络功能和存储虚拟化。
图10 第三阶FPGA结构图
FPGA在数据中心应用时,比较切实和高效的应用方式是,CPU和FPGA协同工作,将计算复杂的任务交给CPU处理,而局部性和重复性较高的工作交给FPGA处理。
基于NVME Over Fabrics的FPGA云存储加速:
Xilinx设计了一款基于NVME Over Fabrics的NVME SSD网络存储扩展系统,它可以通过RoCEv2 RDMA实现远程直接访问。该设计方案摆脱了网络存储扩展对处理器或者网卡的依赖,利用FPGA实现远程网络硬盘的连接和数据的存储,传输稳定、延迟低,实现了高度集成和经济高效的存储阵列。NVMe over Fabrics典型应用如下图所示:
图11 NVMe over Fabrics典型应用
Xilinx在FPGA中设计实现的NVMe over Fabrics(简称NVMe-oF),可以在一个高度集成的FPGA芯片里实现NVM Express-over-Fabrics protocol和RDMA NIC两种协议的解析。将网络包中的数据和命令解析出来后,数据包按照要求传输至固定的数据通道,而命令包则传输至处理器,实现控制命令的处理。
NVMe-oF的系统框图如下图所示:
图12 NVMe-oF系统框图
其中ETRNIC IP负责RoCEv2 RDMA协议的解析。ETRNIC IP支持高达100GB/s的带宽。相同的ERTNIC IP可以支持不同的以太网接口组合,如4×10GE、2×40GE和1×100GE。
NVMF IP的以太网端通过AXI接口连接到ETRNIC IP,数据与存储的连接侧则通过Pcie接口连接PCIe switch或者直接连接PCIe SSD等。NVME IP可以支持连接四个PCIEG3×8接口。NVMF IP中具有三个数据通道,一个双向数据传输通道用于双向传输数据流量,数据通道中有数据传输管理,用于处理数据的流向。两个控制命令通道,分别用于传输控制命令和反馈控制命令执行结果。控制命令通过控制通道传输至CPU、ARM或者FPGA自带的处理器中,Xilinx可以提供相应的控制器所需的软件驱动。
图13 NVMF IP系统框图
NVMe-oF通过标准的以太网来传输NVME包,可以实现可靠、低延迟、高吞吐量的数据传输,并且可以对远程主机进行可扩展控制,可以高效的实现跨数据中心的存储资源共享,大大降低了存储的成本、数据中心的占地面积和功耗。