硬件选型与配置:CPU选型、内存通道与NUMA绑定、网卡配置

做暗池交易系统,硬件选型这块,我踩过的坑比吃过的盐还多。很多人一上来就盯着CPU主频看,觉得越高越好。其实没那么简单。

咱们今天就把CPU、内存、网卡这三样核心硬件掰开揉碎了讲。嗯,都是真金白银换来的经验。

CPU选型:高频 vs 多核

先说结论:暗池交易系统,高频优先于多核

为什么?因为交易信号处理是一条流水线。你想想看,从网卡收包、解析、策略计算、到发单,这个链路是串行的。单线程延迟就是整个系统的延迟。

我曾在项目中遇到过,团队选了28核的Xeon Platinum,主频只有2.5GHz。结果呢?行情来了,单核处理不过来,队列堆积,延迟从5微秒飙到50微秒。后来换成8核的i9-13900K,主频5.8GHz,延迟直接降到3微秒以内。

核心原则:暗池交易系统的延迟瓶颈在单线程,不在并发。多核是用来做隔离的,不是用来加速单笔交易的。

具体选型建议:

  • 首选:Intel Core i9-13900K / 14900K — 单核5.8GHz,8个性能核够用
  • 次选:AMD Ryzen 9 7950X — 单核5.7GHz,但内存延迟略高
  • 服务器方案:Intel Xeon W-2400系列 — 单核4.8GHz,支持更多内存通道

注意:不要用AMD Threadripper或EPYC做交易节点。核心太多,但单核频率低,而且跨CCD通信延迟高。我曾经吃过这个亏,后来全换回Intel了。

内存通道与NUMA绑定

内存这块,很多人不重视。其实内存延迟对交易系统的影响,比CPU主频还大。

先看一个关键数字:内存延迟每增加10ns,交易延迟就增加10ns。听起来不多?但在高频交易里,10ns就是生与死的区别。

内存通道配置

现代CPU都支持多通道内存。比如i9-13900K支持DDR5-5600双通道。但很多人只插一根内存条,那就只有单通道带宽,延迟翻倍。

我建议:

  • 至少双通道 — 两根内存条插在A1和B1槽
  • 优先DDR5-6000+ — 频率越高,延迟越低
  • 容量不用太大 — 32GB足够,64GB顶天

小技巧:买内存时看CL值。CL30比CL36延迟低约5ns。别小看这5ns,一年下来能多赚不少。

NUMA绑定

NUMA(非统一内存访问)是现代多路服务器的标配。说白了,就是每个CPU有自己的本地内存,访问本地内存快,访问远端内存慢。

我见过最离谱的配置:交易进程跑在CPU0上,但内存分配在CPU1的DIMM上。结果每次内存访问都要跨QPI总线,延迟多了50ns。

正确的做法:

# 查看NUMA拓扑
numactl --hardware

# 绑定进程到指定CPU和内存节点
numactl --cpunodebind=0 --membind=0 ./trading_engine

# 或者用taskset + 内存亲和性
taskset -c 0-3 ./trading_engine
export GOMP_CPU_AFFINITY="0-3"

我个人习惯,在交易进程启动脚本里,强制绑定CPU和内存节点:

#!/bin/bash
# 交易引擎启动脚本
# 绑定到CPU 0-3,内存节点0

NUMACTL=$(which numactl)
$NUMACTL --cpunodebind=0 --membind=0 \
  ./trading_engine --config config.yaml

避坑指南:我曾经在BIOS里忘记关闭NUMA平衡(NUMA Balancing),结果Linux内核自动把内存页迁移到其他节点,导致延迟抖动。记得在/etc/default/grub里加上 numa_balancing=disable

网卡配置:Solarflare vs Mellanox

网卡是暗池系统的入口和出口。选错了,前面CPU和内存的优化全白费。

Solarflare SFN8522 / X2522

Solarflare是低延迟网卡的老牌选手。它的核心优势是OpenOnload技术,说白了就是绕过内核协议栈,直接在用户态处理网络包。

我建议的配置:

  • 固件版本:最新稳定版(别追新,稳定第一)
  • 驱动:onload 8.1.0+
  • 关键参数:关闭中断合并、关闭LRO/GRO、开启RSS
# 设置Solarflare网卡参数
sfcaffinity -s 0 -c 0 eth0  # 绑定中断到CPU0
ethtool -K eth0 rx off tx off  # 关闭硬件校验和
ethtool -C eth0 rx-usecs 0 tx-usecs 0  # 关闭中断合并
ethtool -G eth0 rx 4096 tx 4096  # 增大环形缓冲区

Mellanox ConnectX-5 / ConnectX-6

Mellanox(现在叫NVIDIA Networking)的优势是RDMAGPUDirect。如果你用FPGA或GPU做加速,Mellanox是首选。

配置要点:

  • 固件:开启低延迟模式(Low Latency Mode)
  • 驱动:MLNX_OFED 5.8+
  • 关键参数:开启RSS、关闭PFC流控、设置TX队列亲和性
# 设置Mellanox网卡参数
mlxconfig -d /dev/mst/mt4123_pciconf0 set LLDP_NB_TX=0
mlxconfig -d /dev/mst/mt4123_pciconf0 set KEEP_ETH_LINK_UP_P1=1
ethtool --set-priv-flags eth0 rx_striding_rq on
ethtool -C eth0 adaptive-rx off adaptive-tx off

对比总结:

特性 Solarflare Mellanox
用户态网络 OpenOnload(成熟) RDMA(需要应用改造)
延迟(典型值) 1.2μs 1.0μs
FPGA集成 一般 优秀(GPUDirect)
生态成熟度 高(交易行业标配) 中(HPC领域更强)

我个人习惯,暗池交易节点用Solarflare + OpenOnload,因为生态成熟,社区支持好。如果做行情加速或FPGA卸载,才考虑Mellanox。

知识体系图

下面这张图,把硬件选型的核心逻辑串起来了:

暗池交易系统硬件选型核心逻辑 目标:单笔交易延迟 < 5μs CPU:高频优先 内存:NUMA绑定 网卡:用户态加速 CPU选型措施 • 选i9-13900K/14900K • 关闭超线程/节能 • 锁定最高频率 内存配置措施 • 双通道DDR5-6000+ • 关闭NUMA平衡 • 进程绑定到本地内存 网卡配置措施 • Solarflare+OpenOnload • 关闭中断合并 • 绑定中断到指定CPU 结果:稳定低延迟 + 可预测性 + 零抖动

最后说一句:硬件选型没有银弹。我见过有人花10万配一台机器,延迟还不如3万的。关键是把每一分钱花在刀刃上:CPU主频、内存延迟、网卡用户态加速,这三样缺一不可。


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