第二章:硬件加速动机——为什么用FPGA做订单簿?

说实话,这个问题我经常被问到。

尤其是那些做软件交易系统的朋友,一听说我用FPGA做订单簿,第一反应就是:「有必要吗?CPU不够用?」

嗯,咱们今天就把这事掰扯清楚。

2.1 延迟:微秒级的生死线

先聊延迟。做交易的人都知道,延迟就是钱。

我有个客户,做高频做市。他们之前用C++写的软件订单簿,延迟大概在5-10微秒。听起来很快对吧?但他们的竞争对手,用FPGA方案,延迟压到了500纳秒以内。

你想想看,一个微秒的差距,在撮合高峰期可能就意味着几百笔订单的先后顺序。谁先成交,谁后成交,直接决定了你是赚钱还是亏钱。

关键数据对比:

实现方式 典型延迟 抖动范围
纯软件(C++) 5-10 μs ±3 μs
FPGA硬件 200-500 ns ±50 ns
ASIC专用芯片 50-100 ns ±10 ns

为什么会差这么多?说白了,CPU是通用处理器,它要处理中断、缓存缺失、分支预测失败这些乱七八糟的事。而FPGA是定制化的数据流处理,数据进来,直接走硬件流水线,一步到位。

我记得有一次帮一个券商做延迟优化。他们的软件订单簿,在行情剧烈波动时,延迟能飙到50微秒以上。原因很简单——CPU被其他进程抢占了。这种问题在FPGA上根本不存在,因为逻辑资源是独占的。

2.2 吞吐量:每秒百万笔订单的处理能力

延迟讲完了,咱们说吞吐量。

你可能觉得,延迟低自然吞吐量就高。其实不完全对。

吞吐量考验的是并行处理能力。CPU再快,它也是串行的——一个时钟周期只能执行一条指令(超线程、多核能缓解,但本质还是串行思维)。

FPGA就不一样了。我可以在一个芯片里同时做:

  • 行情解码
  • 订单簿更新
  • 价格计算
  • 风控检查
  • 日志记录

这些模块全部并行跑,互不干扰。你想想看,这吞吐量能差多少?

我个人的经验:

曾经有个项目,需要同时处理4个交易所的订单簿数据。用软件方案,需要4台服务器,每台处理一个交易所。用FPGA方案,一块板卡搞定,还省了交换机延迟。

具体数字上,一个中等规模的FPGA(比如Xilinx KU060),可以轻松处理每秒500万笔以上的订单更新。而同样的软件方案,优化到极致也就100万笔左右。

2.3 确定性:最容易被忽视的杀手锏

嗯,这里我要重点讲一下。

很多人只盯着延迟和吞吐量,却忽略了确定性。什么叫确定性?就是每次处理的时间都一样,没有波动。

软件系统有个致命问题——抖动。GC暂停、系统调用、中断处理、上下文切换……这些都会导致处理时间忽长忽短。你可能99%的订单都在1微秒内处理完,但突然有一个订单花了100微秒。对于交易系统来说,这100微秒可能就是灾难。

FPGA为什么能做到确定性?因为它的逻辑是硬件实现的,没有操作系统,没有中断,没有缓存缺失。每个时钟周期做什么,都是固定的。

避坑指南:

我曾经踩过一个坑。有个客户说他们的FPGA订单簿延迟不稳定,我排查了很久,最后发现是DDR内存访问导致的。因为订单簿数据量太大,放不进BRAM,只能放DDR。而DDR的访问延迟是不确定的——遇到行冲突就要等。

后来我改用HBM(高带宽内存),问题就解决了。所以,做FPGA订单簿,内存架构设计非常关键。

2.4 为什么不是ASIC?

你可能会问,既然FPGA这么好,为什么不直接做ASIC?

原因很简单:成本和灵活性。

ASIC流片一次,几百万美元起步,周期半年以上。而且一旦做出来,功能就固定了,想改?重新流片。

FPGA就灵活多了。今天支持这个交易所的协议,明天换个固件就能支持另一个。对于金融行业来说,业务变化太快,ASIC根本跟不上。

2.5 一张图看懂FPGA订单簿的优势

下面这张图,是我自己总结的FPGA订单簿核心优势框架:

FPGA订单簿硬件加速核心优势 FPGA订单簿 硬件加速引擎 低延迟 200-500ns 硬件流水线 高吞吐量 500万+ 订单/秒 确定性 无抖动 纳秒级精度 数据流直通处理 无缓存缺失 多模块并行 流水线无阻塞 无OS干扰 固定时钟周期 三者缺一不可,共同构成FPGA核心价值

2.6 总结一下

FPGA做订单簿,说白了就是三个字:快、稳、狠。

  • :延迟从微秒级降到纳秒级
  • :确定性执行,没有抖动
  • :吞吐量碾压CPU方案

当然,FPGA也不是万能的。开发周期长、调试困难、成本高,这些都是现实问题。但如果你做的是高频交易,这些代价都是值得的。

嗯,这一章就到这里。下一章咱们开始动手,从最简单的订单簿数据结构讲起。

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