2021-4-10 | 证券交易论文
1概述
近年来,国际、国内资本市场获得高速发展,带来资本流动性与交易量的急剧增大[1],使得降低交易系统延迟的需求凸现出来。同时,程序化交易、算法交易、高频交易的大量使用,也造成追求更细粒度交易时间的“竞赛”不断升级。事实上,消息传输带宽、延迟方面的问题已成为证券交易行业近年来发展所面临的最大技术挑战之一。
面对挑战,以纽交所、德交所、加拿大Chi-X交易所、美国Bats交易所为代表的全球主要交易所已经展开了激烈的竞争,纷纷采取措施降低交易延迟,以毫秒甚至微秒来计算证券交易延迟的“低延迟证券交易系统”因此成为研究热点。
本文给出证券交易延迟的分析框架和分类方法,并针对构建低延迟证券交易系统时的软件集成和开发,研究了操作系统、消息中间件、软件开发、性能测试及优化等相关软件关键技术。
2证券交易系统延迟分析框架
与其他金融服务应用相比,证券交易具有时间集中、数据密集的特点,对交易速度具有很高的要求。以上海证券交易所为例,2009年日均成交股票达到了100多亿股,股票每秒的成交量则达到了数万笔之多,与此同时,每秒钟有数以万计的订单、确认、回报、行情等消息被产生。
广义上的证券交易延迟是指由订单等交易指令从市场参与者系统发出,到交易系统接受、处理,并返回处理结果的时间开销。而狭义上的交易延迟是指交易指令从进入交易系统接入点之后到处理结果返回接入点之间的时间开销。对于证券交易所这种集中式的交易系统来说,客户方系统和网路等外部延迟因素不可控,因此低延迟证券交易系统的构建主要基于后者进行讨论。对于证券交易系统,根据经过的处理环节,交易延迟可细分为以下5类:
(1)消息处理延迟:应用消息传输过程中的消息格式转换、消息可用性机制相关的时间开销。
(2)通信处理延迟:主机的协议栈处理开销。
(3)调度延迟:主机提出请求到请求开始被处理的时间开销。
(4)发送/接收延迟:主机向网络发送或接收协议包的开销。
(5)传播延迟:在传播介质上传输的时间开销,主要与传输距离和传输介质相关。
相应地,交易延迟的影响因素涵盖了网络、CPU、存储器、网络接口性能等硬件相关的因素,以及操作系统、中间件(主要为消息中间件)、应用软件等软件相关的因素。这些因素在不同层次上对证券交易延迟造成影响。其中,根据文献[2],对于高性能、低延迟硬件环境的系统来说,大部分的开销由软件处理所引起。因此,在构建低延迟证券交易系统的时候,尤其需要对这些软件延迟影响因素进行分析,尽量避免或降低延迟影响因素造成的影响,降低交易的延迟。
3低延迟证券交易系统软件关键技术
3.1操作系统
常见的通用操作系统存在以下不适于低延迟处理的地方:
(1)虽然理论上操作系统时钟最小可以与硬件中断处理的时间相等,但通用操作系统的时间管理一般采用粗粒度的周期性时钟中断。尽管对操作系统本身而言,这避免了频繁进行进程上下文切换,但也使调度的时钟延迟在最坏情况下可能等同于时钟的间隔,从而成为延迟产生的最大来源[3]。
例如,Linux缺省时钟间隔粒度为10ms,因此最坏情况下内核和用户空间应用程序需要使用一个时间间隔来进行调度。也就是说,对于一个休眠的进程,即便唤醒条件已经触发,也许需要10ms的时间才能被调度执行,这显然难以满足低延迟应用的要求。
(2)通用操作系统中大量存在的非抢占式处理会对低延迟处理造成影响。这是因为,即便操作系统已经使用了细粒度的时钟,而且硬件也及时地产生了一个时钟中断,但如果中断被屏蔽或者内核运行在非抢占式代码区,也会造成内核不能及时中断,应用程序依然得不到及时的调度执行,这样的延迟可能会长达50ms~100ms[4]。
(3)线程调度策略也可能造成较大的延迟。即便操作系统使用了细粒度的时钟,并且使用了抢占式方式可以及时中断,但如果优先权不够,还是无法被立刻被调度执行。实时系统领域对该问题进行了较多的研究。其中较好的一类办法是使用按比例的实时调度器[5],它能按照比例对不同类型的应用线程进行调度,前提是所有线程都是抢占式的,而且使用粒度更细的时钟。
(4)通用操作系统一般都使用虚拟内存,因为这使得并发执行的程序可以在运行程序时,只将运行需要的部分载入内存,从而允许程序空间的总和可以远大于实际可用的RAM内存。对于时分系统来说,虚拟内存不会产生问题。但是对于实时系统,这种页面调度与交换会造成无法容忍的不确定性延迟。
为支持实时、低延迟的应用,一些面向操作系统的实时技术被提出。文献[6]实现的实时操作系统利用MINIX无任何页面调度与交换的特点,使用基于优先权的调度器替换了MINIX操作系统原本基于循环的调度器。该方法对时间粒度的要求不太高的应用比较适合。QNX[7]系统在Unix中使用POSIX.1b实时规范,采用的技术有基于优先权的调度算法、用户内存页面锁定、实时信号、优化IPC和时钟等。Vxworks继承了POSIX.1b中的许多方法,此外,Vxworks中内核和事务进程使用了同一地址空间,这使得事务的切换十分迅速,也避免了系统调用中断。REAL/IX系统[8]兼容POSX.1b,通过实现基于信号量的资源访问替换了传统的休眠/唤醒和中断屏蔽,这有效地降低了中断延迟,并使得向多处理器/多微处理器机器的迁移更加容易。REAL/IX实现的技术包括预分配内存和文件空间、同步和异步I/O支持、用户进程直接处理中断等。Rtlinux[9]系统通过在Linux内核和中断控制器硬件之间加上一层轻量级的虚拟机层来虚拟中断控制器和时钟,从而可以将Linux按照抢占式的方式来运行。其中操作系统内核不能直接控制中断控制器,因为虚拟机层使用宏替换了所有开/关中断和中断返回指令,所有的硬件中断均被虚拟机层捕获,然后根据中断状态判断是否需要处理该中断。