硬件选型与调优:为低延迟做市系统打造最强硬件底座

做市系统对硬件的挑剔程度,说实话,比大多数交易系统都要高。你想想看,每一微秒的延迟都可能意味着价差被抢走,订单流被对手盘狙击。我这些年折腾下来,最大的感触就是:软件优化有天花板,硬件选型才是真正的起跑线

今天咱们就聊聊硬件选型与调优的几个核心环节。嗯,这部分内容比较硬核,但都是我在实际项目中踩过的坑和总结的经验。

CPU选型:高频 vs 多核,到底怎么选?

这个问题我几乎每次做架构评审都会被问到。说白了,做市系统的CPU选型,核心矛盾就一个:你是要单线程的极致速度,还是要多线程的并发吞吐

我个人习惯把做市系统的负载分成两类:

  • 信号处理路径:行情接收、订单生成、风控检查。这条路径是延迟敏感型的,必须快。
  • 后台管理路径:风险监控、日志记录、策略回测。这条路径是吞吐型的,可以慢一点。

对于信号处理路径,我强烈建议选择高主频CPU。比如Intel的Xeon W系列或者AMD的Ryzen Threadripper,主频能到5GHz以上。为什么?因为做市系统的核心逻辑往往是单线程的——你想想看,一个订单的决策链条,从行情到达、策略计算到订单发出,必须在一个线程里串行完成,否则就会引入锁竞争和上下文切换的延迟。

对于后台管理路径,多核CPU更合适。比如Intel Xeon Gold系列,核心数多,适合并行处理批量任务。

我的经验之谈:我在一个做市项目中,曾经为了省钱选了低频多核的CPU,结果行情波动大的时候,策略线程被后台任务抢占,订单延迟直接飙升到50微秒以上。后来换成高频CPU,同样的策略,延迟稳定在10微秒以内。所以,做市系统的核心线程,必须独占高频核心

NUMA架构与绑核:别让内存访问成为瓶颈

NUMA(非统一内存访问)架构,说白了就是每个CPU核心访问不同内存节点的速度不一样。现代服务器都是多路CPU,每个CPU有自己的内存控制器。如果线程跑在CPU0上,却访问了CPU1的内存,延迟会高出一倍甚至更多。

我遇到过最典型的坑是:线程被操作系统调度到了不同的NUMA节点上。结果就是,行情数据在内存里,线程却跑到另一个CPU上去执行,每次访问内存都要跨节点,延迟直接翻倍。

解决方案其实很简单:绑核 + 绑内存

具体做法:

  • 使用tasksetnumactl命令,把关键线程绑定到固定的CPU核心上。
  • 同时使用numactl --membind,把线程的内存分配限制在同一个NUMA节点上。
# 示例:将进程绑定到CPU核心0-3,并限制内存分配在节点0
numactl --cpunodebind=0 --membind=0 ./trading_engine

避坑指南:我曾经在一个项目中,绑核没绑内存,结果线程虽然固定在CPU0上,但内存却被分配到了CPU1的节点。性能测试时延迟一直下不去,排查了两天才发现是NUMA问题。所以,绑核和绑内存必须同时做

内存选型:DDR4 vs DDR5,值得升级吗?

这个问题其实没有悬念。DDR5的带宽是DDR4的两倍左右,延迟也略低。但问题是,DDR5的价格目前还是偏高,而且需要配套的主板和CPU支持。

我的建议是:如果预算允许,直接上DDR5。为什么?因为做市系统对内存带宽的需求其实很高。你想想看,行情数据、订单簿快照、历史数据,这些都需要频繁读写内存。DDR5的高带宽能显著减少内存访问的等待时间。

但要注意一点:内存延迟比带宽更重要。做市系统的核心逻辑是延迟敏感的,所以选择内存时,优先看CL(CAS Latency)值。DDR5的CL值普遍比DDR4高(比如DDR5 CL40 vs DDR4 CL16),但实际延迟因为频率提升,反而更低。具体选型时,建议看实际延迟(ns),而不是只看CL值。

参数 DDR4-3200 DDR5-5600 说明
带宽 25.6 GB/s 44.8 GB/s DDR5带宽提升约75%
CL值 CL16 CL40 DDR5的CL值更高
实际延迟 10 ns 14.3 ns DDR4延迟更低
价格 较低 较高 DDR5贵约30-50%

