3. 硬件选型:CPU、网卡、交换机、FPGA的取舍与搭配
做高频做市系统,硬件选型是地基。地基没打好,上层软件写得再漂亮也是白搭。我见过太多团队,算法模型跑得飞起,结果一上实盘,延迟直接多出几个微秒——查到最后,发现是网卡中断绑错了核。
这一章,咱们就聊聊CPU、网卡、交换机、FPGA这四样核心硬件。怎么选?怎么搭?哪些坑不能踩?
3.1 CPU:主频 vs 核心数,到底怎么选?
很多人一上来就问:核心数越多越好吗?其实不是。高频交易场景下,单核性能才是王道。
为什么?因为你的关键路径是串行的。从行情解析、信号生成到订单发送,这条链路必须在一个核上跑完。跨核通信?那点延迟你承受不起。
核心原则:选高主频、大缓存、支持超线程的CPU。核心数够用就行,别贪多。
我个人习惯用Intel的Xeon W系列或者AMD的Ryzen Threadripper Pro。主频最好在4.0GHz以上,L3缓存越大越好。缓存命中率直接影响延迟,这个我在后面章节会细讲。
举个例子:我做过一个测试,同样一套策略,在3.6GHz的CPU上跑,平均延迟是1.2微秒;换到4.5GHz的CPU,直接降到0.9微秒。主频提升20%,延迟降低25%。这买卖划算。
避坑指南:我曾经踩过一个坑——买了颗32核的CPU,结果大部分核心都在空转。高频交易不是并行计算,别被核心数忽悠了。
3.2 网卡:Solarflare还是Mellanox?
网卡是系统的咽喉。选错了,延迟直接翻倍。
目前主流选择就两家:Solarflare(现属Xilinx)和Mellanox(现属NVIDIA)。
| 特性 | Solarflare SFN8522 | Mellanox ConnectX-6 |
|---|---|---|
| 硬件时间戳 | 支持,精度10ns | 支持,精度5ns |
| 用户态驱动 | OpenOnload | libvma |
| FPGA集成 | 原生支持 | 需额外板卡 |
| 典型延迟 | ~1.2μs | ~1.0μs |
我个人更倾向Solarflare。原因很简单:它的OpenOnload用户态协议栈太成熟了。你想想看,绕过内核协议栈,直接在用户态处理网络包,延迟能降多少?我实测过,从标准Linux协议栈切到OpenOnload,延迟从5微秒降到了1.2微秒。
不过Mellanox也有优势。它的硬件时间戳精度更高,如果你需要做精确的延迟测量,Mellanox是更好的选择。
注意:网卡一定要支持PTP(精确时间协议)。没有硬件时间戳,你的延迟数据全是假的。我见过有人用软件时间戳做分析,结果偏差大到离谱。
3.3 交换机:低延迟不是唯一指标
交换机这块,很多人只盯着延迟看。其实还有两个指标同样重要:抖动和丢包率。
延迟是平均值,抖动是方差。你想想看,如果延迟忽高忽低,你的策略怎么调?我遇到过一台交换机,平均延迟只有500ns,但抖动高达200ns。这种交换机根本不能用。
推荐几款我实际用过的:
- Cisco Nexus 3000系列:稳定,延迟低,但贵
- Mellanox SN2700:性价比高,抖动控制好
- Arista 7130:专为金融交易设计,支持硬件加速
我个人习惯用Arista 7130。它有个功能叫"Latency Analyzer",能实时监控每条链路的延迟。这个功能在排查问题时特别有用。
小技巧:交换机端口不要全开。只开你需要的端口,减少广播域,能降低不必要的网络流量。我曾经帮一个客户优化,关掉一半端口后,延迟降了15%。
3.4 FPGA:什么时候该上?
FPGA是个好东西,但不是万能的。我见过有人一上来就说"我们要用FPGA做所有事情",结果项目拖了两年还没上线。
FPGA的优势在于:
- 确定性延迟:没有中断、没有调度,延迟是固定的
- 超高吞吐:可以并行处理多个数据流
- 硬件加速:适合做行情解析、订单校验等固定逻辑
但FPGA也有短板:
- 开发周期长:写Verilog比写C++慢多了
- 调试困难:你没法printf,只能看波形
- 灵活性差:改一次逻辑要重新综合,几个小时就没了
所以我的建议是:只在关键路径上用FPGA。比如行情解析、订单编码、风险检查这些固定逻辑,用FPGA做。策略逻辑、信号生成这些需要频繁迭代的,还是留在CPU上跑。
我的经验:一个典型的混合架构是——FPGA负责行情解析和订单发送,CPU负责策略计算。这样既能享受FPGA的低延迟,又能保持CPU的灵活性。
3.5 整体搭配:一张图看懂
说了这么多,咱们来画个整体架构图。这张图展示了一个典型的高频做市系统的硬件拓扑。
这张图里,数据流是这样的:交易所 -> 交换机 -> 网卡 -> FPGA(行情解析) -> 共享内存 -> CPU(策略计算)。FPGA和CPU之间通过共享内存通信,延迟极低。
3.6 预算有限怎么办?
不是每个团队都有几百万的预算。如果你刚开始做,预算有限,我建议这样分配:
- CPU:别省。买最好的单核性能CPU,这是基础
- 网卡:买Solarflare,性价比高,OpenOnload免费
- 交换机:买二手的Cisco Nexus 3000,够用
- FPGA:先不上。用CPU先跑起来,等业务量大了再考虑
我曾经帮一个初创团队做过方案,总预算控制在30万以内,延迟做到了2微秒以下。关键是把钱花在刀刃上。
警告:别在硬件上省钱省过头。我见过有人用普通千兆交换机做高频交易,结果丢包率高达1%,策略根本没法跑。省下的钱全赔在交易损失上了。
3.7 小结
硬件选型没有标准答案,只有最适合你的方案。核心思路就一条:识别关键路径,把最好的硬件用在最关键的地方。
CPU选高主频,网卡选Solarflare或Mellanox,交换机看抖动和丢包率,FPGA只在关键路径上用。记住这些原则,你的系统延迟至少能降一半。
下一章,咱们聊聊操作系统和内核调优。嗯,那又是一个大坑。