低延迟交易系统完全指南

一个页面,从入门到专家。更新于 2026 年 7 月。文中每项技术都链回资源合集中的参考资料,供你深入研读。

目录


1. “低延迟”是什么意思(从这里开始)

延迟(latency) 是因与果之间的时间间隔:交易所上价格发生变化(tick),你的系统作为响应发出一笔订单(trade)。这段间隔叫做 tick-to-trade 延迟,它是整个领域的头号指标(Databento 的定义是目前最好的现代版本)。

为什么它重要?在电子化市场里,机会按到达顺序被认领。如果两家公司看到同一个错误定价,快的那家成交,慢的那家错失机会——或者更糟,基于过时信息成交。因此交易中的”低延迟”并不是”平均起来快”,而是在尾部依然又快又可预测。一个平均 1 µs 响应、但偶尔要花 1 ms 的系统是坏掉的:慢响应恰恰集中在市场剧烈波动、延迟最要命的时刻。这就是为什么这门学科对抖动(jitter)(方差)的执念不亚于速度本身,也是为什么所有严肃的测量都以百分位数(p99、p99.9、max)报告,从不用平均值。

数量级的直觉 ——在学任何东西之前,先把这些数量级刻进脑子里:

时间 这段时间里会发生什么
1 ns 光传播约 30 cm;约 4-5 个 CPU 时钟周期
~1–4 ns L1 缓存命中;一台 layer-1 交换机转发一个数据包(Arista 7130:约 4 ns)
~14 ns 已公布的最快 FPGA tick-to-trade(STAC-T0 纪录,2024 年)
~30–40 ns L3 缓存命中;FPGA 行情复用器(MetaMux:约 39 ns)
~100 ns 一次 DRAM 访问;跨 CPU chiplet 的核间消息
~500 ns–2 µs 一条完整的内核旁路软件 tick-to-trade 路径
~10–50 µs 一次调优良好的内核网络往返;一次糟糕的 TLB shootdown
~1 ms 一次没能在设计上消除的垃圾回收停顿;约 150 km 的光纤

从这张表能得出两个推论。第一,物理定律是硬预算:在纳秒尺度上,线缆长度都有影响,这就是为什么各家公司花钱租用距离交易所撮合引擎仅几米的托管(co-location)机架,也是芝加哥与纽约之间存在微波链路的原因(微波比光在玻璃中的传播速度更快)。第二,每一层都算数:应用调得再完美,只要操作系统打断它、网卡缓冲它、或者交换机把它排进队列,就前功尽弃。低延迟是一个全栈属性。

入门阅读路径: Tick-to-trade 延迟内核旁路(Cloudflare)Matt Godbolt 讲 CPU 工作原理Timur Doumler:What is Low Latency C++?

2. 交易系统的解剖图:纳秒都花在了哪里

一个最简的电子交易系统长这样:

Exchange ──market data (UDP multicast)──▶ [switch] ─▶ [NIC] ─▶ feed handler
                                                                    │
                                                              order book / strategy
                                                                    │
Exchange ◀──order entry (TCP)─────────── [switch] ◀─ [NIC] ◀─ execution gateway

tick-to-trade 预算大致按以下顺序被消耗:

  1. 线缆 → 网卡(网络):光纤/铜缆中的传播、交换机转发、网卡 PHY/MAC。layer-1 交换机能把这段压到约 4 ns;注意在 25GbE 上,仅前向纠错(FEC)一项就增加约 100 ns,所以追求极致低延迟的公司在短链路上会关闭 FEC。
  2. 网卡 → 应用(主机入向):DMA 之后,要么走内核网络栈(微秒级),要么走内核旁路(kernel bypass)栈直接从用户态读取(数百纳秒级)。
  3. 解码与建簿:解析交易所协议(如 MoldUDP64 上的 ITCH)并更新订单簿(order book)——纯粹的 CPU/缓存工作。
  4. 决策:策略逻辑本身。在有竞争力的系统里这一步是纳秒级——预先算好的决策、查表——而不是”跑一个模型”。
  5. 订单发出(主机出向 + 网络):序列化订单(如 SoupBinTCP 上的 OUCH),经过网卡(CTPIO 之类的直通发送特性有帮助),再穿回交换机。

