【交易技术前沿】RedHat 6.3动态变频技术对交易系统性能的影响 / 姜源,胡伟平

 




本文选自《交易技术前沿》第十六期 (2014年9月)。


姜源,胡伟平
中国金融期货交易所 技术中心,上海 200122
E-mail :jiangyuan@cffex.com.cn
摘 要:本文介绍了RedHat 6.3操作系统中动态变频技术的工作原理,通过分析实际运行环境中交易系统性能问题,剖析了这种技术给交易系统带来的负面影响,并介绍了如何对内核参数进行调整和优化,解决交易系统系统性能不佳的问题。关键词: Linux内核;动态变频技术;报单响应时间;交易系统

1 背景

目前,全球主流的交易所都在积极研发低延时、高性能的交易系统,先进的交易系统是交易所核心竞争力的重要组成部分。交易系统的处理性能主要体现在两个方面:一是每秒能够处理的报单笔数。二是每笔报单响应时间的长短。全球比较先进的交易系统每秒能够处理上百万笔报单,报单的响应时间也只有几十个微秒。目前,国内主流的交易所交易系统和世界一流的交易系统相比,性能上还有一定的差距。随着,国内期货市场的不断发展,越来越多的高频投资者参与到期货交易中来,这给交易系统的处理性能提出了更高要求。
为此,我们在交易系统延时上进行了深入研究和测试。前期我们在一套全新部署的交易系统测试环境里进行性能测试,测试环境使用了RedHat 6.3操作系统,测试的时候发现报单的响应时间异常。通常报单的响应时间会随着每秒处理的报单数量而增大,在尚未达到系统处理能力上限的时候,报单的响应时间会稳定在一个区间内。但是,我们测试时发现,当以每秒2笔进行报单的时候,发现报单的响应时间比较大,超过1毫秒。但是当以每秒500笔进行报单的时候,发现报单的响应时间下降到了500微秒左右。也就是说,当报单压力小的时候,报单响应时间反而很大。这样的现象与我们的预期结果不一致,并且和之前我们在RedHat 5.5上的测试结果不相符。
这到底是什么原因导致的呢?经过大量的测试,并查阅相关资料,最终把问题定位为Linux内核内置的动态变频技术上。

2 动态变频技术

动态变频技术是指CPU硬件本身支持在不同的频率下运行,系统在运行过程中可以根据系统负载情况动态在这些不同的运行频率之间进行切换,从而达到对性能和功耗做到二者兼顾的目的。如果CPU支持这种技术,当系统的负载比较小的时候,CPU切换到低频率状态下运行,耗电量就会减小,实现节能。这和变频空调是一样的道理。变频对于很多环保人士来说是好东西,可以节能,符合现在最时髦的低碳环保的概念。但是,对于像交易系统这样对性能比较敏感的一些应用来说,节能往往意味着损失系统的性能。
变频技术首先是在CPU硬件上出现的,一些主流的CPU都支持变频技术。例如,Intel处理器支持Enhanced SpeedStep技术,AMD处理器支持PowerNow技术等等。不同的处理器厂商提供的变频技术,其硬件实现和使用方法必然存在着或大或小的差异。为了让他们自己产品中的变频技术在Linux中得到支持,每个处理器厂商都需要按照其各自的硬件实现和使用方法向操作系统内核中添加代码。这样一来,Linux内核中维护这些不同厂商的代码就很繁琐。为此,Linux 2.6内核上增加了一个内核子系统,叫Cpufreq。Cpufreq是在Linux内核中支持不同厂商的节能技术而提供的一个统一的设计框架。它分为三个层次,见图1:


最底层的CPU-Specific Drivers,是各个厂商根据自己的变频技术和硬件实现方式提供的变频的驱动程序。如,Intel、AMD各自的变频驱动程序。
最上层的Governors,是调控器,它是选择哪种频率的决策者,它根据一定的标准在适当的时刻选择出 CPU 适合的运行频率,并通过中间层Cpufreq module定义的接口操作底层与CPU相关的变频驱动程序,将 CPU设置运行在选定的频率上。
中间层的Cpufreq module,是调频接口层,对如何控制底层各种不同 CPU 所支持的变频技术以及如何在上层根据系统负载动态选择合适的运行频率进行了封装和抽象,并在二者之间定义了清晰的接口。它是上层调控器和下层各个厂商的驱动程序之间的接口,它从上层调控器得知要将CPU频率调整到哪个频率上,然后调用下层的变频驱动程序实现频率的调整。
Linux 2.6内核中提供了5种调控器(Governors)供用户选择,分别是userspace,conservative,ondemand,powersave和performance。
Performance(性能):CPU会固定工作在其支持的最高运行频率上。
Powersave(节能):CPU会固定工作在其支持的最低运行频率上。
Userspace(用户自定义):允许用户手动选择和设置频率,可通过用户态程序或工具设置频率。
Ondemand(按需调整):根据处理器利用率动态更改处理器频率,超过阈值,设为最高频率,反之,设为最低。
Conservative(保守):渐进式的对频率进行调整,而不是直接调整到最高或者最低频率。

3 动态变频技术对交易系统性能的影响

