memtest86+
是诊断DRAM问题的最有用的工具之一。当它在内存的开头加载时,我一直在想memtest86+
是否检查将memtest86+
加载到的内存部分。无关紧要,还是因为memtest86+
无法测试其所在的内存位置而错过了DRAM中的缺陷?#1 楼
显然,memtest86 +无法测试当前包含memtest86 +可执行代码的内存区域(但是,如果该区域中存在内存错误,则测试本身很可能崩溃)。但是,memtest86 +能够在运行时将其自己的代码重定位到其他地址,通过使用此技巧,它可以测试固件(BIOS)允许使用的所有内存-并非一次全部。 />此代码重定位在memtest86 +源代码档案库内的README.background中进行了描述(文件已过时-例如,它指出用于memtest86 +代码的地址为0x2000和0x200000,但低位如源中所定义的实际上是0x10000,高地址是0x2000000或0x300000,具体取决于计算机中的内存量。内存的原因如下:通常,固件(BIOS)保留一些RAM区域供自己使用(例如ACPI表)。虽然这些RAM区域可以由CPU访问,但是将任何内容写入其中都可能导致无法预料的行为。
RAM的某些部分用于系统管理模式,甚至特权SMM代码之外的CPU也无法访问。
由于旧版PC内存布局的怪异,无法访问介于640K和1M之间的RAM地址范围(某些RAM可能用作BIOS ROM和SMM的影子,其他部分可能完全无法访问)。 br />
评论
有趣的是,我错过了它的重定位功能。显然,SMM等超出了范围(除了特定的BIOS支持)。
–shodanshok
16年1月21日在13:29
那些映射区域通常排除DRAM,因为正在解决其他“模块外”问题? ROM和外围设备说。
–mckenzm
16年1月22日,1:13
如果您有多个ram模块,请在交换它们之后执行第二次测试...
– JFL
16年1月22日在12:32
由于重写了指令,内存是否可能以正确的方式失败,从而使memtest错误地报告成功?确切地说,这需要多少错误?
– John Dvorak
16年1月22日在14:44
@JanDvorak:从理论上讲,这是可能的。在实践中,我想说的只是比敲击键盘上的头并随机输入莎士比亚十四行诗的可能性要大。
–伊尔马里·卡洛宁(Ilmari Karonen)
16年1月22日在20:17
#2 楼
不,memtest无法测试其自身的内存。但是,它很小(只有几KB),所以几乎没有关系。编辑:此语句是错误的,因为如所选答案中所述,memtest可以动态地重新定位自身以测试所有用户可寻址内存。-
从理论上讲,现代处理器可以在引导时从很小的程序(如memtest)中将其缓存的一部分配置为可编程存储器,而无需接触DRAM。
但这是特定于模型的功能(需要BIOS支持),并且我认为memtest没有使用它。
评论
谢谢您的回答。 memtest也在测试CPU缓存。因此,如果将memtest加载到此缓存中,则无法测试缓存的这一部分,这会更成问题,因为它比内存小得多?
–罗宾
16年1月21日在10:11
由于存在于memtest86文档中,因此它至少在直接方式中不测试处理器缓存。此外,现代处理器具有单独的指令和数据缓存(I $和D $)。可执行代码已加载到指令缓存中,无法直接修改/覆盖
–shodanshok
16年1月21日在10:13
memtest86 +肯定会测试CPU数据缓存,但这对这个问题无关紧要。再次感谢您的回答。
–罗宾
16年1月21日在10:23
你确定吗?我以为它会在测试其通常存在的内存时将自身复制到其他地方。这就是为什么每个测试都有一个慢的部分(大部分内存)和一个非常快的部分(存储其代码/数据的一小部分)的原因。
– Peter Cordes
16年1月21日,11:58
@DmitryGrigoryev:好的,所以我学到了更多的知识:-)谢谢!
–罗宾
16年1月22日,11:50
评论
虽然此问题与服务器有关,但也与普通PC有关,所以我投票决定将这个问题移至“超级用户”,以便可以吸引更多人。