内存能不能混插:什么情况下会出问题

扩容时手里只有不同型号的条,能不能混着插,这是个常见问题。答案是分情况,而且要接受一些代价。

混不同频率:按最低的跑

这是最温和的一种。系统会读取所有条的 SPD,按最低的公共频率运行。结果是高频条被浪费,但功能正常。

风险点在于有些平台的处理不够干净,可能出现训练不稳定、开机偶发失败。另外把高频条降到低频运行时,时序参数的组合可能不是它验证过的组合,边界稳定性下降。

混不同容量:可能进非对称模式

各通道容量不等时,平台会有几种处理方式:一部分容量按对称交织访问、剩余部分单通道访问,或者整体退到较低的交织度。

后果是性能不均匀,同一台机器上不同内存区域的访问速度不同。对性能敏感的负载会出现难以解释的抖动。查性能问题时如果发现内存配置不对称,先把配置整平再谈别的。

混不同 rank 数:负载和时序都变

rank 数影响通道负载和时序参数。混插时控制器要用一套参数兼容不同的条,通常取保守值,同时降频。

这一类混插出问题的概率比前两种高,尤其是速率本来就接近平台上限的时候。

混不同厂商或批次:最难预测

即便标称参数完全相同,不同厂商甚至同厂商不同批次的条,颗粒特性和 SPD 细节都有差别。混在同一通道时,内存训练要找到一组同时满足两根条的参数,余量被压缩。

这类问题的典型表现是:单独测都好,混着用偶发报错,常温没事高温出错。排查起来非常耗时,因为不容易稳定复现。

绝对不能混的

  • ECC 和非 ECC 混插。多数平台直接不认或者关闭 ECC,后者更危险,你以为有保护实际没有;
  • RDIMM 和 UDIMM 混插,物理和电气都不兼容;
  • 不同代际混插,DDR4 和 DDR5 连插槽都不一样,不存在可能。

实际建议

  • 能同型号同批次就同型号同批次,这是省事的做法;
  • 必须混时,按通道分组,同一通道内保持一致,不同通道之间的差异影响小一些;
  • 混插后一定要做压测,而且要带温度和长时间。开机能进系统不代表稳定;
  • 关键业务机器不要混插,省下来的钱不值得承担排查成本;
  • 混插配置要记录在案。半年后出问题,没人记得当时插了什么,排查从头开始。

一个反直觉的经验

参数标称完全相同的两根条混插,有时比参数明显不同的更麻烦。因为参数不同时系统会明确地取保守值,参数相同时系统按标称配置,但实际余量可能不匹配,问题就出在边界上。

这也是为什么二手扩容尤其要注意:卖家说"一样的条",指的是标称一样,实测余量可能差很远。