你确定你的交易系统最快?

2017-11-24

你确定你的交易系统最快?

                      ——谈交易系统中的时间问题


作者:柳峰  盛立金融软件



除了稳定性外,衡量一个交易系统的重要指标——延迟和吞吐量都和时间有关。从提供服务的期货公司或者证券公司的角度来说,除了拼公司的服务外,交易速度也是吸引客户的重要手段。现在常用的比较交易速度的方法是在不同公司的交易环境里,比较同一个策略在同一个行情触发时下的单子的交易所单号的大小。这种方法可以看出些总体效果,但是一种比较粗糙的方法,无法知道交易环节里的各模块如行情、柜台、交换机和交易所的线路的具体延迟和性能到底如何。只有明确知道了各模块和竞争对手的具体差别,才能对症下药地做调整,取得事半功倍的效果。没有精准的数据,很大部分可能都是做无用功。带着这些问题,我们来讨论下交易系统中的时间问题。



要讨论交易系统中的时间问题,我们首先来谈一谈时间本身。网络设备的参考时间通常是指协调世界时间(Coordinated Universal Time,简称UTC),该时间以原子时秒长(铯原子基态的两个超精细能级间在海平面、零磁场下跃迁辐射9,192,631,770周所持续的时间)为基础,从1972年起,协调世界时被确定为全世界的官方时间和国际民用时间标准。中国现代时间标准是中国科学院国家授时中心(英文缩写为NTSC)建立并保持的原子时标准,中国科学院国家授时中心利用一组原子钟(目前为19台铯原子钟,4台氢原子钟),通过测量比对和算法设计,建立并保持着高精度中国原子时标准TA(NTSC)和中国协调世界时标准UTC(NTSC),并通过卫星与世界上主要时间实验室保持定期时间对比,国家授时中心保持中国协调世界时UTC(NTSC)与UTC之差已经控制在50纳秒以内。美国的类似机构包括美国海军天文台(USNO)和美国标准技术研究院(NIST),其中美国海军天文台维持的UTC (USNO) 与UTC之差在10纳秒以内,两个机构之间会定期比较各自维持的时间(通过大约10颗卫星进行),两者之差通常在20纳秒以内。全世界有约50个这样的机构(时间实验室),共有约200多台原子钟,他们会将各自的数据定期传送给设在法国巴黎的国际权度局(BIPM),并由其建立并保持国际原子时。

 

网络设备里的时间是通过与UTC同步来获取的的。而UTC是通过无线电信号的方式传播的,通常的方式有GPS和CDMA。GPS信号来自GPS卫星,信号强度较弱,但由于GPS卫星上配备原子钟,其提供的时间精度很高,能够达到与UTC相差小于40纳秒。CDMA信号比GPS强,但提供的时间精度不如GPS信号,与UTC相差只能达到10微秒级别。除了这两种方式之外,有一种相对较新的技术叫STL (Satellite Time and Location),它使用的信号比GPS强1000倍,可以穿透建筑物,同时信号也是加密的,能够提供几百纳秒级别的精度。

 

网络设备时间与参考时间同步,通常有两种方式,一种是通过网络时间协议(NTP),通过该协议,网络设备可以与局域网或者因特网里的时间服务器同步,该协议所提供的精度较低,在局域网(LAN)里能够达到小于1毫秒,在广域网(WAN)里能够达到几十毫秒,我们日常所用的计算机里的时间通常就是由NTP协议提供的。另外一种同步协议是精确时间协议(PTP),该协议用于在局域网中的多个系统之间进行时间同步,支持PTP的硬件设备(如网卡)通常能够达到100纳秒的精度(主从时钟的时间差),理想情况下,比如网卡直连或者通过特定交换机,精度能够达到10纳秒以内。

 

这里我们顺便提一下普通计算机里提供时钟源的设备,由于计算机芯片本身并不具备时钟信号源,因此必须由专门的时钟电路提供时钟信号,石英晶体振荡器(Quartz Crystal OSC,简称晶振)就是一种最常用的时钟信号振荡源,石英晶体振荡器的频率稳定度可达1E-9/日,甚至1E-11。例如10MHz的振荡器,频率在一日之内的变化一般不大于0.1Hz,这对普通计算机来说足够稳定,后面我们会谈到,原子钟可以提供更高的频率稳定度。

 

在前面的讨论中,我们提到“精度”,其实这里涉及到两个概念,一个是准确度(Accuracy),另外一个概念叫精确度(Precision),对于时间同步而言,准确度是指同步时钟与参考时钟的平均时间差,可以通过多个测量点的均值和标准差来体现,精确度是指同步时钟与参考时钟时间差的方差,仅仅有高精确度并不一定表示同步性能很好。比如,对于时间同步而言,如果同步时间设备的时钟频率稳定度高,其精确度就会相对高,但这并不表示同步时钟与参考时钟的平均时间差小,即准确度不一定高,准确度还会受其他因素影响,比如设备时钟的分辨率以及使用的算法等。

 

上面提到的UTC是一个绝对时间的概念, 另外一个概念是相对时间,我们通常所说的延迟是指的相对时间,对于同一个局域网内的系统,即使在没有与UTC同步的情况下,如果待测数据包都接入同一个测量设备,并由该设备对每个数据包记录时间戳,由于这里只用到一个设备,只有一个参考时间,因此没有同步误差,能够得到高精度的延迟测量。典型的延迟测量环境如下图所示,这里待测数据包在进入待测设备前后分别被复制到测量设备,并由该测量设备记录时间戳,通过比较时间戳来计算待测设备的延迟。这里的测量设备可以是普通的计算机,通过软件记录日志的方式记录时间戳,也可以是带有硬件时间戳功能的网卡、带抓包和记录时间戳功能的交换机、基于FPGA的抓包设备等。


