首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >memtest86+是否测试用于运行自己的内存?

memtest86+是否测试用于运行自己的内存?
EN

Server Fault用户
提问于 2016-01-21 07:45:03
回答 2查看 5.9K关注 0票数 65

常见的服务器故障场景之一是糟糕的DRAM,有时甚至在使用ECC内存时也是如此。

memtest86+是诊断DRAM问题最有用的工具之一。当它在内存开始时加载自己时,我一直在想,memtest86+是否检查了memtest86+加载到的内存的那一部分。

分配给memtest86+的内存是否太小而无关紧要,还是memtest86+可能因为无法测试驻留在其中的内存位置而忽略了DRAM中的一个缺陷?

EN

回答 2

Server Fault用户

回答已采纳

发布于 2016-01-21 11:59:58

显然,memtest86+无法测试当前包含memtest86+可执行代码的内存区域(但如果该区域存在内存错误,则很可能测试本身会崩溃)。然而,memtest86+能够在运行时将自己的代码重新定位到不同的地址,通过使用这个技巧,它能够测试固件(BIOS)允许使用的所有内存--只是不是一次全部测试。

这种代码重定位在README.background源代码存档中进行了描述(该文件稍微过时了--例如,它声明用于memtest86+代码的地址是0x2000和0x200000,但是源代码中定义的低地址实际上是0x10000,而高地址是0x2000000或0x300000,这取决于机器中的内存量)。

但是,即使有了这种重定位技巧,memtest86+也无法测试所有内存,原因如下:

  • 通常,固件(BIOS)保留一些RAM区域供自己使用(例如,ACPI表)。虽然CPU可以访问这些RAM区域,但是向它们写入任何内容都会导致不可预测的行为。
  • RAM的某些部分用于系统管理模式,甚至不能从特权SMM代码之外的CPU访问。
  • RAM地址范围在640 K到1M之间,由于遗留PC内存布局的怪癖而无法访问(其中一些RAM可用作BIOS ROM和SMM的阴影,其他部分可能完全无法访问)。
票数 77
EN

Server Fault用户

发布于 2016-01-21 10:02:09

不,memtest不能测试它自己的记忆。然而,它是如此的小(只有一些KB),所以它几乎没有关系。编辑:这条语句是错误的,因为正如所选答案中所述,memtest可以动态地重新定位自己,以测试所有用户可寻址内存。

--

理论上,现代处理器可以在启动时将其缓存的一部分配置为可编程内存,在非常小的程序(如memtest)中可以在不接触DRAM的情况下运行。

但是,它是一个特定于模型的特性(需要BIOS支持),我不认为memtest正在使用它。

票数 5
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/750684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档