一、延迟的本质:从物理极限到软件开销

做高频交易的人,天天挂在嘴边的就是「延迟」。

但你真的理解延迟是什么吗?

我个人习惯把延迟拆成两层来看:物理极限软件开销。这两层搞明白了,你才知道每一纳秒到底花在了哪里。

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 延迟的组成:一张图看懂

我画了一张图,把延迟的组成拆解清楚。你一看就明白。

延迟的组成结构 总延迟 物理延迟(不可优化) 软件延迟(可优化) 光速限制 传输距离 介质速度 CPU指令 内存访问 系统调用 分支预测、流水线 缓存层级、NUMA 上下文切换 红色:物理极限,无法优化 | 绿色:软件开销,可以优化 优化目标:让软件延迟无限逼近物理延迟

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 延迟优化的核心原则

做了这么多年低延迟系统,我总结出三条原则:

  1. 先测再优化:不要猜哪里慢。用性能分析工具(perf、DTrace)先测,找到真正的热点。
  2. 从大到小:先优化大头。物理路径、网络拓扑这些大项,比抠几条指令重要得多。
  3. 理解硬件:不懂CPU架构、内存层级、网络协议栈,你写的优化代码可能是负优化。

说白了,延迟优化不是炫技。它是系统工程,需要你理解从物理层到应用层的每一层。

我记得刚入行时,带我的老工程师说了一句话,我一直记着:「你优化的每一纳秒,都是从物理极限手里抢回来的。

这句话,送给你。

本章核心:延迟 = 物理极限 + 软件开销。物理极限是天花板,软件开销是我们可以动手的地方。理解每一纳秒的价值,是做好高频交易的第一步。


公众号:蓝海资料掘金营,微信deep3321