一、低延迟交易系统概述

什么是低延迟交易

低延迟交易,说白了就是「比对手快那么一丁点」。

我经常跟团队新人讲:你不需要比所有人都快,只需要比隔壁那家快。哪怕只快 1 微秒,在特定策略下,可能就是盈亏的分水岭。

量化交易里,延迟通常指从市场事件发生到你做出反应并完成交易的时间差。这个时间差里,包含了数据到达、信号计算、订单生成、网络传输、交易所撮合等一系列环节。

嗯,这里要注意:低延迟交易 ≠ 高频交易。高频交易是策略层面的概念,而低延迟是系统层面的能力。你可以做中频策略,但系统照样需要低延迟——谁都不想自己的信号比别人晚到。

核心定义:低延迟交易系统,是指在微秒甚至纳秒级别内完成从行情接收、策略计算到订单发送全流程的技术体系。

延迟的来源分析

延迟不是单一问题,它是一连串「慢」的叠加。我习惯把延迟拆成三块来看:网络、软件、硬件。每一块都有它的坑。

网络延迟

网络延迟是最直观的。光在光纤里跑,每公里大约 5 微秒。上海到纽约的距离大概 1.2 万公里,光速往返就是 120 微秒。这还没算交换机、路由器、协议栈的处理时间。

我在项目中遇到过一件事:某家交易所的行情源,从机房到我们的服务器,物理距离只有 500 米,但延迟却高达 30 微秒。后来一查,中间绕了三个交换机,每个交换机都做了全量 ACL 过滤。去掉这些过滤后,延迟直接降到 5 微秒。

延迟来源 典型量级 说明
光纤传输(每公里) ~5 μs 光速极限,物理不可突破
交换机转发 0.5 - 5 μs 取决于交换芯片和配置
网卡中断处理 1 - 10 μs 传统中断模式 vs 轮询模式
协议栈处理(TCP/IP) 5 - 50 μs 内核态开销大头

避坑指南:我曾经以为光纤越长延迟越大,后来发现光纤绕线盘也会引入额外延迟。机房布线时,多余的光纤一定要剪掉,别盘在机柜里。

软件延迟

软件延迟是「隐形杀手」。你想想看,一个行情数据从网卡到用户态程序,中间要经过多少层?

  • 网卡硬件接收 → DMA 到内存
  • 内核中断处理 → 驱动层
  • TCP/IP 协议栈 → socket 缓冲区
  • 系统调用(read/recv)→ 上下文切换
  • 用户态程序解析 → 策略计算

每一层都有开销。我见过最夸张的例子:某团队用 Java 做行情解析,一个简单的行情包从网卡到策略引擎,走了 200 多微秒。换成 C++ 加 DPDK 后,直接压到 5 微秒以内。

为什么会这样?因为 Java 的 GC 暂停、JIT 编译、内存分配,每一个都是延迟的「定时炸弹」。你永远不知道下一秒会不会触发一次 Full GC。

注意:软件延迟最大的问题不是「慢」,而是「不稳定」。100 微秒的平均延迟不可怕,可怕的是偶尔冒出来的 1 毫秒抖动。交易系统里,抖动比平均延迟更致命。

硬件延迟

硬件延迟这块,很多人容易忽略。CPU 的缓存 miss、内存访问延迟、PCIe 总线带宽,这些都会影响整体性能。

举个例子:CPU 从 L1 缓存读数据只要 1 纳秒,但从主存读要 100 纳秒。如果你的数据布局不好,频繁触发 cache miss,那 100 倍的性能差距就白白浪费了。

我习惯用 FPGA 来做硬件加速,原因很简单:FPGA 的流水线处理可以做到确定性延迟。每个数据包的处理时间几乎是固定的,不会像 CPU 那样受分支预测、缓存命中率的影响。

// 一个简单的 FPGA 行情解析流水线示意
// 每个 stage 固定 1 个时钟周期(比如 4ns)
stage1: 接收以太网帧
stage2: 解析 MAC 头部
stage3: 解析 IP/UDP 头部
stage4: 提取行情数据字段
stage5: 输出到策略模块
// 总延迟 = 5 * 4ns = 20ns,完全确定

关键认知:硬件延迟的优化空间在于「确定性」。CPU 追求平均性能,FPGA 追求确定性延迟。在交易场景里,确定性比峰值性能更重要。

纳秒级竞赛的行业现状

现在的低延迟交易,已经卷到纳秒级别了。你可能觉得夸张,但事实就是如此。

我记得 2015 年左右,大家还在拼微秒级的优化。那时候用 C++ 写个行情引擎,延迟做到 10 微秒就算不错了。到了 2020 年,头部机构已经进入纳秒时代。

目前行业里几个典型的数据:

  • 交易所撮合引擎:从订单到达撮合核心到返回成交结果,延迟在 1-5 微秒
  • FPGA 行情解析:从网线到解析出行情数据,延迟在 50-200 纳秒
  • 硬件加速策略:从行情输入到订单输出,全流水线延迟在 100-500 纳秒
  • 网络传输:同城机房之间,光速往返延迟约 10-20 微秒

你想想看,当大家都在用 FPGA 做行情解析和策略计算时,软件层面的优化空间其实已经不大了。真正的差距,往往来自物理层面的「距离」和「路径」。

我见过最极端的案例:某机构为了省 2 微秒的延迟,把服务器直接搬到了交易所机房的隔壁。光纤长度从 500 米缩短到 10 米,光速传输延迟从 2.5 微秒降到 0.05 微秒。就为了这 2 微秒,他们每年多付 200 万的机房租金。

个人经验:纳秒级竞赛里,最容易被忽视的是「信号完整性」。我曾经调试一个 FPGA 项目,发现同样的代码,在不同批次的板卡上延迟差了 30 纳秒。后来查出来是 PCB 走线阻抗不一致导致的信号抖动。嗯,硬件设计的水很深。

下面这张图,是我自己总结的低延迟系统延迟分解结构。你可以看到,从市场事件到最终成交,每一段都有优化空间。

低延迟交易系统延迟分解 市场事件 行情数据产生 网络传输 光纤 + 交换机 行情解析 FPGA / 软件 策略计算 信号生成 0 ns 5-50 μs 50-200 ns 100-500 ns 延迟优化关键点 1. 网络层:物理距离决定光速延迟,交换机跳数决定转发延迟 2. 解析层:FPGA 流水线 vs 软件协议栈,差距在 100x 以上 3. 策略层:CPU 受缓存和分支预测影响,FPGA 提供确定性延迟 4. 整体:端到端延迟 = 各阶段延迟之和 + 抖动 核心原则:消除抖动比降低平均延迟更重要

最后说一句:纳秒级竞赛不是所有人都需要参与。如果你的策略持仓周期是分钟级,那微秒级的优化就足够了。但如果你做的是做市商策略,或者套利策略,那每一纳秒都是钱。

我个人建议:先搞清楚你的策略对延迟的敏感度,再决定投入多少资源去优化。别为了炫技而优化,那是本末倒置。


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