注意:DDR5的延迟虽然比DDR4高,但实际应用中,因为带宽提升带来的好处往往能抵消延迟的劣势。我个人建议,如果做市系统的数据量较大(比如全市场行情),优先选DDR5;如果只是做单一品种的做市,DDR4也够用。

网卡选型:Solarflare vs Mellanox,谁更适合做市?

网卡是做市系统的关键组件。行情数据从交易所到你的服务器,网卡是第一道关卡。延迟每多1微秒,你的订单就可能被对手抢走。

目前主流的低延迟网卡就两家:Solarflare(现属Xilinx/AMD)Mellanox(现属NVIDIA)

我个人更倾向于Solarflare,原因有三:

  • Onload技术:Solarflare的TCP加速技术,能把TCP协议栈的处理延迟降到极低。我实测过,同样的应用,用Solarflare网卡比普通网卡延迟降低约40%。
  • 用户态网络栈:Solarflare支持EF_VI(用户态虚拟接口),可以直接从用户态访问网卡,绕过内核协议栈。这对于做市系统来说,简直是神器。
  • 硬件时间戳:Solarflare网卡支持硬件时间戳,精度能达到纳秒级。做市系统需要精确记录行情到达时间和订单发出时间,这个功能必不可少。

Mellanox的优势在于RDMA(远程直接内存访问)。如果你的做市系统需要跨服务器通信(比如行情分发到多个策略节点),RDMA能实现零拷贝数据传输,延迟极低。

我的建议:如果做市系统是单机部署,行情和交易都在同一台机器上,选Solarflare。如果是分布式部署,需要多台机器协同,选Mellanox。我在一个项目中,用Solarflare网卡配合Onload技术,把行情处理延迟从15微秒降到了5微秒以下。

BIOS调优:别让默认设置毁了你的性能

很多人买了高端硬件,结果BIOS设置是默认的,性能根本发挥不出来。BIOS调优,说白了就是关闭一切不必要的功能,把资源留给关键任务

我总结了几项必调的BIOS设置:

  • 关闭超线程(Hyper-Threading):超线程虽然能提升多线程性能,但会引入额外的延迟和不确定性。做市系统的核心线程,建议关闭超线程。
  • 关闭C-States和P-States:这些节能功能会让CPU动态调整频率和电压,导致延迟抖动。做市系统需要稳定的性能,所以必须关闭。
  • 关闭Turbo Boost:虽然Turbo Boost能提升单核频率,但频率切换会引入延迟。建议手动锁定CPU频率到最高值。
  • 设置性能模式(Performance Mode):确保CPU和内存都运行在最高性能状态。
  • 关闭NUMA节点间内存访问优化:这个选项会让操作系统自动平衡内存访问,但会引入不确定性。建议关闭,手动绑核绑内存。
# 在Linux中查看CPU频率和C-States状态
cat /proc/cpuinfo | grep "cpu MHz"
cpupower frequency-info
cpupower idle-info

避坑指南:我曾经在一个项目中,BIOS里忘了关闭C-States,结果CPU在空闲时自动降频,行情突发时频率切换导致延迟飙升。排查了三天才发现是这个问题。所以,BIOS调优一定要在系统上线前完成

知识体系总览

下面这张图,是我对本章节知识体系的总结。你可以把它当作硬件选型与调优的检查清单。

做市系统硬件选型与调优知识体系 硬件选型与调优 CPU选型 高频 vs 多核 NUMA架构与绑核 绑核 + 绑内存 内存选型 DDR4 vs DDR5 网卡选型 Solarflare vs Mellanox BIOS调优 关闭节能、锁定频率 信号处理路径 高主频 后台管理路径 多核心 Onload加速 用户态网络栈 RDMA 零拷贝传输 关闭超线程 减少不确定性 关闭C-States 锁定频率

这张图把硬件选型与调优的五个核心环节串起来了。你可以把它当作一个检查清单,每完成一项就打个勾。嗯,做市系统的硬件调优,说白了就是把每一微秒的延迟都抠出来。从CPU到内存,从网卡到BIOS,每一个环节都不能放过。

好了,这一章的内容就到这里。硬件选型是基础,但真正决定系统性能的,还是你对硬件的理解和调优能力。希望这些经验能帮你少走一些弯路。


专注资料整理