高频交易,微秒级延迟,如何降低通讯延迟?

论坛 期权论坛 期权     
Zh1cheng   2018-10-15 23:56   1965   0
最近在测试我自己写的一个交易系统原型。测试是在windows上进行的。 工作站(WS)发送FIX消息(NewOrderSingle)到网关(GW),在根据路由规则转发去订单管理服务器(OMS)。OMS接受到消息之后 返回ExecutipnReport(39=PendingNew)至GW再转发到WS。

1. 三个程序都跑在同一个机器上的时候,GW/OMS之间用共享内存(BOOST::interprocess),GW/WS之间用socket(BOOST::ASIO)。整个延迟RTT大概在300us, 1秒钟发送3000个订单.   OMS 内部处理时间大概80us-100us, GW转发一个消息大概耗时40us.
2. 如果只计算GW/WS之间的RTT, 大概180us-200us (使用windows loopback socket)
3.GW/OMS之间共享内存通讯,在机器不忙的状态下,大概一次通知需要10us (boost::interprocess::Semaphore)

我的问题的是,
1. socket (boost::asio)是否有可以进一步降低延迟?根据微软的文档,最快loopback socket可以达到10us以下。
2. 如果把程序跑在linux上,能有大概多大的改善?本人没有太多linux开发经验。
-------------------------------------------------------------------------------
29/09/2016 追加:
linux上测试过了,然而并没有多少改变。差别在10us左右。
-------------------------------------------------------------------------------
3. 关于进程间通讯或者socket通讯, 是否有更好的替代方案?(不考虑硬件或者kernel bypass)

------------------------------------------------------------------------------
18/10/2016 追加:
终于有点新的进展了。卸载了symantec反病毒软件,并做了一些小优化。整体的latency从300us 下降到150us左右。
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP