内存位置在 RAM 条之间是如何分配的?
我最近将四根 1GB DIMM 升级为四根 2GB DIMM(服务器明确表示支持 2GB DDR2 DIMM)。但是,在插入四根全新的 2GB DIMM 后,机器无法启动,PC 扬声器发出响亮的哔声,可能表示 DIMM 出现故障。我一次拔出一根 DIMM 并尝试启动,发现如果 DIMM2 中的 RAM 不存在,机器就会启动。然后我运行 memtest86+ 大约 10%,6GB 似乎没问题。
然后,我决定将 DIMM3(正常工作)移至 DIMM2 插槽(尝试测试 DIMM2 插槽是否有故障),然后启动正常。然后,我尝试将有问题的 DIMM 放入 DIMM3 插槽。令我惊讶的是,这次计算机启动了,但是运行 memtest86+ 时,它在大约 5% 的通过率中发现了 ~15 个错误。但是,我天真地以为错误位于 6144-8192 MB 之间的位置,或者至少全部局限于连续的 2048 MB RAM 块。相反,我发现内存错误分散在所有位置。(例如,有些错误集中在 ~500MB 左右,有些集中在 ~4500 MB 左右——我没有记录确切的位置)。
但是,我随后移除了 DIMM3 中有问题的 DIMM,并重新运行了 memtest86+。6GB RAM 上的完整测试没有出现任何错误。此时我确信有问题的 DIMM 有问题——但我对之前的 memtest86+ 错误感到有些困惑。
内存位置不是连续分组的吗?(例如,DIMM0 为 0-2048MB,DIMM1 为 2048-4096MB,...)还是进一步拆分(例如,DIMM0 有字节 0、4、8、12;DIMM1 有字节 1、5、9、13)?或者损坏的 DIMM 会在属于其他 DIMM 条的位置产生内存错误?
答案1
您的问题没有统一的答案,每个品牌/型号/架构都可能存在很大差异。您通常可以在制造商的网站上找到机器的详细信息,但很遗憾,没有“黄金法则”。
答案2
正如@Chopper3 所说,没有保证插槽到内存位置的映射——这取决于主板/内存管理单元的实现。Really Good Systems(IBM 硬件)在故障组件旁边有闪烁的小灯,因此如果您可以让 MemTest86 生成本地 IPMI/其他监控工具检测到的错误,它将直接指向故障组件。我认为仅凭这一功能就足以证明 IBM 硬件的价格是合理的 :-)
关于错误的可重复性,不幸的是,有故障的 RAM 经常以不稳定的方式出现故障(今天还好,明天早上就完全坏了,然后到下午又恢复正常)。连续一夜运行 MemTest86+ 或其他软件测试工具通常是排除错误的好方法,但由于您已经知道哪个 DIMM(可能)有故障,因此您可以直接进行更换。