第一章:硬件选型与调优——为做市商系统打好地基
做市商系统,说白了就是跟时间赛跑。你算法再牛,策略再精,硬件跟不上,一切都是白搭。我见过太多团队,代码写得漂漂亮亮,结果上线后延迟就是压不下去,最后发现是CPU的NUMA配置没搞对——这种坑,踩一次就够了。
今天咱们就聊聊硬件选型与调优。CPU、内存、网卡、SSD,这四块是低延迟交易系统的基石。我会结合自己这些年踩过的坑,给你讲讲到底该怎么选、怎么配。
核心观点:做市商系统的硬件选型,不是买最贵的,而是买最对的。延迟、吞吐、成本,三者需要找到平衡点。
一、CPU:频率为王,核心数够用就好
做市商系统对CPU的要求,跟普通服务器完全不同。普通服务器追求多核并行,我们追求的是单核极致性能。为什么?因为交易信号的处理路径是串行的——你不可能把一笔订单的处理拆到多个核上并行。
高频优先。我个人习惯,选CPU先看主频。3.5GHz起步,4.0GHz以上更好。Intel的i9-13900K或者Xeon W系列,AMD的Ryzen 9 7950X,都是不错的选择。我在项目中遇到过,同样的策略,从3.0GHz换到4.2GHz,延迟直接降了25%。
小技巧:别只看基础频率,要看睿频(Turbo Boost)。有些CPU标称3.0GHz,但单核睿频能到4.5GHz,这才是我们要的。
核心数,够用就行。做市商系统通常只需要2-4个核跑核心逻辑。剩下的核可以跑风控、日志、监控。我建议选6-8核的CPU,再多就是浪费。你想想看,花大价钱买32核的CPU,结果大部分核都在闲着,何必呢?
NUMA,这是个坑。NUMA(非统一内存访问)架构下,CPU访问本地内存和远端内存的延迟差很多。我曾经在一个项目里,系统莫名其妙多了几微秒的抖动,查了两天才发现是NUMA节点没绑对。
怎么调?两个原则:
- 绑核:把交易线程绑定到同一个NUMA节点上的物理核
- 绑内存:用
numactl或mbind()把内存分配在同一个节点
# 示例:将进程绑定到 NUMA node 0 的核 0-3
numactl --cpunodebind=0 --membind=0 ./trading_engine
# 查看当前NUMA拓扑
numactl --hardware
注意:超线程(Hyper-Threading)在低延迟场景下建议关闭。超线程共享执行单元,会导致延迟抖动。我一般直接在BIOS里关掉。
二、内存:频率、通道、时序,一个都不能少
内存对做市商系统的影响,很多人低估了。其实内存延迟直接决定了你的数据访问速度,尤其是在高频场景下,每次内存访问多花几个纳秒,累积起来就是灾难。
频率越高越好。DDR5 6000MHz起步,能上DDR5 8000MHz更好。频率越高,内存带宽越大,延迟越低。我测试过,从DDR4 3200MHz升级到DDR5 6400MHz,订单处理延迟降低了约15%。
通道数要拉满。现代CPU支持双通道、四通道甚至八通道。通道数越多,内存带宽越大。对于做市商系统,我建议至少双通道,四通道更佳。别省这点钱,通道数不够,CPU就得等着数据。
| 配置 | 带宽(理论) | 适用场景 |
|---|---|---|
| 单通道 DDR5 4800 | 38.4 GB/s | 入门级,不推荐 |
| 双通道 DDR5 6000 | 96 GB/s | 做市商系统标配 |
| 四通道 DDR5 6400 | 204.8 GB/s | 高端交易系统 |
时序(CL值)越低越好。时序就是内存的延迟参数,CL值越低,延迟越小。比如CL30就比CL36好。我选内存时,会优先看CL值,其次才是频率。CL30的DDR5 6000,实际延迟可能比CL40的DDR5 7200还低。
避坑指南:我曾经为了省钱买了CL40的内存,结果延迟死活降不下来。后来换了CL30的,效果立竿见影。内存时序这个参数,千万别忽视。
三、网卡:Solarflare vs Mellanox,怎么选?
网卡是做市商系统的咽喉。数据从交易所到你的系统,第一站就是网卡。延迟多一个微秒,可能就错过一笔好交易。
Solarflare(现属Xilinx/AMD):低延迟网卡的老牌选手。它的优势在于:
- 硬件时间戳(PTP),精度可达纳秒级
- OpenOnload,用户态网络栈,绕过内核
- TCP直接卸载到硬件
Mellanox(现属NVIDIA):高性能计算的王者。它的优势在于:
- RDMA(远程直接内存访问),零拷贝传输
- ConnectX系列,延迟极低
- 支持RoCE v2,融合以太网和InfiniBand
我个人习惯,如果交易所用的是TCP协议,Solarflare的OpenOnload是首选。如果交易所支持UDP组播或者需要RDMA,Mellanox更合适。我在一个项目中用过Solarflare的SFN8522,配合OpenOnload,TCP延迟从10微秒降到了3微秒。
调优要点:
- 中断亲和性:把网卡中断绑定到交易线程所在的CPU核
- Ring Buffer:增大RX/TX ring buffer,减少丢包
- 关闭offload:某些场景下关闭TCP校验和offload,反而能降低延迟
# 设置中断亲和性(以Solarflare为例)
# 查看网卡中断号
cat /proc/interrupts | grep sfc
# 将中断绑定到CPU核0-3
echo 0f > /proc/irq/<irq_number>/smp_affinity
# 增大ring buffer
ethtool -G eth0 rx 4096 tx 4096
注意:网卡的固件版本也很重要。我遇到过固件bug导致丢包的情况,升级固件后问题解决。建议定期检查厂商的固件更新。
四、SSD:NVMe vs Optane,谁更适合做市商?
SSD在交易系统中主要用于日志存储、历史数据回放和状态持久化。虽然交易核心逻辑在内存中运行,但SSD的读写延迟依然会影响系统启动、数据加载和故障恢复。
NVMe SSD:主流选择,性价比高。PCIe 4.0的NVMe SSD,顺序读写可达7GB/s,随机读写也有1M IOPS。对于大多数做市商系统,NVMe SSD完全够用。
Intel Optane(傲腾):曾经的王者,现在已停产。但如果你能找到存货,Optane的延迟优势依然明显。它的随机读写延迟在10微秒级别,而NVMe SSD通常在50-100微秒。Optane的持久内存模式(PMem)更是可以直接当作内存用。
| 特性 | NVMe SSD | Intel Optane |
|---|---|---|
| 顺序读写 | 7 GB/s | 2.5 GB/s |
| 随机读写延迟 | 50-100 μs | 10 μs |
| 寿命(DWPD) | 1-3 | 30+ |
| 价格 | 低 | 高 |
我的建议:如果预算充足,用Optane做日志盘,NVMe做数据盘。Optane的低延迟和超高寿命,非常适合频繁写入的日志场景。NVMe的大容量和高带宽,适合存储历史数据和回放文件。
避坑指南:我曾经用普通SATA SSD做日志盘,结果在高频写入下,延迟抖动严重,导致系统卡顿。后来换成Optane,问题彻底解决。日志盘的选型,千万别凑合。
嗯,硬件选型这块,今天就聊到这儿。记住一句话:做市商系统的硬件,没有最好,只有最合适。根据你的交易频率、数据量和预算,找到那个平衡点,就是最优解。
公众号:蓝海资料掘金营,微信deep3321