|
外汇量化平台怎样降低延迟?colocation与内核旁路技术解析 做外汇量化的朋友大概率都遇到过这个场景:策略回测年化夏普2.0,一到实盘就拉胯,滑点吃掉大半利润。排查半天,问题往往出在延迟上——你还在走公网绕路,做市商那边早就用光纤直连把你甩开了。今天不绕弯子,直接聊两个真正能砍延迟的硬手段:colocation和内核旁路。 延迟到底藏在哪儿? 外汇没有统一交易所,流动性分散在各大银行和ECN之间,订单要跨多个节点撮合。这条链路上,延迟通常来自三块:网络传输(物理距离+跳数)、撮合引擎排队、还有操作系统本身的协议栈开销。前两块靠机房选址和硬件解决,第三块就是内核旁路的主场。 Colocation:把服务器塞进撮合引擎隔壁 Colocation说白了就是把你的交易服务器托管在交易所或流动性提供商的数据中心里,物理距离从几十公里缩短到几米。别小看这点距离,光在光纤里跑,每公里大约5微秒,跨个城市来回就是几百微秒的差距。对于做市和套利策略,这个量级足够决定成交还是被扫。 实际操作上,主流的ECN比如EBS、Refinitiv,以及CME这类期货交易所,都提供co-location机柜租赁。你和做市商的服务器可能就在同一排机架上,网络跳数从十几跳降到一两跳。有些平台还支持交叉连接,直接拉一根光纤到撮合引擎,延迟能压到微秒级。 但这里有个坑:不是所有机房都值得进。选机房时得看流动性的实际聚集地,比如伦敦的LD4、纽约的NY4,这些地方聚集了大量银行和做市商。你进了偏远机房,省了托管费,但对手方都在LD4,跨机房那几毫秒的延迟照样让你吃灰。
内核旁路:把操作系统踢出快车道 进了机房只是第一步,数据包到了网卡,传统Linux内核还得走一遍TCP/IP协议栈:中断、拷贝、上下文切换,一套下来几十微秒就没了。高频场景下,这比网络传输本身还慢。 内核旁路技术就是让应用程序直接读写网卡,绕过内核协议栈。常见的方案有DPDK、Solarflare的Onload、还有Mellanox的VMA。以Onload为例,它把socket调用直接映射到用户态,应用程序改几行代码就能用,延迟能从几十微秒降到个位数。 DPDK更底层,需要自己管理收发队列,适合对延迟极度敏感的策略。不过它学习和维护成本高,团队没个 kernel 背景的人,踩坑能踩到怀疑人生。我的建议是:先从Onload这类半旁路方案入手,等策略容量和频率真的需要了,再考虑全用户态方案。 还有个容易被忽略的点:网卡中断亲和性和CPU绑定。就算上了内核旁路,如果中断处理程序跟策略线程抢同一个核,延迟照样抖。把网卡队列绑到独立物理核,策略线程独占另外的核,NUMA节点对齐,这些细节比选哪个旁路框架更影响实际表现。 别为了低延迟把合规丢了 聊技术容易上头,但外汇量化得先活下来。国内做外汇保证金交易本身有政策红线,持牌机构走跨境托管也得过外汇管理局和网信办的备案。colocation机房如果涉及跨境数据专线,得确认是否在合规通道内,别为了省几微秒用了灰色线路,回头被叫停就得不偿失。 另外,交易所对co-location机柜通常有公平接入要求,不能私下搞特殊延迟优势。有的平台会限制单个客户占用的机柜功率和网络端口,签合同前把这些条款看清楚。 落地建议 别一上来就砸钱上全套。先拿traceroute和mtr测清楚当前链路延迟分布,看看瓶颈在公网绕路还是本地协议栈。如果网络跳数多、RTT波动大,优先考虑co-location;如果网络已经够近,延迟还是下不来,再评估内核旁路。两者叠加才是完整方案,但顺序错了,钱花得冤枉。 最后提一句:延迟优化是条不归路,从毫秒到微秒再到纳秒,投入产出比会急剧下降。先想清楚策略的容量和频率到底需要什么级别的延迟,别被供应商的PPT带着跑。 |










备案号: