分享

「交易技术前沿」FPGA技术在极速交易场景的应用示范

 新用户0175WbuX 2022-01-27

  本文选自《交易技术前沿》总第三十九期文章

  金乐人 郑宇飞 黎云芃

  华泰证券股份有限公司

  现场可编程门阵列(简称“FPGA”)技术是近年来证券期货市场发展得比较快、研究得比较热的技术之一。其强大的并行处理能力可以在维持大吞吐量的前提下提供稳定的极低处理延迟,非常适用于流式的计算密集型任务和通信密集型任务。

  华泰证券正在积极开展FPGA应用研究,目标搭建一个高稳定低延迟的金融加速计算基础架构,形成友好易用的开发框架。用户无需关心底层实现,只需专注于开发自己的业务逻辑,更高效地实现客户的个性化业务需求。

  本次研究计划对上证行情进行实时解析,以上证指数为基础指标,经过简单策略判断后将计算结果发送到下游系统,同时接收下游系统的反馈信息构建记录表,以这整条链路作为落地应用场景。通过搭建Demo环境完善架构设计并验证实际计算加速效果,展现FPGA技术在低延时交易领域的应用价值。

  近年来,随着资本市场的快速发展和算法交易技术(尤其是高频交易)在全世界范围内的应用,证券行业在交易低延时领域面临着巨大的技术挑战。高精度、低延时的交易能力是券商的核心竞争力之一。高速的行情数据获取和策略计算能力是各种高频交易算法的核心;

  随着证券实时行情发布时延降低到了微秒单位,行业对行情服务和高频交易时延的要求也达到了微秒级。传统的基于通用软硬件建设的交易系统在并行计算和网络协议处理等环节存在明显的性能瓶颈,有必要引入更高速的交易处理解决方案。

  FPGA具备低抖动与运行稳定的特点。CPU模式下存在总线仲裁、内存抢占、进程/线程锁等机制,处理业务容易受行情巨幅波动、活跃用户上升、成交/委托笔数急剧放大等影响,大型数据库、网络吞吐性能下降严重,系统稳定性下降;

  FPGA模式下使用硬件门电路,所有资源都是预先分配布线,原理上与CPU 模式有本质的不同,不存在调度问题、仲裁问题。FPGA技术提供了强大的并行处理能力,可同时进行数据并行和流水线并行计算,在单个时钟周期内可以完成的运算远大于一个CPU指令的可完成的运算量,在处理计算密集型应用时效率提升明显;

  在数据获取分析过程中,FPGA板卡上提供的高速光模块可以直接接收处理数据包,同时通过硬件层面的IP(Intellectual Property)核编程使得FPGA在数据传输延迟和网络数据解包能力上都大大优于传统的网络协议解析。

  表1

  「交易技术前沿」FPGA技术在极速交易场景的应用示范

  FPGA高速、稳定、灵活、低成本的特点完美契合金融领域的加速计算需求,是一个理想的低延迟交易解决方案。目前该技术在交易实时风控、行情解析、金融指标计算等方面有较多应用,国内外不少公司已利用FPGA技术将交易处理延迟提升微秒级甚至纳秒级。长远来看自主研发和自主掌控FPGA相关产品和技术能力可以为券商带来明显的竞争优势。

  目前FPGA技术在证券期货领域应用有如下困难:

  1、开发难度大:传统的硬件开发编码对软件工程师不友好,难度大,需要专业技术背景,金融行业此类人才稀缺。FPGA技术的开发需要极强的硬件背景,只有通讯、电子设备等少数公司拥有大批RTL(硬件编程语言)工程师,而且每个合格RTL工程师的培养需要5年左右的时间。

  2、开发周期长:硬件编码整个开发流程包括编写代码、编译、仿真、综合、时序分析、上板测试等过程,开发周期较长。迭代不灵活,跟不上金融行业的上线速度。

  3、缺少生态圈:国内金融领域成熟落地的FPGA加速方案较少,缺少包括金融机构、FPGA厂商以及解决方案提供商的完整生态圈。

  以上三个难题导致应用FPGA进行业务开发的门槛高、成本高、周期长,出问题后定位错误困难。因此证券期货行业急需高性价比、低门槛的开发解决方案。

  针对FPGA设计的C-based OpenCL开发环境允许开发人员用C语言描述完整的计算过程,无需学习底层HDL编码工作,即可编写内核程序发送至FPGA。

  OpenCL是为满足异构计算的需求而出现的程序框架标准,可在异构平台(包括CPU、GPU、FPGA和其他类型的处理器)上执行,具有良好的开放性和可移植性。

  OpenCL解决方案适合没有硬件背景的c/c++工程师。它解决了用C语言如何来描述并行计算结构的问题;它有一套通用的编程规范。程序员可以通过编写kernel程序和host程序实现功能,不需要去关注太多底层原理,直接按这个OpenCL模型与文凭规范写代码就得到一个可以高效运行的系统;最开始接触它的c工程师不到2个月的时间可以进入开发。非常适合作为软件开发背景行业的FPGA开发框架选择。

  不过,开发人员对于底层几乎没有什么干预能力,只能使用有限的优化手段和优化方式来影响最终结果,这就需要高效率IP库进行弥补;另外,OpenCL的运行效率一般情况下会低于RTL(10-20%左右的性能损失),但是它的开发效率以天计算,显著高于以周计算的RTL方式。这就类似CPU模式下,汇编语言与c/c++语言的区别。具体的取舍需要综合考虑业务场景特点、性价比、开发周期、人才储备等因素。

  本次研究环境在Intel Arria 10 PAC卡的基础上搭建,采用OpenCL for FPGA技术实现行情数据解析、指标计算、实时股票行情表构建以及计算结果低延时分发等业务逻辑功能,同时结合Intel TOE IP实现TCP/UDP层网络数据的接收和发送,整体网络处理架构如下图所示:

  「交易技术前沿」FPGA技术在极速交易场景的应用示范

  图1

  对于计算部分,我们采用实时上证指数指标作为基础指标,在此基础上根据一定策略判断,将计算结果发送到下游系统。

  目前上交所每5秒推送一次指数行情,时间间隔很长。而股票成交数据是每3秒推送一次快照数据,未来会改成逐笔实时成交,本次场景通过获取股票逐笔成交数据来实现更实时的指数计算,使得客户能够更快地根据指数指标进行交易决策。

  本场景使用了一台x86服务器安装一块Intel Arria 10 PAC板卡。服务器上安装OpenCL开发环境、包含TOE IP的OpenCLBSP(板卡驱动)。这台服务器上运行host程序,用于初始化FPGA环境并启动执行板卡上的kernel程序。

  FPGA板卡上启用两个TOE IP,一个物理上对接行情数据网络传输,另一个对接交易柜台进行下单和接收反馈信息。

  整个处理链路从行情接收到下单指令发出都通过网络,所有策略逻辑都在FPGA上进行,不经过CPU。

  通过Intel的TOE IP核,可以实现纳秒级的MAC层到TCP/UDP层协议数据的卸载处理。通过API可以进行网络层面的控制并实现TOE状态数据监控和数据处理时钟周期监控。技术架构如下图:

  「交易技术前沿」FPGA技术在极速交易场景的应用示范

  图2

  FPGA的网口用来接收网络数据和发送处理结果。接收的数据经过TOE IP的处理,通过IO channel传递给FPGA kernel程序进行处理计算,计算结果通过IO channel发送给TOE IP,通过网络将数据发送出去;

  基于该技术架构,可以实现并设计网络流数据处理时延敏感类应用场景的通用框架。

  「交易技术前沿」FPGA技术在极速交易场景的应用示范

  图3

  本方案中,行情解析,实时股票行情表构建,上证指数计算,计算结果发送,反馈信息接收及反馈信息记录表构建等功能都在FPGA板卡上实现,分拆为四个kernel实现对应的功能。Host端通过DDR内存与kernel交互,通过参数传递对策略进行个性化配置,同时通过DDR内存获取在FPGA本地内存中构建的实时股票行情表和反馈信息记录表,形成一份数据备份。

  channel是FPGA kernel程序之间传递数据的机制,是一种FIFO buffer。启用channel可以保障并发运行的kernel间的数据传递不经过host程序和DDR内存,十分高效。通过channel可以方便地实现1对N,N对1的并发kernel处理架构,如下图所示:

  「交易技术前沿」FPGA技术在极速交易场景的应用示范

  图4:Channel数据传输示意图(图中的FIFO就是channel)

  具体模块和流程如下:

  1、TOE0:用于接收行情数据的TOE IP,通过IO Channel将接收到的数据传递给FPGA kernel;

  2、行情解析kernel:解码行情数据,截取所需的实时股票成交信息,通过channel传递给策略下单kernel;

  3、指标计算kernel:指标计算和计算结果发送的主体,本次场景中该kernel实现以下功能:

  1)接收实时股票成交信息,在本地内存中构建实时股票行情表;

  2)根据实时股票成交信息,计算实时上证指数;

  3)接收下游系统对于计算结果的反馈信息,在本地内存中构建实时反馈信息记录表;

  4)基于以上实时表和指数指标,构建简单策略逻辑(比如指数大于一定阀值、在某个时间窗口内结果发送次数、指数在时间窗口的涨幅等)触发计算结果发送,通过channel传递给发送计算结果kernel;

  在本地内存中保存的实时数据可以保证最快的读写速度。根据容量测算,全市场数据约在8~10MB左右,目前市面上中端或高端的FPGA卡都能满足这个需求;

  对于策略逻辑实时更新的需求,我们可以将灵活更新的策略判断要素作为kernel参数(比如指数变化量、指数阀值等),通过host程序传递给指标计算kernel。同时通过OpenCL的hostpipe功能为kernel传入一个信号标志。hostpipe类似于host和kernel之间通讯的channel,通过hostpipe传递的数据不经过DDR内存,速度很快。kernel程序每次循环时,都会尝试读取hostpipe传递过来的信号标志,如果读取到了,则重新进行参数读取等初始化动作,如果未读取到,则执行常规业务处理逻辑。

  4、发送计算结果kernel:接收计算结果,封装网络协议并发送到TOE1;

  5、接收反馈kernel:接收下游系统的反馈信息,截取所需的信息,通过channel传递给指标计算kernel;

  6、TOE1:用于与交易柜台通讯的TOE IP,通过IO Channel接收并发出计算结果。同时接收下游系统的反馈信息,传递给接收反馈kernel。

  本次研究场景中也编写了模拟C程序进行行情解析、指数计算和计算结果分发,使用传统千兆网络进行数据传输,通过比对FPGA和C程序处理的速度,考察FPGA加速计算的效果。

  选取单条行情处理延时作为测试指标,计算FPGA收到每一条行情数据,到计算完成通过网络发送出去的时间周期。这个时延包括了TOE网络处理的时延。

  对比发现,FPGA处理延时平均在3微秒内,C模拟程序会达到几十微秒,有10~30倍的差距。同时值得注意的是,FPGA处理延时稳定在一个非常小的区间,几乎没有波动,而C模拟程序的处理延时波动非常大,这充分体现了FPGA低延时、低抖动的特性。

  延时测量对比如下表:

  表2

  「交易技术前沿」FPGA技术在极速交易场景的应用示范

  OpenCLfor FPGA的开发涉及host程序和kernel程序的编写。这个开发模式的优缺点总结如下:

  优点:

  host和kernel程序都是基于C语言语法来编写。Kernel程序的语法、变量类型、数据结构都相对简单,没有指针、引用、面向对象以及其他一些高级应用的概念;host程序与FPGA板卡的交互也有固定的步骤和框架,API使用简单。因此整个开发过程对于软件工程师来说上手较快;

  提供模拟编译的功能,可以快速编译kernel(1分钟内),使用CPU来模拟运行,这样可以快速检查程序内的逻辑错误;

  缺点:

  实际编译时间较长,随着kernel程序的复杂度可能从2小时到5小时不等。并且即使模拟编译通过了,在线路综合和布局布线阶段仍然会遇到各种错误。而这个阶段的错误需要专业硬件工程师协助才可排查,并且耗时耗力,对于软件工程师来说很难排查处理;

  Kernel程序虽然是用C语言来编码,其中的底层逻辑和软件架构是不同的,尤其是一些速度和资源优化的思路,并非传统软件架构的思路。因此软件工程师虽然能快速上手开发程序,但是要编写出高效的程序需要一个较长的学习理解过程。

  对于整个FPGA极速下单策略架构,如果要在生产环境使用,仍会有一些重要的考量因素,这也是本次研究场景架构后续改进的方向:

  1、故障恢复:由于FPGA板卡的单点性,以及板卡上内存数据非持久化的特性,建议维护一份软件程序接收行情并策略下单的路径,在FPGA板卡或整个链路故障时快速切换;

  2、网络协议优化:对于行情接收端,可以采用UDP协议,FPGA端被动接收即可。在这种场景下,甚至不需要TOE IP,FPGA在MAC层接收网络数据后直接去掉UDP协议头即可,进一步缩短网络处理延时;

  3、策略复杂度:FPGA更擅长处理数据并行计算以及简单的触发策略,比如本次研究场景中的指数指标的计算,而不擅长处理过多的控制语句。同时复杂且灵活的控制语句也无法完全通过kernel参数传递来自定义,FPGA kernel程序的开发、编译、测试又是一个以天计算的时间周期,无法灵活变更。

  因此在实际生产应用中,建议对策略进行分离,一些基础指标在FPGA上进行计算,计算结果通过PCIe接口传递给host程序,由host程序实现复杂的策略判断,结果发送指令再通过PCIe接口回传给FPGA kernel,发出计算结果。该模式能充分利用FPGA和CPU的不同特性,由FPGA处理固定的网络处理、网络协议封装以及行情解析和指标计算动作,由CPU处理灵活复杂的策略控制。

  本文研究了OpenCL for FPGA技术在极速交易场景的应用示范。设计并落地了从行情接收到指令下单的整体架构,并与软件模拟程序进行性能比对,论证了OpenCL for FPGA技术在高时延敏感场景的落地可行性。本次研究也形成了以下研究结论:

  1、OpenCL for FPGA具有易上手、开发难度低的特点,并且可以通过host和kernel程序的异构架构,通过kernel参数传递有效解决一部分程序变更灵活性的问题。但是本身编译时间较长,编译问题可排查性较差,对开发测试仍有较多不便。本项目也研究落地了基于网络流数据处理场景的通用开发架构,通过该架构能有效降低遇到底层编译问题的概率,解决了并发计算处理、kernel灵活刷新、kernel与host数据交互等方面的问题,大大提升了OpenCL for FPGA开发效率;

  2、基于TOE IP核,FPGA在基础架构层面可以作为一个节点直接接入网络,实现诸如网络数据接收传送、多session并发、扩展性、高可用性等生产级基础架构的特性,使得FPGA技术具备解决网络时延敏感场景的基本能力,具备接入生产环境的基础条件。

  3、FPGA相比传统软件程序在性能和稳定性方面都有了量级的提升,在对时延敏感的场景有非常高的应用价值。

  综上所述,FPGA技术具备在证券行业高时延敏感以及流数据并发计算等场景有较高的应用可行性和应用价值。后续我们也将持续研究FPGA技术在其他场景如数据压缩、加密解密、数据批量处理的应用,不断拓展FPGA技术在金融计算加速领域的应用。

  感谢上交所技术有限责任公司的老师对本次研究的大力支持,包括FPGA硬件厂商资源的联络协调以及相关技术问题的意见和建议。

  [1] Intel,2019,“Intel? FPGA SDK for OpenCL?Pro Edition Getting Started Guide”,UG-OCL001

  [2] Intel,2019,“Intel? FPGA SDK for OpenCL?Pro Edition Programming Guide”,UG-OCL002

  [3] Intel,2019,“Intel? FPGA SDK for OpenCL?Pro Edition Best Practices Guide”,UG-OCL003

  [4]中证指数有限公司,2019,《中证指数有限公司股票指数计算与维护细则》

  [5]上海证券交易所,2019,《IS120 上海证券交易所行情网关STEP 数据接口规范》

  [6]上海证券交易所,2019,《IS120 上海证券交易所行情网关BINARY 数据接口规范》

  [7] Hasitha Muthumala WaidyasooriyaMasanori HariyamaKunio Uchiyama, 2018,“Design of FPGA-Based Computing Systems with OpenCL:Springer”

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多