高频交易下证券公司交易系统的性能优化
【摘要】高频交易一直在追求速度的跑道上竞赛,本文阐明了高频交易体系内涉及的各环节以及度量方法,同时对基础软硬件包括硬件、操作系统、网卡以及相应调优工具进行了介绍,给出了切实可行的试验方法供读者借鉴。同时作者提出交易链路的稳定性以及券商提供的业务资源更是服务专业客户核心竞争力值得各位深思。
【作者】周尤珠,就职于海通证券股份有限公司。从业近20年,一直负责券商经纪业务侧交易系统的管理及研发工作,目前负责海通新一代核心交易系统的建设。在交易技术前沿等期刊上发表核心交易系统相关论文数篇,获得专利1项。
第一章 概述
交易系统性能优化是当前国内金融市场中一个备受关注的话题。近年来,随着T+0交易品种陆续上市,以及北交所、广期所的成立挂牌,金融交易市场机会不断涌现。在这个竞争激烈的环境下,如何在最短的时间内获取到最新的股票、期权、期货及相关的行情信息,并且能够以最快的速度向交易所提交订单请求,是市场竞争的重要方向。
对于一次委托来说,订单全链路耗时即投资者的交易订单从订单形成系统发至经纪公司订单处理系统经过其处理确认后发往交易所及交易所确认报单后按原路径返回至订单形成系统的往返整体链路的耗时。而对于高频交易来说,投资者除了要求订单全链路耗时不断提速外,同时也会对分笔行情的获取有极高的要求,因此整个高频交易体系内的调优主要涵盖网络链路、订单形成系统、订单处理系统、交易所报盘网关、交易所内部系统、行情(接收)、分析行情(策略部分)等各环节。分析各环节的耗时占比及调优性价比权衡得出最适合当下的方案。
各家应用场景各有不同,本文针对基础软硬件和网络简单介绍下通用方案供各位参考:
第一,找寻影响因子,应当建立稳定、高速的全链路数据度量通道,保证实时、准确地获取网络快慢、系统优劣的度量数据。全链路度量是对高频交易系统整个交易流程进行全方位的度量和评估。通过全链路度量,可以精确地评估每个环节的效率和时延,找出影响系统性能的瓶颈,并针对性地进行优化和改进。
第二,单元优选更换,使用高性能的硬件设备,能够在底层搭好框架,保证提供高算力,完成订单匹配,减少交易时延,提高交易执行的效率和成功率。
最终,系统调优观察,对于已获得的行情和交易数据,在高性能硬件上通过系统和软件优化,使高频交易系统达到极限性能,是目前证券公司的整体发力方向。在未来,也将成为证券期货公司提升核心竞争力、追求长期稳定盈利的重要手段之一。
第二章 常见问题
整体性能优化包含但不限于下述步骤:
1)影响因子评估;
2)瓶颈观测及分析;
3)单元调优;
4)系统级优化;
5)持续监控及改进。
通常存在以下常见问题:
找寻影响因子
问题定位难:交易环境复杂,交易链条长,无法精准定位系统性能问题;
度量精度要求高:极速行情、交易软硬件频繁更新优化,常规测试方法无法达到精度要求,对比测试大费周章;
偶发问题难觉察:日常测试无法发现交易系统偶发问题(抖动、异常响应速度)。
单元优选更换
高性能服务器选择:高频交易系统需要处理大量的市场行情数据、历史数据和实时数据,并进行复杂的计算和分析。如何选择合适的高性能CPU和内存的服务器是至关重要的。高频率的多核处理器和大容量的内存可以快速处理数据,加速算法模型的计算和决策生成。
低延时网卡选择:高频交易系统需要及时获取和传输行情数据,而且通常需要与多个交易所和数据源连接。因此,选择具有高带宽和低延迟的网卡是必要的。
高稳定低延时交换机选择:高频交易系统通常需要持续运行,并承受大规模的数据处理和交易流量。因此,选择具有高可靠性和低延时的交换机可以提高系统的稳定性和可靠性。
系统调优观察
调优方案定夺:除了硬件层面优化,系统层面的优化包括且不限制于进程调用、函数处理等,在开销及时延消耗比较大的函数栈中,通过进行定制化工具开发,实施埋点等操作,从而进行代码级性能瓶颈分析,并助力给出针对性的调优方案
持续观察分析:在调优手段覆盖之后,基于目前券商大多数系统环境,即使在某一次调优后达到了不错的数据,但是由于负载均衡、内核污染等等不可避的问题存在,单次调优无法达到应有效果,所以持续分析是不可缺少的一环。
第三章 优化思路
找寻影响因子——度量
极速高频交易环境中,需要采用最快的网络设备进行组网,并且要对全链路节点的处理时延、流量、抖动等性能指标进行高精准统计与展示,帮助运维人员对应用系统性能异常和故障做出精准快速定位。
行情链路包括:行情网关,行情解码,行情转发,客户端,网络设备等;
交易链路包括:客户策略,交易系统,报盘网关,网络设备、防火墙等。
现有业务分析及监控平台主要采用系统内置分析模块,但只能分析单节点性能,不能分析全链路端到端性能;且软件操作系统打点,时间精度抖动较大,准确性不足。
上图为一种全链路的高精度度量方案,此方案通过将网络流量旁路导出至高精准时间戳设备,在数据包尾部添加上可识别的时间戳标识,并实时进行流量解析计算,计算精度为皮秒级别,可以支持全链路时延精准度量。
单元优选更换——匹配
交易链的不同参与者对于设备的要求会有所不同,从底层链路、网络的选择上,都需要选择合适匹配的参与单元,而作为关键点的交易系统和宿主机,在满足高性能低延时的同时,还需考虑载体、温度、功耗等一一来进行选型,并逐步建立测评选型基准。交易系统不光需要追求极低的延时,更重要的是保持整体稳定,稳定即可预期,可掌控,如果相对波动较大,就无法预测报单策略的有效性。
系统调优观察——定性
机器从出厂之后,就会有相关参数,而通过PCIE和速率、IO和负载、字节和网速等等,会计算出一个理想数值,但现实情况中往往达不到理想值。此时则需在整体系统中,对当前CPU、IO、Memory等进行密集性、内存负载、IO基准等测试,如性能监控下,可采用PCP测试;系统追踪中,运用Pcef;针对于系统调用,用Toolkit进行跟踪等等。如此以来,将将硬件、系统、应用等进行一连串调优,再根据每次调优后的数据计算出基线和饱和率,审视工作流。
在审视工作流完成基数标定之后,OS层承上启下,单点定性后往往在某次调优后牵一发而动全身。基于操作系统层面实现交易系统优化往往非常有效,比修改应用程序、改善硬件环境等问题解决更彻底、整体TCO更优。这个时候,针对于OS层面,往往需要确认四件事情。
1.命令集:在调优OS层面时,首先需要确认使用的命令集。不同的硬件架构和处理器可能支持不同的命令集,例如x86、x86-64、ARM等。了解命令集对于确定可用的优化选项以及应用程序的性能影响非常重要。
2. BIOS设置:BIOS(基本输入/输出系统)是在计算机启动过程中加载的固件,它负责初始化硬件并传递控制权给操作系统。在调优OS层面时,需要确认BIOS设置是否合理。例如,检查BIOS中的电源管理选项、内存配置、硬件虚拟化支持等设置,以确保它们与应用程序的性能需求相匹配。
3.OS本身:操作系统本身也可能对系统性能产生影响。确保操作系统已经进行了必要的优化和调整,例如启用了适当的内核参数、关闭了不必要的服务、设置了正确的文件系统选项等。此外,还可以考虑更新操作系统补丁和驱动程序,以修复可能存在的性能问题。
4.负载容量规划:在调优OS层面时,需要对负载容量进行规划和评估。这包括确定系统的预期负载和性能需求,以便为其分配足够的资源。可以考虑调整CPU调度策略、内存管理设置、文件系统缓存大小等,以优化系统的性能和响应能力。
而完成以上俩点后。金融行业的系统最佳不应当为系统在某一刻可以达到的峰值,而是针对于当前应用最匹配的一系列方案才可以称为最佳。比如在证券客户交易系统方面,缩短延时(加快响应速度)比提高吞吐量(完成更多操作)更重要。而这二者往往互相制约。同时针对于不同系统不同应用,也需要通过对业务的分析,进行某一点的最佳调优,再由点及面,才可以达到系统的最佳调优。
第四章 性能天梯
高频交易端到端链路从架构上可分为应用交付层、支撑环境层、操作系统层、硬件设备层和基础设施层。应用交付层主要是交易应用程序和算法,支撑环境层包括了消息中间件、程序加速软件等环境软件,基础设施层主要由机房基础设施组成。端到端整体时延可以理解为证券公司从接收交易所行情入口到报盘至交易所间各个节点的延时之和,其中包括了行情系统、交易系统、网络设备、服务器网卡、光纤传输等等环节,各环节目前的时延量级如下:
毫秒(10-3秒)级别:运营商专线
百微秒(10-6秒)级别:交易系统、行情系统、交易网关等
微秒(10-6秒)级别: FPGA系统、服务器网卡
百纳秒(10-9秒)级别:低延时网络设备
纳秒(10-9秒)级别:光纤、一层交换机
早期“端到端低延时研究”主要集中在交易系统的改进上,这是因为端到端交易流程整体延时的瓶颈集中在交易系统上。交易系统的每一次大的改进和创新,都有可能为整体交易速度带来几倍甚至几十倍的提升。在证券交易系统的延迟方面,2006-2008 年间,性能很好的交易系统延迟都达到了100毫秒。2009-2011 年间,较快交易系统的延迟达到了100 微秒左右。目前,交易系统的延时已经来到了微秒级,行情系统的延时已经来到了百纳秒级别,底层的传输网络、服务器网卡和光纤传输在端到端流程的整体延时占比不断提高。
第五章 调优技术
在选用合适的硬件之后,仅仅完成了初始阶段。怎么达到最佳性能,在目前的阶段还是没有尽头的。而在低延迟领域,如高频系统或实时媒体系统,大多要求服务器在10微秒以下提供一致的系统响应。这就需要硬件、操作系统、应用、网络等领域进行调优以达到这一要求。本章节将主要针对硬件及操作系统层面的调优技术做一些探索和分享。
硬件配置
要实现微秒级的低延迟,首先需要了解被测系统的硬件配置。影响时延的重要因素包括核心数、每个核心的执行线程数、插槽数、NUMA节点数、CPU和内存在NUMA拓扑中的排列,以及NUMA节点中的缓存拓扑。Linux系统可以时延lscpu命令,对硬件拓扑情况进行查看。
扫一扫,关注我们