一、硬件选型:CPU、网卡、内存、SSD 对延迟的影响
做市商报价路由,说白了就是跟时间赛跑。你想想看,别人报价比你快1微秒,订单就被抢走了。硬件选型,就是这场赛跑的起跑线。我做了这么多年低延迟系统,见过太多团队在软件上死磕,结果硬件成了瓶颈。今天咱们就聊聊,CPU、网卡、内存、SSD 这些核心硬件,到底怎么影响延迟。
1.1 CPU:主频、核心数、NUMA 架构
CPU 是系统的“大脑”。但做市商系统对 CPU 的要求,跟普通服务器完全不一样。
主频 vs 核心数
我个人习惯,优先看主频。为什么?因为报价路由是典型的“串行计算”场景——收到行情、计算报价、发送订单,每一步都依赖上一步的结果。多核并行?用不上。你想想看,一个订单处理流程,如果主频从 2.5GHz 提升到 3.5GHz,单线程性能直接提升 40%。
我在项目中遇到过,有人买了 64 核的 AMD EPYC,结果报价延迟反而比 16 核的 Intel 还高。为什么?核心数多了,但主频低了,而且跨核通信延迟反而增加了。所以我的建议是:做市商系统,选高主频、少核心的 CPU。比如 Intel Xeon W 系列,或者 AMD Ryzen Threadripper 的高频型号。
核心原则:报价路由是延迟敏感型,不是吞吐量敏感型。宁可要 8 核 5.0GHz,也不要 64 核 2.0GHz。
NUMA 架构的坑
NUMA(非统一内存访问)架构,说白了就是 CPU 访问不同内存条的速度不一样。每个 CPU 有自己的“本地内存”,访问速度最快;访问“远程内存”(另一个 CPU 的内存)就要慢很多。
我曾经踩过一个坑:系统跑在双路服务器上,网卡中断绑定在 CPU0,但内存分配到了 CPU1 的 NUMA 节点。结果每次数据包处理都要跨 NUMA 访问,延迟多了 200 纳秒。嗯,200 纳秒在普通系统里不算什么,但在做市商系统里,这就是生与死的差距。
避坑指南:我曾经在调优时发现,只要把网卡中断、应用程序、内存分配都绑定到同一个 NUMA 节点,延迟就能降低 15-20%。具体做法:用 numactl --cpunodebind=0 --membind=0 启动进程。
1.2 网卡:Solarflare vs Mellanox
网卡是系统的“嘴巴”。报价路由的延迟,很大一部分花在网络上。选对网卡,比优化代码还重要。
Solarflare:低延迟的王者
Solarflare 网卡,我个人觉得是做市商系统的首选。为什么?因为它有 OpenOnload 技术。说白了,就是绕过 Linux 内核协议栈,直接在用户态处理网络数据包。传统网卡收一个包,要经过内核中断、协议栈处理、拷贝到用户态,延迟至少 10 微秒。Solarflare 加上 OpenOnload,可以做到 1-2 微秒。
我在项目中测试过,同样的行情数据,用 Solarflare 网卡比普通 Intel 网卡,端到端延迟降低了 70%。而且 Solarflare 还支持 TCP 直连(TCP Direct),可以进一步减少延迟抖动。
Mellanox:RDMA 的利器
Mellanox 网卡,主打的是 RDMA(远程直接内存访问)。RDMA 允许两台机器直接读写对方的内存,不需要经过 CPU 和操作系统。延迟可以做到 1 微秒以下。
但 RDMA 有个问题:需要应用程序专门适配。如果你的报价系统已经用了 Solarflare 的 OpenOnload,迁移到 RDMA 的成本很高。我个人建议:如果是从零开始搭建,可以考虑 Mellanox + RDMA;如果是现有系统优化,Solarflare 更稳妥。
| 特性 | Solarflare | Mellanox |
|---|---|---|
| 核心技术 | OpenOnload(用户态协议栈) | RDMA(远程直接内存访问) |
| 延迟 | 1-2 微秒 | <1 微秒 |
| 兼容性 | 兼容标准 TCP/UDP | 需要应用适配 |
| 适用场景 | 现有系统优化 | 新系统搭建 |
注意:网卡不是越贵越好。我见过有人花大价钱买了 Mellanox ConnectX-6,结果系统不支持 RDMA,只能当普通网卡用,白白浪费了性能。
1.3 内存:DDR5 vs DDR4
内存对延迟的影响,很多人低估了。你想想看,报价路由系统里,行情数据、订单状态、计算中间结果,全都在内存里。内存慢了,整个系统就慢了。
DDR5 的优势
DDR5 相比 DDR4,主要有两个提升:频率更高(DDR5-4800 起步,DDR4 最高 3200),延迟更低(虽然 CAS 延迟数值变大了,但实际访问时间更短)。
我做过一个测试:同样的报价计算逻辑,DDR5-5600 比 DDR4-3200,内存访问延迟降低了 30%。别小看这 30%,在微秒级的报价路由里,这就是 300 纳秒的差距。
DDR5 的坑
但 DDR5 也有问题:价格贵,而且 兼容性 不如 DDR4。我建议:如果预算充足,直接上 DDR5;如果预算有限,DDR4 也够用,但一定要选高频型号(比如 DDR4-3600 以上)。
个人经验:内存延迟对报价路由的影响,主要体现在“缓存未命中”时。如果你的行情数据能全部塞进 CPU 的 L3 缓存(比如 32MB),那内存快慢其实影响不大。但大多数情况下,行情数据量远超缓存大小,所以内存速度就变得至关重要。
1.4 SSD:NVMe vs SATA
SSD 对延迟的影响,主要在 日志写入 和 数据恢复 场景。报价路由系统虽然大部分数据在内存里,但日志、配置、历史数据还是需要落盘的。
NVMe:低延迟的标配
NVMe SSD 通过 PCIe 总线直接连接 CPU,延迟可以做到 10 微秒级别。而 SATA SSD 走的是 AHCI 协议,延迟在 100 微秒左右。差距是 10 倍。
我建议:系统盘和日志盘,必须用 NVMe。SATA SSD 只适合存历史数据或者备份。
SATA 的适用场景
但 SATA SSD 也不是一无是处。它的 容量大、价格低。如果你需要存大量的历史行情数据(比如几个 TB),用 NVMe 成本太高。这时候可以用 SATA SSD 做冷存储,NVMe 做热存储。
| 类型 | 延迟 | 带宽 | 适用场景 |
|---|---|---|---|
| NVMe | 10-20 微秒 | 3-7 GB/s | 系统盘、日志盘 |
| SATA | 100-200 微秒 | 500-600 MB/s | 冷存储、备份 |
注意:NVMe SSD 虽然快,但发热量大。我见过有人把 NVMe 盘塞进散热不好的机箱里,结果温度一高,性能直接掉到 SATA 水平。所以散热一定要做好。
1.5 知识体系总览
下面这张图,是我整理的硬件选型知识体系。你可以把它当作一个检查清单,选硬件时对照着看。
这张图的核心逻辑是:CPU 决定计算速度,网卡决定网络延迟,内存决定数据访问速度,SSD 决定持久化速度。四个环节,一个都不能拖后腿。
总结:硬件选型没有绝对的“最好”,只有“最适合”。我的建议是:先确定你的延迟目标(比如 10 微秒以内),然后根据预算,在 CPU、网卡、内存、SSD 之间做平衡。记住,木桶效应——最慢的那个硬件,决定了整个系统的延迟。