3. 内存选型:DDR4 vs DDR5,延迟与带宽的权衡
做回测系统,内存选型是个绕不开的坎。
很多人觉得,内存嘛,越大越好,频率越高越好。但实际做低延迟系统时,你会发现事情没那么简单。DDR4 和 DDR5 的取舍,说白了就是一场「延迟」和「带宽」的博弈。
我个人习惯把内存比作回测引擎的「燃料管道」。管道太细,数据流跟不上;管道太长,数据到达的时间又慢了。嗯,今天我们就来聊聊这个。
3.1 带宽 vs 延迟:你到底需要哪个?
先问自己一个问题:你的回测系统,瓶颈到底在哪?
我见过不少团队,一上来就追最新的 DDR5,觉得数字大就是好。结果呢?回测延迟反而上去了。为什么会这样?
咱们先看一组典型数据:
| 参数 | DDR4-3200 | DDR5-4800 | DDR5-6000 |
|---|---|---|---|
| 理论带宽 (GB/s) | 25.6 | 38.4 | 48.0 |
| CAS 延迟 (CL) | CL16 ~ CL18 | CL36 ~ CL40 | CL40 ~ CL48 |
| 实际延迟 (ns) | ~10 ns | ~15 ns | ~16 ns |
| 每时钟预取数 | 8n | 16n | 16n |
看到没?DDR5 的带宽确实翻倍了,但延迟也涨了 50% 以上。对于回测系统来说,这 5~6 纳秒的差距,可能就是一笔交易信号的生死线。
核心结论:如果你的回测是「顺序读取大量历史数据」(比如逐笔回放),带宽更重要,选 DDR5。如果你的回测是「随机访问小数据块」(比如查询快照、状态机跳转),延迟更重要,DDR4 反而更优。
3.2 我在项目中踩过的坑
我曾经接手过一个高频回测项目。团队用的是 DDR5-5600,CL46 的条子。跑全市场逐笔回放时,吞吐量确实漂亮,每秒能处理 200 万笔。
但一切换到「事件驱动型回测」,问题就来了。每次触发一个信号,需要从内存里随机读取几十个字段。结果呢?延迟抖动特别大,平均延迟从 8 微秒飙到了 15 微秒。
排查了很久,最后发现是 DDR5 的「Bank Group」架构导致的。DDR5 把内存分成了 8 个 Bank Group,每个 Group 内部独立。连续读取没问题,但随机访问时,跨 Group 的切换开销就暴露了。
避坑指南:如果你做的是「混合型回测」(既有顺序扫描,又有随机查询),我建议你考虑 DDR4-3600 CL14 的条子。它的延迟只有 7.8 ns,带宽也够用(28.8 GB/s)。我在后来的项目中换成这个配置,延迟抖动直接降了 40%。
3.3 内存时序:CL、tRCD、tRP 到底怎么看?
很多同学只看 CL(CAS Latency),其实不够。内存延迟是四个数字的合力:CL-tRCD-tRP-tRAS。
举个例子:DDR4-3200 CL16-18-18-38 和 DDR5-6000 CL40-40-40-80。
你算一下实际延迟:
- DDR4: (16 / 3200) * 2000 = 10 ns
- DDR5: (40 / 6000) * 2000 = 13.3 ns
差了 3.3 纳秒。这 3.3 纳秒,在回测系统里意味着什么?
我举个例子:假设你的回测引擎每微秒处理 100 笔交易,3.3 纳秒的延迟差异,在 1 秒的回测里就会累积出 3300 笔的时序偏差。对于 tick 级回测来说,这个误差是不可接受的。
注意:不要只看频率。DDR5 的高频率往往伴随着高时序。选内存时,我建议你算一下「实际延迟 = CL / 频率 * 2000」,这个值才是你的回测系统真正感受到的延迟。
3.4 容量与通道:别让内存成为瓶颈
带宽和延迟之外,容量和通道数也很关键。
我个人习惯:
- 单通道 vs 双通道:必须双通道。单通道的带宽只有一半,延迟也会增加 10%~15%。我在测试中发现,双通道 DDR4-3200 的随机读取延迟比单通道低了 12%。
- 容量选择:回测系统一般 32GB 起步。如果你做全市场逐笔回放,建议 64GB 或 128GB。容量不够时,系统会频繁触发页面交换,那延迟就是毫秒级的了。
- Rank 数量:尽量选单 Rank 或双 Rank 的内存。4 Rank 以上的内存,虽然容量大,但信号质量下降,延迟反而会变差。
3.5 一张图看懂 DDR4 vs DDR5 选型逻辑
下面这张图是我自己总结的选型决策树,你可以参考:
这张图的核心逻辑很简单:先判断你的回测模式,再选内存。别盲目追新。
3.6 实战配置建议
最后,我给出几个具体的配置方案,你可以根据自己的场景对号入座:
- 场景一:纯逐笔回放(Tick级)
- 推荐:DDR5-6000 CL40 双通道 64GB
- 理由:带宽 48 GB/s,顺序读取效率最高
- 场景二:事件驱动回测(信号触发)
- 推荐:DDR4-3600 CL14 双通道 32GB
- 理由:延迟 7.8 ns,随机访问性能优异
- 场景三:混合型(既有扫描又有查询)
- 推荐:DDR4-3600 CL14 双通道 64GB
- 理由:延迟和带宽的平衡点,性价比最高
一个小技巧:如果你预算充足,可以考虑「DDR4 大容量 + DDR5 小容量」的异构方案。把热数据放在 DDR4 上,冷数据放在 DDR5 上。我在一个项目中这样做过,整体延迟降低了 18%,带宽也没落下。
嗯,内存选型这块,说白了就是搞清楚你的回测引擎到底在「读什么」和「怎么读」。别被厂商的宣传带偏了,回到你的实际场景里来,答案自然就有了。