后面的每一节各攻克这份预算中的一层。专家级的洞见在于各层是相互作用的:例如,网卡放在错误的 NUMA 节点会毒害第 2–5 步;一个没驯服的内核定时器 tick 会给第 3–4 步注入抖动,代码写得再好也没用。

三个技术层级(2026 年数据):

层级 Tick-to-trade 成本与灵活性
调优后的软件(内核旁路,C++/Rust) ~1–2 µs 最便宜、最灵活;所有人的起点
FPGA(CPU+FPGA 混合) ~50–500 ns;纪录 13.9 ns 需要硬件团队;主流竞争层级
ASIC / eFPGA ~10–50 ns,确定性 仅限顶级公司;僵化且资本密集

3. 第 1 级 — 先测量(没有商量余地的纪律)

所有专家级资料在操作顺序上达成一致:测不了的东西就调不了。在改动任何一个 BIOS 开关之前:

来自实践者指南的一个好习惯:一次只改一样东西,改的同时保持抖动测量持续运行。很多”优化”是用尾部换均值。

4. 第 2 级 — 机器:硬件选型与 BIOS

本节完整参考资料:服务器硬件与 CPU

CPU 选型(2026 年)。 延迟路径需要的是少而快、缓存充裕的核心,而不是又多又慢的核心:

已成定论的架构决策:

5. 第 3 级 — 操作系统:Linux 调优

本节完整参考资料:Linux 操作系统调优

目标:给你的热点线程专用且不被打扰的核心。现代 Linux 能把微秒级的抖动压到几乎为零,但前提是深思熟虑的配置。以下是分层配方,出自 Red HatRigtorpSUSE 的参考资料:

  1. 给机器分区。 杂务(内核线程、IRQ、守护进程)放在少数几个核上;其余核心全部隔离出来给应用。tunedcpu-partitioning 配置文件把这一步自动化了,是 Red Hat 推荐的起点。
  2. 正确地隔离——单靠 isolcpus 不算隔离。 它只是把核心从调度器中移除,但定时器 tick 和 RCU 回调仍会触发(一个真实案例:在”已隔离”的核上每 4 ms 出现 200 µs 尖刺)。完整配方是 isolcpus=(或 cgroup-v2 isolated partition)+ nohz_full=(自适应无 tick——每秒仅残留一次 tick)+ rcu_nocbs=(卸载 RCU 回调)+ irqaffinity=(把中断引导到杂务核心上)。
  3. 消灭频率与睡眠状态切换。 使用 performance governor;通过 cpu_dma_latency PM-QoS 限制 C-state(tuned 的延迟类配置文件会保持它打开)——从深度 C-state 唤醒要花数十微秒。
  4. 驯服内存。 静态 hugepages(减少 TLB miss)、mlockall()(杜绝缺页)、关 swap、关透明大页、关自动 NUMA 均衡。当心 TLB shootdown:进程中任何线程的 munmap/madvise 都可能打断该进程的每一个核——预分配内存,热路径上永不释放。
  5. 对投机执行缓解措施做出决策。 在物理上受保护的单租户交易主机上,mitigations=off 是标准做法(开启时历史上有 15–25% 的性能损失;较新的 CPU 在硬件层面修复了更多问题)。逐台主机做风险评估。
  6. 考虑 PREEMPT_RT。 实时抢占自 Linux 6.12(2024 年 11 月)起已进入主线——不再需要树外补丁——kernel-rt 随标准版 RHEL 9/10 一同发布。注意 RT 优化的是最坏情况的调度延迟,有时以少量吞吐为代价;很多交易负载更偏好”调优后的标准内核 + 忙轮询”。Red Hat 的经验法则:标准内核调优就能拿到约 90% 的收益。
  7. 验证。 rtla timerlat/osnoise(内核 5.17+)、sysjitter、cyclictest——每次改动之后都要跑。

6. 第 4 级 — 网络路径

本节完整参考资料:网络、网卡与内核旁路

