硬件与网络选型:FPGA vs CPU、网卡选型、交换机与布线、时钟同步
做高频交易系统,硬件选型是地基。地基没打好,上层软件写得再漂亮也是白搭。今天咱们就聊聊这个环节里最核心的几个决策点。
FPGA vs CPU:到底谁更香?
很多人一上来就问:「FPGA 是不是比 CPU 快?」。这个问题其实问偏了。我个人的习惯是,先搞清楚你到底要处理什么。
CPU 的优势在于灵活。你写个策略,改个参数,重新编译一下就能跑。我早期做期货套利时,策略迭代特别频繁,一天改好几版。那时候用 CPU 是唯一选择。你想想看,如果每次改个阈值都要等 FPGA 综合布线两小时,黄花菜都凉了。
FPGA 的优势在于确定性延迟和极致的流水线处理。CPU 有中断、有缓存未命中、有分支预测失败,这些都会带来延迟抖动。而 FPGA 是硬件逻辑,每个时钟周期干什么事是固定的。我在项目中遇到过最夸张的情况:CPU 端平均延迟 5 微秒,但偶尔会跳到 50 微秒。FPGA 端呢?稳定在 1.2 微秒,波动不超过 100 纳秒。
核心结论:
- 策略逻辑复杂、需要频繁迭代 → 选 CPU
- 延迟要求苛刻、逻辑相对固定 → 选 FPGA
- 实际项目中,我建议采用「CPU + FPGA」混合架构。CPU 做策略决策,FPGA 做行情解析和订单发送。
嗯,这里要注意一点:FPGA 开发成本很高。不光是硬件成本,还有人力成本。一个熟练的 FPGA 工程师年薪不比量化研究员低。所以小团队别轻易上 FPGA,先把 CPU 优化到极致再说。
网卡选型:Solarflare 还是 Mellanox?
网卡是数据进出的第一道关卡。选错了,后面所有优化都白费。
Solarflare(现在叫 Xilinx 了)在金融领域口碑很好。它的王牌功能是 TCP 卸载引擎和 用户态网络栈。说白了,就是让网卡自己处理 TCP 协议,不占用 CPU 资源。我曾经在一个项目中,用 Solarflare 的 ef_vi 接口,把行情接收延迟从 10 微秒降到了 2 微秒。效果立竿见影。
Mellanox(现在叫 NVIDIA)的优势在 RDMA 和 RoCE。如果你做的是跨机房的低延迟传输,Mellanox 是首选。我记得有一次做两地三中心的灾备方案,用 Mellanox 的 RDMA 把同步延迟控制在 5 微秒以内,CPU 占用率几乎为零。
| 特性 | Solarflare | Mellanox |
|---|---|---|
| 核心优势 | 用户态网络栈、TCP 卸载 | RDMA、RoCE、高吞吐 |
| 典型延迟 | 1-3 微秒 | 1-5 微秒 |
| 适用场景 | 行情接收、订单发送 | 跨机数据传输、灾备 |
| 开发难度 | 中等(有 ef_vi 库) | 较高(需要 RDMA 编程) |
我的建议:如果只做国内期货,Solarflare 足够用了。如果涉及跨市场套利或高频做市,可以考虑 Mellanox。但别两个都买,除非你团队有专人维护。
交换机与布线:细节决定成败
很多人觉得交换机随便买一个就行。大错特错。在微秒级别的竞争中,交换机就是你的命门。
交换机选型要点:
- 端口到端口延迟:越低越好。我见过最差的交换机延迟 10 微秒,好的能做到 300 纳秒。差 30 倍。
- 支持 PTP:后面会讲时钟同步,没有 PTP 支持的交换机直接 pass。
- 线速转发:别买那种有背板瓶颈的便宜货。满负载下丢包,你哭都来不及。
布线细节:
- 光纤比铜缆好。铜缆容易受电磁干扰,延迟也不稳定。
- 线缆长度尽量短。每米光纤大约增加 5 纳秒延迟。别小看这 5 纳秒,积少成多。
- 走线要避开电源线和空调管道。我曾经遇到过因为线缆贴着空调管道走,导致信号抖动的问题。排查了三天才找到原因。
避坑指南:我曾经见过一个团队,花了几十万买高端交换机,结果布线的时候图省事,用了 10 米长的劣质跳线。最后延迟比预期高了 2 微秒。嗯,这种低级错误千万别犯。
时钟同步:PTP 与白兔协议
高频交易里,时间就是金钱。如果你的系统时间不准,所有延迟测量都是扯淡。
PTP(Precision Time Protocol)是目前的主流方案。它能做到亚微秒级的同步精度。原理很简单:主时钟发一个时间戳,从时钟收到后计算往返延迟,然后校准自己的时间。
实际部署时要注意几点:
- 交换机必须支持 PTP 透明时钟或边界时钟。普通交换机不行。
- 网卡也要支持 PTP 硬件时间戳。软件时间戳精度不够。
- PTP 域要独立。别和业务流量混在一起。
白兔协议(White Rabbit)是 PTP 的增强版,精度能达到纳秒级。它结合了 PTP 和同步以太网技术。说实话,国内期货市场目前还用不到这么高的精度。但如果你做的是跨交易所套利,比如中金所和上期所之间的价差交易,白兔协议就很有价值了。
我的经验:对于大多数期货公司,PTP 已经足够。白兔协议成本高、部署复杂,除非你确定需要纳秒级同步,否则别碰。
最后说一句:硬件选型没有银弹。每个方案都有取舍。我个人的习惯是,先做延迟预算,再反推硬件需求。比如你的目标是 10 微秒端到端延迟,那网卡占 2 微秒,交换机占 1 微秒,FPGA 占 3 微秒,剩下 4 微秒给软件。这样选型就有依据了。