硬件选型与配置:CPU、内存与网卡

做高频交易,硬件就是你的枪。枪不好,再好的策略也打不中目标。

这一章,我重点聊聊CPU、内存和网卡这三个核心部件。说白了,它们决定了你的交易系统能跑多快、多稳。我这些年踩过的坑不少,今天一并倒出来给你。

CPU:高频核心的选择与调优

CPU是交易系统的大脑。但很多人一上来就盯着核心数,觉得越多越好。其实不然。

高频交易,拼的是单核性能,不是多核。

你想想看,一个订单从收到行情到发出指令,中间就那么几微秒。如果CPU要花时间在核心之间切换数据,那黄花菜都凉了。

核心选择:高频核心优先

我个人习惯,首选Intel的Xeon W系列或者AMD的Ryzen Threadripper Pro系列。为什么?

  • 单核频率高:基础频率4.0GHz以上,睿频能到5.0GHz更好
  • 缓存大:L3缓存至少30MB以上,减少内存访问次数
  • 核心数适中:8到16个物理核心就够了,太多反而增加延迟
我的经验:我在项目中遇到过,有人用64核的EPYC跑交易系统,结果延迟反而比16核的Xeon高。原因就是核心间通信开销太大。记住,高频交易不是搞渲染,不需要那么多核。

睿频与超线程:该关就关

这里有两个关键设置,很多人会忽略。

第一,关掉睿频(Turbo Boost)。

为什么?睿频虽然能临时提高频率,但它是动态的。当温度升高或功耗超标时,频率会突然降下来。这种波动对交易系统是致命的。你想想,上一笔交易跑了2微秒,下一笔突然变成3微秒,策略还怎么玩?

第二,关掉超线程(Hyper-Threading)。

超线程让一个物理核心模拟成两个逻辑核心。听起来不错,但实际上两个逻辑核心会争抢缓存和执行单元。在高频场景下,这反而增加了延迟的不确定性。

避坑指南:我曾经在测试环境中开着超线程跑回测,结果发现每次运行结果都不一样。查了两天才发现是超线程导致的缓存争用。从那以后,我所有交易服务器都强制关闭超线程。

在BIOS中,你可以这样设置:

// BIOS设置示例
Intel Turbo Boost Technology: Disabled
Hyper-Threading Technology: Disabled
C-States: Disabled
SpeedStep: Disabled

内存:DDR5 vs DDR4 与时序优化

内存是数据的临时仓库。仓库门开得快不快,直接影响交易速度。

DDR5 vs DDR4:选谁?

我直接说结论:如果预算允许,选DDR5。

DDR5的优势很明显:

  • 频率更高:DDR5起步就是4800MHz,DDR4顶多3200MHz
  • 带宽更大:单条DDR5带宽是DDR4的两倍左右
  • 延迟更低:虽然DDR5的CL值看起来高,但实际访问延迟因为频率提升反而更低

但要注意,DDR5目前价格还是偏高。如果你的交易系统对延迟不是极端敏感,DDR4也够用。

参数 DDR4-3200 DDR5-4800 DDR5-5600
频率 3200 MHz 4800 MHz 5600 MHz
带宽 25.6 GB/s 38.4 GB/s 44.8 GB/s
CL延迟 CL16 (10ns) CL40 (16.7ns) CL36 (12.9ns)
实际访问延迟 约 60-70ns 约 50-60ns 约 45-55ns
关键点:实际访问延迟才是关键。DDR5虽然CL值高,但因为频率快,整体延迟反而更低。我测试过,DDR5-5600比DDR4-3200在订单处理上快了约15%。

时序优化:别小看这几个数字

内存时序(CL、tRCD、tRP、tRAS)直接影响延迟。我建议:

  • CL值越低越好:CL是列地址访问延迟,直接影响首次访问速度
  • tRCD尽量低:行地址到列地址的延迟,影响随机访问性能
  • tRAS不要太大:行激活时间,太大浪费,太小不稳定

举个例子,DDR5-5600 CL36 比 CL46 在订单处理上能快5-8%。别小看这点差距,在微秒级别的竞争中,这就是胜负手。

我的习惯:买内存时,我会优先选三星或海力士的颗粒。镁光的也行,但稳定性稍差。另外,尽量买套条,确保时序一致。

网卡:Solarflare与Mellanox的低延迟配置

网卡是交易系统的咽喉。数据进出的速度,全看它。

为什么选Solarflare或Mellanox?

普通网卡延迟在10-20微秒,而Solarflare和Mellanox能做到1-2微秒。差距就在这里。

  • Solarflare SFN8522:支持OpenOnload,用户态网络栈,延迟极低
  • Mellanox ConnectX-5/6:支持RDMA,零拷贝传输,CPU负载低

我个人更倾向Solarflare,因为它的OpenOnload技术可以直接绕过内核,让应用程序直接访问网卡。说白了,就是省去了操作系统那一堆繁琐的协议栈处理。

配置要点

拿到网卡后,别急着插上就用。有几个关键配置必须做:

  1. 关闭中断合并:网卡收到数据包后立即通知CPU,不要攒一批再通知
  2. 设置RSS队列:多队列接收,每个CPU核心处理一个队列,避免争抢
  3. 启用硬件时间戳:精确记录每个数据包的到达时间,精度可达纳秒级
  4. 调整Ring Buffer大小:根据流量调整,太大浪费内存,太小丢包
// Solarflare网卡配置示例
# 关闭中断合并
ethtool -C eth0 rx-usecs 0 tx-usecs 0

# 设置RSS队列(假设4个核心)
ethtool -L eth0 combined 4

# 启用硬件时间戳
ethtool -T eth0

# 调整Ring Buffer
ethtool -G eth0 rx 4096 tx 4096
避坑指南:我曾经在配置Mellanox网卡时,忘了关闭中断合并。结果行情数据一多,网卡攒了一批才通知CPU,导致订单处理延迟从2微秒飙到15微秒。查了整整一天才发现问题。所以,配置完一定要用延迟测试工具验证。

知识体系总览

下面这张图,把硬件选型的核心逻辑串起来了。你可以对照着看,心里有个谱。

硬件选型与配置核心逻辑 CPU 内存 网卡 高频核心优先 关闭睿频 关闭超线程 禁用C-States DDR5优先 低时序(CL) 三星/海力士颗粒 套条确保一致性 Solarflare/Mellanox 关闭中断合并 设置RSS队列 启用硬件时间戳 目标:最小化延迟波动,确保确定性执行

硬件选型不是一锤子买卖。我建议你搭建一个测试环境,把不同配置跑一遍,用延迟测试工具(比如Solarflare的sfptest)验证效果。只有数据说话,才是真的。

嗯,这一章就到这里。记住,硬件是基础,但光有硬件不够。下一章我们会聊操作系统层面的调优,那才是真正拉开差距的地方。


公众号:蓝海数据掘金营,微信deep3321