常见的服务器故障场景之一是糟糕的DRAM,有时甚至在使用ECC内存时也是如此。
memtest86+是诊断DRAM问题最有用的工具之一。当它在内存开始时加载自己时,我一直在想,memtest86+是否检查了memtest86+加载到的内存的那一部分。
分配给memtest86+的内存是否太小而无关紧要,还是memtest86+可能因为无法测试驻留在其中的内存位置而忽略了DRAM中的一个缺陷?
发布于 2016-01-21 11:59:58
显然,memtest86+无法测试当前包含memtest86+可执行代码的内存区域(但如果该区域存在内存错误,则很可能测试本身会崩溃)。然而,memtest86+能够在运行时将自己的代码重新定位到不同的地址,通过使用这个技巧,它能够测试固件(BIOS)允许使用的所有内存--只是不是一次全部测试。
这种代码重定位在README.background源代码存档中进行了描述(该文件稍微过时了--例如,它声明用于memtest86+代码的地址是0x2000和0x200000,但是源代码中定义的低地址实际上是0x10000,而高地址是0x2000000或0x300000,这取决于机器中的内存量)。
但是,即使有了这种重定位技巧,memtest86+也无法测试所有内存,原因如下:
发布于 2016-01-21 10:02:09
不,memtest不能测试它自己的记忆。然而,它是如此的小(只有一些KB),所以它几乎没有关系。编辑:这条语句是错误的,因为正如所选答案中所述,memtest可以动态地重新定位自己,以测试所有用户可寻址内存。
--
理论上,现代处理器可以在启动时将其缓存的一部分配置为可编程内存,在非常小的程序(如memtest)中可以在不接触DRAM的情况下运行。
但是,它是一个特定于模型的特性(需要BIOS支持),我不认为memtest正在使用它。
https://serverfault.com/questions/750684
复制相似问题