低延迟交易系统完全指南
一个页面,从入门到专家。更新于 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 预算大致按以下顺序被消耗:
- 线缆 → 网卡(网络):光纤/铜缆中的传播、交换机转发、网卡 PHY/MAC。layer-1 交换机能把这段压到约 4 ns;注意在 25GbE 上,仅前向纠错(FEC)一项就增加约 100 ns,所以追求极致低延迟的公司在短链路上会关闭 FEC。
- 网卡 → 应用(主机入向):DMA 之后,要么走内核网络栈(微秒级),要么走内核旁路(kernel bypass)栈直接从用户态读取(数百纳秒级)。
- 解码与建簿:解析交易所协议(如 MoldUDP64 上的 ITCH)并更新订单簿(order book)——纯粹的 CPU/缓存工作。
- 决策:策略逻辑本身。在有竞争力的系统里这一步是纳秒级——预先算好的决策、查表——而不是”跑一个模型”。
- 订单发出(主机出向 + 网络):序列化订单(如 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 开关之前:
- 给代码做基准测试:用 Google Benchmark 加上时钟周期级精确计时(rdtsc 方法论);用
perf和 Brendan Gregg 的工具集做性能剖析——火焰图告诉你时间去了哪里,eBPF/bpftrace 告诉你为什么。 - 测量 OS 抖动:用 cns-sysjitter 或 cyclictest/rtla:在每个核上跑一个自旋线程,记录每一次被打断。这是判断你的隔离调优是否真正生效的基准事实。
- 测量机器的拓扑:用 core-to-core-latency 或 c2clat:得到每对核心之间通信成本的热力图,它决定线程的摆放。
- 测量线路 ——生产系统使用带纳秒时间戳的被动分光/镜像(Corvil/Pico);业界经过审计的横向对比是 STAC 基准测试。
- 报告百分位数,永远不要报平均值。p99.9 和 max 才是决定你赚钱还是亏钱的数字。
来自实践者指南的一个好习惯:一次只改一样东西,改的同时保持抖动测量持续运行。很多”优化”是用尾部换均值。
4. 第 2 级 — 机器:硬件选型与 BIOS
本节完整参考资料:服务器硬件与 CPU。
CPU 选型(2026 年)。 延迟路径需要的是少而快、缓存充裕的核心,而不是又多又慢的核心:
- 超频精品服务器(Blackcore、Hypertec CIARA)是软件层级的顶配:液冷、体质筛选(binned)、全核约 5+ GHz 的超频 Xeon/Core 处理器,出厂自带调好的 BIOS 配置和烤机测试。超频的收益不止于主频:它还能降低内存延迟(约 34%)、缓存延迟(约 30%)和 PCIe 延迟。(HPE 旧的”Trade and Match”超频产品线已停产——这个细分市场转向了精品厂商。)
- AMD EPYC 9005 F 系列(如 9575F:64 核、5.0 GHz 加速频率、256 MB L3)是必须使用标准服务器时的指定高频 SKU;EPYC 4004/4005 X3D 型号把 3D V-Cache(128 MB L3)带入了廉价的单路平台——巨大的 L3 能让订单簿常驻缓存(L3 约 49 周期 vs DRAM 约 350 周期)。
- Intel Xeon 6 的应对是 Latency Optimized Mode(把 mesh/uncore 频率保持在高位——实测约 17% 提升)、Efficiency Latency Control,以及 SST-BF(让一部分核心以有保障的更高基础频率运行,供你的热点线程使用)。
- 拓扑比品牌重要:Intel 的 mesh 即使跨 die 也能做到 50–80 ns 的核间延迟;AMD 在 CCX 内部约 8–25 ns,但跨 CCD 要 150–180 ns。用 c2clat 实测,并据此把相互通信的线程绑在一起。
已成定论的架构决策:
- 延迟路径用单路(single socket)。跨插槽一跳的核间延迟代价是 2–3.6 倍;把网卡、它的内存和绑定的核心放在同一个插槽/NUMA 节点上。双路机器留给吞吐型工作(风控、回测)。
- BIOS 铁律(AMD 指南、Dell、HPE、社区清单):SMT/超线程关;C1 以深的 C-state 关(或全关);最大性能/确定性电源配置;turbo 开;uncore 频率固定在高位;功耗/占用率监控类 SMI 关(SMI 是不可见的、数微秒级的停顿);内存跑在最高标称频率、所有通道插满;禁用不用的设备。
5. 第 3 级 — 操作系统:Linux 调优
本节完整参考资料:Linux 操作系统调优。
目标:给你的热点线程专用且不被打扰的核心。现代 Linux 能把微秒级的抖动压到几乎为零,但前提是深思熟虑的配置。以下是分层配方,出自 Red Hat、Rigtorp 和 SUSE 的参考资料:
- 给机器分区。 杂务(内核线程、IRQ、守护进程)放在少数几个核上;其余核心全部隔离出来给应用。
tuned的 cpu-partitioning 配置文件把这一步自动化了,是 Red Hat 推荐的起点。 - 正确地隔离——单靠
isolcpus不算隔离。 它只是把核心从调度器中移除,但定时器 tick 和 RCU 回调仍会触发(一个真实案例:在”已隔离”的核上每 4 ms 出现 200 µs 尖刺)。完整配方是isolcpus=(或 cgroup-v2 isolated partition)+nohz_full=(自适应无 tick——每秒仅残留一次 tick)+rcu_nocbs=(卸载 RCU 回调)+irqaffinity=(把中断引导到杂务核心上)。 - 消灭频率与睡眠状态切换。 使用 performance governor;通过
cpu_dma_latencyPM-QoS 限制 C-state(tuned 的延迟类配置文件会保持它打开)——从深度 C-state 唤醒要花数十微秒。 - 驯服内存。 静态 hugepages(减少 TLB miss)、
mlockall()(杜绝缺页)、关 swap、关透明大页、关自动 NUMA 均衡。当心 TLB shootdown:进程中任何线程的munmap/madvise都可能打断该进程的每一个核——预分配内存,热路径上永不释放。 - 对投机执行缓解措施做出决策。 在物理上受保护的单租户交易主机上,
mitigations=off是标准做法(开启时历史上有 15–25% 的性能损失;较新的 CPU 在硬件层面修复了更多问题)。逐台主机做风险评估。 - 考虑 PREEMPT_RT。 实时抢占自 Linux 6.12(2024 年 11 月)起已进入主线——不再需要树外补丁——
kernel-rt随标准版 RHEL 9/10 一同发布。注意 RT 优化的是最坏情况的调度延迟,有时以少量吞吐为代价;很多交易负载更偏好”调优后的标准内核 + 忙轮询”。Red Hat 的经验法则:标准内核调优就能拿到约 90% 的收益。 - 验证。
rtla timerlat/osnoise(内核 5.17+)、sysjitter、cyclictest——每次改动之后都要跑。
6. 第 4 级 — 网络路径
本节完整参考资料:网络、网卡与内核旁路。
先理解内核路径(CUBRID 心智模型、packagecloud 深度剖析、整合版现代指南)。内核栈每个包要花微秒级的成本(系统调用、拷贝、中断、softIRQ),单核上限约 100 万 pps——但正确的调优(多队列网卡、RSS/RFS、IRQ 亲和性、一切 NUMA 本地化、忙轮询)能换来很多:不绕过内核也能 100 万+ pps,真实服务器上 5 倍提升、每个旋钮都有测量。而且在最后一微秒不值钱的所有场景,留在内核里的理由很充分:你保住了路由、防火墙、工具链和可运维性。
内核旁路是交易热路径上的标准做法。协议栈把网卡映射进用户态;应用以轮询(自旋)取代中断:
- AMD Solarflare:Onload 对未修改的 socket 应用做透明加速(2021 年起开源;通过 AF_XDP 可运行在其他网卡上);ef_vi 是位于延迟下限的原始 layer-2 API;TCPDirect 介于两者之间。全部收录在 UG1586 中。
- NVIDIA(Mellanox 血统):XLIO 取代了 VMA 做 socket 加速;Rivermax + NEIO FastSockets(序列化约 0.25 µs)是 2025 年面向行情数据的方案;全自研数据通路则用 DPDK 的 mlx5 驱动。
- DPDK 在你掌控整条包路径(行情处理器、网关)时仍是金标准。AF_XDP 是”够快、运维更简单”的中间路线;io_uring 对一般异步 I/O 有帮助,但不是 tick-to-trade 的工具。
网卡(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 能够可预测地执行的代码——才是真正的功夫:
- 掌控缓存。 数据布局决定一切:连续数组优于基于节点的容器,有序 vector 优于 map,每个写者独占一个缓存行(cache line)(避免伪共享——用
std::hardware_destructive_interference_size做填充)。订单簿首先是个数据结构问题,其次才是算法问题(Gross 2024)。 - 热路径上不做任何慢的事。 不分配内存、不做系统调用、不抛异常、不加锁、不缺页。一切预分配;绑定线程;用忙轮询代替睡眠。让热路径保持热:如果它很少被执行,连分支预测器和指令缓存都会变冷——所以要用假流量做缓存预热,这是帝国理工研究实测的两个最大收益之一(另一个:
constexpr——把计算挪到编译期)。 - 并发:消息传递优于共享。 经典设计是单线程业务逻辑,由无锁(lock-free)SPSC 队列供数(从零构建一个,rigtorp 的实现)。认真学好内存模型(Pikus 讲原子操作、Sutter 的上下两部、Vyukov 的 1024cores)——并且记住”lock-free”说的是进展保证(progress guarantee),不等于自动变快。
- C++ 仍是业界默认(上面那批 CppCon 经典,如今由 Optiver 的演讲领衔)。Rust 已实现事实上的延迟持平并快速增长——Databento 的对比是 2026 年最坦诚的共识;C++ 保有生态优势。Java 只要你坚决不产生垃圾,也能做到低微秒级:LMAX Disruptor、Chronicle Queue,消息传递/集群用 Aeron,无停顿 GC 用 Azul C4 或 OpenJDK 的分代 ZGC(JDK 21+)。
- 懂协议。 真实系统说的是 MoldUDP64/SoupBinTCP 上的 ITCH/OUCH 或各交易所的等价物——Databento 的市场微观结构指南是平易近人的参考。
- 来自交易所自身的架构课(Thompson:Evolution of Financial Exchange Architectures):确定性的单线程逻辑 + 定序事件日志 + 复制状态机,在延迟和正确性上都胜过分布式锁。
8. 第 6 级 — 硬件加速:FPGA 与 ASIC
本节完整参考资料:FPGA 与硬件加速。
当软件走到尽头(约 1 µs),数据通路就要搬进硬件:
- FPGA 买到的是什么:确定性的流水线延迟——解析、建簿、决策、发单全部在门级硬件(gateware)中完成,不受缓存、调度器和中断影响。有竞争力的典型 tick-to-trade:几十到几百纳秒(一条可落地实现的 ITCH/OUCH 流水线)。
- 当前最高水平:AMD 的 Alveo UL3524(2023 年)是第一款专为交易打造的 FPGA 卡(<3 ns 收发器);Exegy + AMD 在它上面用异步(无时钟)关键路径创下 13.9 ns 的 STAC-T0 纪录(2024 年),抖动约 200 ps。更便宜的 UL3422(2024 年)把这个层级推向了更低价位的市场。
- 常见架构是混合式的:FPGA 承担线速热路径;软件(内核旁路 C++)承担策略、风控以及一切每天都在变的东西。厂商出售现成的构建模块——Orthogone(17.1 ns MAC/PCS、6.2 ns 发送侧 TCP offload)、Exegy/Enyx、Algo-Logic、Xelera(FPGA 上的 ML 推理)。
- 最前沿:顶级公司把确定性功能烧进 ASIC(10–50 ns,僵化且资本密集)或 eFPGA 嵌入 ASIC 的混合方案;下一个战场是关键路径上的在线 ML 推理(战略综述)。
9. 时间:时钟同步与时间戳
本节完整参考资料:时钟同步与时间戳。
没有严肃的时钟,你既无法测量交易系统,也无法合法运营它:
- 监管划定了底线:欧盟 MiFID II RTS 25 要求 HFT 公司与 UTC 的偏差保持在 100 µs 以内、时间戳粒度 1 µs,且有文档记录、可溯源(监管要求到 Linux 的映射;注意 RTS 25 的后续版本正在进行中的 MiFID 评审里起草)。
- 带硬件时间戳的 PTP(IEEE 1588-2019) 是主力方案:在支持硬件时间戳的网卡上跑 linuxptp(
ptp4l+phc2sys),保守可达约 3 µs,好硬件上可达约 10 ns——但网卡选择能让精度相差 45 倍,所以务必实测。Meta 的部署(最坏约 436 ns,全套开源)是参考架构。 - 开放硬件吃掉了 grandmaster 市场:OCP Time Card(PCIe 卡上集成 GNSS + 原子钟)能把任何服务器变成 stratum-1 时间设备。
- 亚纳秒级:White Rabbit——CERN 的技术,现已成为 PTP High Accuracy profile——由 Deutsche Börse 作为托管服务提供:你直接同步到交易所自己的时钟。
- 机箱之内:借助 invariant TSC 和 rdtsc 方法论实现时钟周期级精确计时。
10. 成长路线图:入门 → 专家
阶段 0 — 打基础(数周)。 理解业务领域和机器。读 tick-to-trade;看 Godbolt 讲 CPU 和 Doumler 的两部曲;学习内核网络路径。交付物:你能讲清一微秒都花在了哪里。
阶段 1 — 测量(数周)。 在一台 Linux 机器上搭好 Google Benchmark、perf + 火焰图、sysjitter 和 c2clat。给一切建立基线。交付物:一份原厂硬件与内核的延迟/抖动报告。
阶段 2 — 调优机器(一个月)。 应用 BIOS 铁律和 Linux 配方:cpu-partitioning、nohz_full、IRQ 引导、hugepages、governor。每次改动后重新测量。交付物:sysjitter 证明确实安静的隔离核心。
阶段 3 — 调优网络(一个月)。 先做内核内的多队列/RSS/IRQ 亲和性/忙轮询(Cloudflare、talawah);再用 Onload 或 XLIO 做内核旁路;用 sockperf 测量。交付物:一条低于 2 µs 的回显路径,并有直方图为证。
阶段 4 — 写热路径代码(数月)。 从零构建一个 SPSC 队列;认真学好原子操作;用缓存友好的布局写一个 ITCH 解析器和订单簿;对照帝国理工研究的结论做基准测试。打开代码边看边学 Optiver 的演讲。交付物:一个热路径上永不分配内存、永不系统调用的行情处理器 + 订单簿。
阶段 5 — 生产级(持续进行)。 带硬件时间戳的 PTP 时钟同步;被动抓包与百分位监控;基于确定性重放的架构(Thompson);路径内的风控检查。这个领域的大多数职业生涯都在这一层。
阶段 6 — 硬件层级(专精方向)。 面向真实协议的 FPGA 开发(Design Gateway 实战讲解)、厂商 IP、STAC-T0 式的测量。这是一套不同的技能——大多数公司先买后建。
发现错误或遗漏的资源?提交 issue。带逐条摘要的完整参考列表在首页,本次 2026 年更新背后的调研在研究笔记(英文)中。