一、延迟的本质:从物理极限到软件开销
做高频交易的人,天天挂在嘴边的就是「延迟」。
但你真的理解延迟是什么吗?
我个人习惯把延迟拆成两层来看:物理极限和软件开销。这两层搞明白了,你才知道每一纳秒到底花在了哪里。
1.1 物理极限:光速是天花板
先说物理层。信号在铜线里传播,速度大概是光速的60%-70%。
算一笔账:光速是3×10⁸ m/s,一纳秒光只能走30厘米。在铜线里,一纳秒大概走20厘米。
这意味着什么?
你的交易服务器如果放在上海,交易所在北京,两地直线距离约1200公里。信号一来一回,光速跑完也要8毫秒。这8毫秒,是物理极限,你写再多代码也突破不了。
核心认知:物理延迟是硬天花板。软件优化的目标,是无限逼近这个天花板,而不是试图突破它。
我在项目中遇到过一件事。有个团队花了大半年优化软件,延迟降了5微秒,特别高兴。结果一查,他们用的光纤路径绕路了,比最短路径多了200公里。光这200公里,物理延迟就多了1毫秒。你想想看,5微秒和1毫秒,差了两个数量级。方向错了,再努力也白搭。
1.2 软件开销:我们能掌控的部分
物理极限动不了,但软件开销是可以优化的。软件开销包括哪些?
- CPU指令执行:一条加法指令大概0.3纳秒,但一次缓存未命中可能300纳秒
- 内存访问:L1缓存命中约1纳秒,L3缓存约10纳秒,主存约100纳秒
- 系统调用:一次内核态切换,几百纳秒到几微秒不等
- 网络协议栈:TCP/IP协议处理,几微秒到几十微秒
说白了,软件开销就是「你写的代码让CPU多干了哪些活」。这些活,很多是可以砍掉的。
1.3 每一纳秒的价值
你可能觉得,一纳秒能干嘛?
在高频交易里,一纳秒就是一次套利机会。我见过一个策略,每笔交易赚0.1个最小价格变动单位。如果一天做10万笔,每笔快1纳秒,一年下来多赚的钱够养一个团队。
为什么会这样?因为高频交易是零和博弈。你比对手快一纳秒,你就能先成交。先成交的人吃肉,后成交的人买单。
一个真实案例:2010年,某交易所升级了撮合引擎,延迟从3毫秒降到1毫秒。结果呢?高频交易公司的利润直接翻倍。不是因为他们策略变好了,纯粹是因为延迟降低了。
1.4 延迟的组成:一张图看懂
我画了一张图,把延迟的组成拆解清楚。你一看就明白。
1.5 延迟的度量:纳秒级精度
做高频交易,你得对时间有感觉。我列个表,你感受一下不同操作的延迟量级。
| 操作 | 延迟 | 相对比例 |
|---|---|---|
| L1缓存命中 | ~1 ns | 1x |
| L2缓存命中 | ~4 ns | 4x |
| L3缓存命中 | ~10 ns | 10x |
| 主存访问 | ~100 ns | 100x |
| NUMA跨节点访问 | ~200 ns | 200x |
| 系统调用(内核态) | ~500 ns - 2 μs | 500x - 2000x |
| TCP/IP网络往返(同机房) | ~10 μs | 10000x |
| 光纤传输(100公里) | ~500 μs | 500000x |
避坑指南:我曾经见过一个团队,花了几百万买FPGA加速卡,结果代码里有个不必要的memcpy,每次拷贝1MB数据。这个memcpy花了10微秒,直接把FPGA省下来的几百纳秒全吃掉了。嗯,优化要全局看,不能只盯着一个点。
1.6 延迟优化的核心原则
做了这么多年低延迟系统,我总结出三条原则:
- 先测再优化:不要猜哪里慢。用性能分析工具(perf、DTrace)先测,找到真正的热点。
- 从大到小:先优化大头。物理路径、网络拓扑这些大项,比抠几条指令重要得多。
- 理解硬件:不懂CPU架构、内存层级、网络协议栈,你写的优化代码可能是负优化。
说白了,延迟优化不是炫技。它是系统工程,需要你理解从物理层到应用层的每一层。
我记得刚入行时,带我的老工程师说了一句话,我一直记着:「你优化的每一纳秒,都是从物理极限手里抢回来的。」
这句话,送给你。
本章核心:延迟 = 物理极限 + 软件开销。物理极限是天花板,软件开销是我们可以动手的地方。理解每一纳秒的价值,是做好高频交易的第一步。
公众号:蓝海资料掘金营,微信deep3321