一笔新的报单报入交易所交易系统,需要经过交易前置,排队机,到达交易撮合核心,交易撮合核心对报单进行处理,然后将处理的结果返回到交易前置上,整个过程花费的时间就是交易系统报单响应时间。在报单路径中,每个节点的处理性能都会影响到报单整体的延时。


由于动态变频技术会根据一定的策略调整CPU的运行频率,当系统负载不大的时候,Cpufreq的调控器(Governor)会把CPU的运行频率调整到低频率上,反之,当系统的负载比较大的时候,调控器会把CPU的运行频率调整到高频率上。这样,当交易系统处于负载不大的情况下,比如每秒接收到2笔报单,这时,由于CPU的运行频率调整到了低频率上,交易撮合核心就“慢慢悠悠”地处理了一下这几笔报单,然后将处理结果返回到前置机上面,这样在前置机上看到的报单响应时间就比较大。当交易系统负载变大的时候,比如,每秒接收500笔报单,CPU的运行频率调整到高频率上,这样交易撮合核心很快处理完每笔报单,在前置机上看到的报单响应时间就比较小。

4 交易系统性能调优

为了维持系统的高性能,需要关闭变频功能,让系统运行在高性能的模式上,目前有三种处理方式:
(1)、编译内核时配置调控器的类型为Performance类型
在内核编译配置文件中设置CONFIG_CPU_FREQ=y,CONFIG_CPU_FREQ_PERFORMANCE=y。通常,在正式发行的版本里,这一项已经确定了,无法再自行修改。所以,一般很少用这种方法。
(2)、完全关闭动态调频的功能
在使用Intel处理器的系统中,大多数Linux新发行的版本(比如RedHat 6.3)都使用intel_idle驱动来控制CPU状态。这个驱动一般都被编译成系统内核的一部分而不是单独一个模块。当这个驱动程序起作用时,它会忽略掉BIOS及内核参数的相关设置。所以,如果不想让intel_idle驱动来控制CPU的状态,就可以通过设置intel_driver.max_cstate=0禁掉它。当关闭intel_idle驱动之后,操作系统通过ACPI_driver驱动程序来调整CPU的状态,同时,BIOS给使用ACPI驱动程序的操作系统提供了一个CPU状态列表,通过这一列表来控制CPU状态。所以,即使我们禁掉intel_idle驱动之后,还需要在系统启动的时候进入BIOS,然后关掉CPU状态选项。需要注意的是,使用这种方法调整intel_driver.max_cstate参数后,下次重启服务器后会失效,需再次重新设置它。
(3)、动态调整变频策略
利用RedHat 提供的tuned工具(建议安装tuned-0.2.19-7以上版本),这个工具是一个“集大成”的工具套件,里面包含了对网络、磁盘、CPU、内存等的调节配置,这个工具可以设置不同的调节模式,如果追求低延时,可以通过运行:tuned-adm profile latency-performance命令设置成低延时模式。根据自己的需求,还可以设置成其他模式,比如throughput-performance、enterprise-storage、server-powersave等等。这样可以通过工具,在不同的时间根据需要设置成不同的模式。
在实际交易系统运行环境中,运行人员可根据系统的运行时段,动态调整上面的调节模式。比如,可以通过设置crontab定时任务,当早上(比如8:00)交易系统进入运行状态后,crontab定时任务就调用命令:tuned-adm profile latency-performance,将系统调整到低延时模式上。当下午收盘,系统停止运行后(比如16:00),crontab定时任务又调用命令:tuned-adm profile server-powersave,将系统调整到节能的模式。这样,在交易时段,系统处于高性能、低延时的模式,交易结束后,系统又可以进入节能模式,性能和节能两者兼得。

5 总结与展望

本文通过分析和排查实际测试过程中遇到的系统性能问题,分析了Redhat6.3操作系统中的动态变频技术及其对交易系统性能的影响。并给出了解决方案。随着Linux各种新版本的不断发行,内核提供了更丰富和个性化的功能与机制,满足不同条件下系统和用户的需求。我们需要仔细研究和甄别这些新特性、新功能,研究这些新特性会给我们带来哪些好处,同时更要关注这些特性会给我们的系统带来哪些“副作用”。目前,各个交易所、期货公司、机构客户等都十分关注操作系统的内核调优,以优化和提升自身交易系统的性能。尤其是,随着程序化交易的不断发展,整个行业对于操作系统内核调优的需求不断增加。从根本上来说,行业内的技术人员需要加深对操作系统内核的理解和掌握,掌握一些内核调优的技术和工具,通过分析系统的瓶颈,对症下药,才能不断完善和提升系统的整体性能。



免责声明



本公众号内容仅供参考。对任何因直接或间接使用本公众号内容而造成的损失,包括但不限于因有关内容不准确、不完整而导致的损失,本公众号不承担任何法律责任。如有问题请反馈至tech_support@sse.com.cn。



--------------------------
上海证券交易所为证券公司、基金管理公司等市场参与者及相关行业机构提供交易技术支持与服务,包括日常交易技术支持、技术交流研讨、市场调查反馈、证券信息技术知识库、测试等服务。



点击"阅读全文"了解详情


    关注 上交所技术服务


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册