这里提到时间戳的概念,在交易系统中通常使用的是Unix时间戳(Unix time, POSIX time或Unix timestamp等),是指从1970年的1月1号00:00:00(世界标准时间,UTC)开始所经过的秒数(不考虑闰秒),根据表示的精确度的不同,Unix时间戳有10位(秒级)、13位(毫秒级)、19位(纳秒级)等。


在测量网络延迟性能时,延迟测量精度取决于时间戳的精度。具体来说,这里的时间戳指的是当某一事件发生时(比如某个数据包达到时,这里数据包到达时间可以是数据包的开始时刻,也可以是一个数据包完整接收的时刻),系统记录下的时间,准确的说并不是事件本身发生的时间,因为系统得知事件发生、获取当前系统时间、对时间进行记录(比如将时间信息写入日志文件或者写入扩展包头部分),这一系列动作也需要时间,记录下的时间戳与真实事件发生时间之间会有误差。这个问题在用计算机软件系统记录的时间戳尤其明显。虽然计算机主时钟频率很高,但由于操作系统延迟的不确定性等原因,这种类型时间戳的精度通常较低,大致在毫秒或百微秒级别。要获取更高精度,需要特殊的硬件设备来记录时间戳,由于硬件系统的确定性特定(不依赖于操作系统),可以在得知事件发生之后的下一个时钟周期及时触发记录时间动作,并且这种设备支持高分辨率的时钟,因此可以获得高分辨率的时间戳(个位数纳秒级别)。上面提到的带有硬件时间戳功能的网卡、带抓包和记录时间戳功能的交换机、基于FPGA的抓包设备等都是这种硬件设备的例子。以FPGA板卡为例,如果FPGA的主时钟频率可以达到250MHz以上,其时钟的精度能达到4纳秒,因此时间戳的分辨率也能够达到4纳秒。这里顺便提一句,在谈相对时间的时候,一定要确定是从哪里到哪里。很多时侯,大家用的是同一个名词,但其实谈的是不一样的东西。一些基于软件的系统,特别喜欢用含糊的“内部处理时间”这个名词。 这个名词其实很有误导性 ,必须细究下到底指的是内部哪个模块的处理时间,以及这个时间的测量方法。相比来说,基于硬件的可确定性,硬件的系统会好很多。 计算机的问题首先在于本身的时间精度不高,另外它时间记录的过程也稳定性不高,导致在微秒级别差异的时候,很难得出准确结果。在平常的工作中,尤其是行情系统的快慢比较时,很多时候差别是微秒级的,如果要做到在软件上的正确比较,对程序的设计,数据接收保存的方法,如何减少操作系统切换的影响,都是需要精心设计的,才能得到基本数量级正确的值。

 

前面说的是同一个地理位置的情况,但很多时候我们需要比较两个或两个以上不同地方的时间。由于不同地理位置的网络中的测量设备使用的参考时间不一样,延迟测量精度还会受同步误差的影响,因此测量精度取决于各个网络中的参考时间与UTC同步的精度。要得到最高的精度,需要使用上面提到的GPS信号。每一个网络中需要有一个主时钟(Master Clock)与UTC同步,然后延迟测量设备需要与主时钟同步,并用其提供的时钟作为参考时钟,这里可以使用PTP协议的方式同步,对于某些特定的设备,也可以通过秒脉冲(1PPS)信号与主时钟同步,后者的精度通常更高,同步之后的测量设备给网络数据包打上高分辨率的时间戳,然后通过比较数据包的时间戳来判断系统延迟性能。这里由于不同地理位置的网络需要各自与UTC同步,同步误差无法排除,而由于GPS信号能够提供的时间精度所限,延迟测量精度只能到达几十纳秒级别。

 

在某些情况下,交易系统所在的数据中心或者机房内可能没有GPS信号,或者GPS信号不稳定,不能保证随时都能接收到,因此网络里的主时钟设备可能丢失与UTC的同步,在这种情况下,主时钟设备可能选择使用原子钟作为参考时钟。原子钟是一种时钟,它以原子共振频率标准来计算及保持时间的准确,原子钟是世界上已知最准确的时间测量和频率标准,最好的铯原子钟精度可以达到每500万年相差1秒,目前的商用原子钟(比如铷原子钟)可以输出稳定的10MHz脉冲或秒脉冲(由铷振荡器频率信号分频得到),并且在与GPS信号锁定时同步于GPS输出的UTC时间(对于不同的产品,同步过程需要几分钟到几十小时不等),在GPS信号丢失时自动切换到原子钟提供的稳定脉冲(铷原子钟的月频率漂移约为1E-11到4E-11),维持参考时钟的精度。在完全没有GPS信号的情况下,可以通过CDMA或者STL信号来获取参考时间。 举例来说,如果要测试两家公司的行情时间,而且两家没有GPS信号,可以先在外面用GPS或者同一网络进行同步,再切换成机器上的原子钟信号,这样就能保证两个在不同机房的机器基本同步,可以保证在6个小时内保持在一个微秒内的差别。这中间当然有保持电源等细节需要关注.这种办法经过测试,可行性挺高。


随着网络带宽的不断提高,比如40G和100G以太网,时间同步和高精度时间戳变得越来越重要,许多对数据的分析都依赖于高精度的时间,要获取最高的精度,需要使用GPS来获取时间,并且使用专门的硬件设备记录时间戳,其他只需要足够精度的应用,可以选择使用NTP或者CDMA的方式。总之,合适的时间同步方案,以及用何种方式记录时间,应该取决于应用的需求,以上讨论可以作为参考。




官方网站: www.shenglisoft.com

此内容为原创,版权归“盛立金融”所有,欢迎转载,严禁抄袭。