一文读懂:高频交易系统的设计与实现(下)

大家好, 我是Lucy@FinTech社区。

上篇文章我们介绍了高频交易系统的特点,今天这篇文章我们就来一起学习一下高频交易系统的软硬件实现

文末有福利!

欢迎大家添加微信fintech34,或扫描底部微信,加入FinTech社区,提认知,攒人脉,求职招聘!

 

一、高频交易系统的硬件配置

目前来看高频交易系统所需的硬件配置有如下几种情况:

超频CPU:通常所说的超频简单来说就是人为提高CPU的外频或倍频,使之运行频率得到大幅提升,即CPU超频,提升CPU的运算性能。

FPGA硬件加速:适用于逻辑性强,从CPU上卸载一些计算任务,减少CPU运算单元的耗时,在高频交易领域比较有优势

下图为FPGA示意图:

使用GPU并行算法强,适合大数据,比如机器学习,神经网络强化算法,矩阵式计算语言的加速。

下图为机器学习中并行计算的示意图:

关掉CPU节能设置。很多CPU默认有节能功能,在程序运算量不大的时候减少CPU的消耗,这对于高频这种竞速交易系统是非常不适用的

定义专核专用。目前的CPU都是多核设计的,在交易系统的应用,对核的理解是不一样的,会希望CPU专核专用,服务于特定进程,不要进行自动切换,需要对内核做一些隔离和绑定的操作,一般操作系统都会有专用的参数提供。


 

二、高频交易系统的软件设计

对于高频交易系统来说,交易的时效性显得尤为重要,那么对于软件开发人员来说,如何做好低延迟、高并发就是重中之重的事情了

第一,优化kernal控制。控制了物理的CPU内核之后,就要对操作系统的Kernel进行控制。

操作系统内部会有两种状态,一种是内核态,一种是用户态。在两种状态进行切换的时候,会花费一定的代价。对交易系统来说,这种自动过度的过程也是一种损耗,因此就要对Kernel进行处理。

下图为内核态与用户态的示意图:

例如,一般来说,网络数据的研发,会做一些硬件上的操作,比如看一下网络数据,导入内存中再传输给应用程序。在使用TCP/CP传输的时候,也是内核在维护信息的传输和转移。

第二,进行线程隔离。高频交易系统的开发,尤其要避免上下线程切换,为了做到这一点,常用线程隔离。我们不希望有多个线程竞争同一个层面的CPU内核,一旦发生这样的情况,就势必要进行线程切换

在开发系统的时候,会尽量保证,一个物理CPU核上只跑一个线程,这个线程就只会做单线程内部的计算,来节省多线程直接切换或者锁的开销

下图中的线程3、4就发生了竞争:

第三,要避免数据的移动。计算机进行运算的时候,要把数据从相对慢速的存储设备,比如硬盘、网卡读取内存,把数据传输到CPU缓存中,然后再从高速缓存传输到计算器中,经过一层又一层数据在缓存中的移动,最终才能完成系统需要的数据计算。

搞清楚这个过程,我们就很清楚,优化计算事件的解决方案,很重要的一点是尽量避免数据在缓存之间的移动。要设定每个层面上的缓存是怎样使用的,避免数据被交换到更慢速的缓存中去。

第四,尽量使用共享内存。从速度的角度考虑,对内存的读写控制也是重要的工作,我们当然更希望所有的读写都在高速缓存里完成的。

但是程序在编写的时候是直接面对内存,把数据放在内存里,从程序员编程的角度会更加方便。但是,从速度的角度考虑,这种模式会增加系统在内存读写拷贝上的开销。我们会尽量实现zero copy,让数据在产生的区域直接进行运算、转化的操作。

下图为共享内存的示意图:

第五,要尽量减少线程锁 (thread lock)。每增加一个锁,都会增加系统的复杂性,影响系统运行速度,因此要很认真思考有没有承担这部分开销的代价。

我们一般会使用一种叫busy spin的技术,让一个线程中的计算代码,使用代码无限循环的办法,避免任何形式的等待,主动控制CPU的使用,保持在同一个内核上线程一直在高速运转状态里。


 

三、常用的系统性能测试工具

当我们开发完成一个交易系统的时候,怎么测试我们的系统呢?下面就给大家推荐几款小应用:

  • Netperf/sockperf:用于测试网络速度,确认延时情况,提升网络性能;
  • Wireshark/tcpdump:抓取网卡上所有的数据包,提供反映实际系统性能的底层数据;
  • Systemtap:提供具体进程状态的统计,可以精细到处于sleep状态的频率、总数、时长;



福利时间

送系统架构文档+ 源代码!

添加微信: fintech34 

转发本文,即可获得!
 

 

近期热招: (点击标题,即可了解详情) 

博士专场招聘|Quant/AI- 200-300万+奖金
 

招聘 | 灵均投资-量化研究员 (统计博士)
 

【多家领先对冲基金招聘】量化研究/投资经理/机器学习博士
 

招聘 | 基本面分析师-70~100万-北京
 

招聘 | Software Engineer-40~100万-上海