先理解内核路径CUBRID 心智模型packagecloud 深度剖析整合版现代指南)。内核栈每个包要花微秒级的成本(系统调用、拷贝、中断、softIRQ),单核上限约 100 万 pps——但正确的调优(多队列网卡、RSS/RFS、IRQ 亲和性、一切 NUMA 本地化、忙轮询)能换来很多:不绕过内核也能 100 万+ pps真实服务器上 5 倍提升、每个旋钮都有测量。而且在最后一微秒不值钱的所有场景,留在内核里的理由很充分:你保住了路由、防火墙、工具链和可运维性。

内核旁路是交易热路径上的标准做法。协议栈把网卡映射进用户态;应用以轮询(自旋)取代中断:

网卡(2026 年):AMD Solarflare X4(2025 年 10 月,定制 ASIC、PCIe Gen5、CTPIO 直通发送)领跑软件交易细分市场;X3522/X2522 部署广泛;Cisco Nexus SmartNIC(前 ExaNIC)仍能做到 568 ns 的触发到响应,但已进入维护模式;NVIDIA ConnectX-7/8 常见于行情分发、抓包和 RoCE 后端。

交换机:自 Cisco 于 2023 年对前 Exablaze 的 Nexus 3550 产品线停售后,Arista 7130 独占超低延迟细分市场:layer-1 转发约 4 ns,MetaMux FPGA 复用约 39 ns,MetaWatch 分光镜像带亚纳秒时间戳。常规超低延迟交换机(约 150–250 ns)用于汇聚层。

RDMA/InfiniBand:角色自 2018 年以来发生了变化——面向交易所的路径是以太网 UDP 组播;RDMA 以 RoCEv2 fabric 的形式存活于公司内部(分发、存储、抓包,约 2–5 µs 级别)。如果你要构建这类系统,RDMA 编程手册仍是参考标准。

7. 第 5 级 — 代码

本节完整参考资料:编程语言与代码

语言是最小的选择;机械同情(mechanical sympathy)——写出 CPU 能够可预测地执行的代码——才是真正的功夫:

8. 第 6 级 — 硬件加速:FPGA 与 ASIC

本节完整参考资料:FPGA 与硬件加速

当软件走到尽头(约 1 µs),数据通路就要搬进硬件:

9. 时间:时钟同步与时间戳

本节完整参考资料:时钟同步与时间戳

没有严肃的时钟,你既无法测量交易系统,也无法合法运营它:

10. 成长路线图:入门 → 专家

阶段 0 — 打基础(数周)。 理解业务领域和机器。读 tick-to-trade;看 Godbolt 讲 CPUDoumler 的两部曲;学习内核网络路径。交付物:你能讲清一微秒都花在了哪里。

阶段 1 — 测量(数周)。 在一台 Linux 机器上搭好 Google Benchmark、perf + 火焰图、sysjitter 和 c2clat。给一切建立基线。交付物:一份原厂硬件与内核的延迟/抖动报告。

阶段 2 — 调优机器(一个月)。 应用 BIOS 铁律Linux 配方:cpu-partitioning、nohz_full、IRQ 引导、hugepages、governor。每次改动后重新测量。交付物:sysjitter 证明确实安静的隔离核心。

阶段 3 — 调优网络(一个月)。 先做内核内的多队列/RSS/IRQ 亲和性/忙轮询(Cloudflaretalawah);再用 Onload 或 XLIO 做内核旁路;用 sockperf 测量。交付物:一条低于 2 µs 的回显路径,并有直方图为证。

阶段 4 — 写热路径代码(数月)。 从零构建一个 SPSC 队列;认真学好原子操作;用缓存友好的布局写一个 ITCH 解析器和订单簿;对照帝国理工研究的结论做基准测试。打开代码边看边学 Optiver 的演讲。交付物:一个热路径上永不分配内存、永不系统调用的行情处理器 + 订单簿。

阶段 5 — 生产级(持续进行)。 带硬件时间戳的 PTP 时钟同步;被动抓包与百分位监控;基于确定性重放的架构(Thompson);路径内的风控检查。这个领域的大多数职业生涯都在这一层。

阶段 6 — 硬件层级(专精方向)。 面向真实协议的 FPGA 开发(Design Gateway 实战讲解)、厂商 IP、STAC-T0 式的测量。这是一套不同的技能——大多数公司先买后建。


发现错误或遗漏的资源?提交 issue。带逐条摘要的完整参考列表在首页,本次 2026 年更新背后的调研在研究笔记(英文)中。