我这里有一台笔记本电脑,我怀疑它的内存模块有问题。因此我下载了Memtest86+并让它运行。
请注意,屏幕截图不是我的实际截图,它是由 memtest86+ 提供的
我该如何解读屏幕上的数字?我让它运行了大约四个小时,现在已进入第 7 阶段。
尤其是,
- 测试号码
- 错误数量
- ECC 错误计数
指示?内存错误的合理值是什么?我应该在什么时候考虑更换内存?
答案1
总结
最重要的数字是:健康内存的错误计数应为 0. 任何大于 0 的数字都可能表示扇区损坏/有故障。
屏幕说明
Memtest86+ v1.00 | Progress of the entire pass (test series)
CPU MODEL and clock speed | Progress of individual, current test
Level 1 cache size & speed | Test type that is currently running
Level 2 cache size & speed | Part of the RAM (sector) that is being tested
RAM size and testing speed | Pattern that is being written to the sector
Information about the chipset that your mainboard uses
Information about your RAM set-up, clock speed, channel settings, etc.
WallTime Cached RsvdMem MemMap Cache ECC Test Pass Errors ECC Errs
--------- ------ ------- -------- ----- --- ---- ---- ------ --------
Elapsed Amount Amount Mapping on on Test # of # of # of ECC
time of RAM of used or or type pass errors errors
cached reserved off off done found found
RAM, not
tested
数据/测试说明
MemTest 运行一系列测试,它会将特定模式写入内存的每个扇区并检索它。如果检索到的数据与最初存储的数据不同,MemTest 会记录错误并增加错误计数一个接一个。错误通常是 RAM 条损坏的迹象。
由于记忆不仅仅是一个保存信息的记事本,还具有缓存等高级功能,因此需要进行几项不同的测试。这就是Test #
表示。MemTest 运行许多不同的测试来查看是否发生错误。
一些(简化的)测试示例:
- 按以下顺序测试扇区:A、B、C、D、E、F。(串行)
- 按以下顺序测试区域:A、C、E、B、D、F。(移动)
- 用以下模式填充所有扇区:aaaaaaaa
- 用随机图案填充所有扇区。
所有测试的更详细描述来自:https://www.memtest86.com/technical.htm#detailed
测试 0 [地址测试,步行,无缓存]
使用步行地址模式测试所有存储库中的所有地址位。
测试 1 [地址测试,自身地址,顺序]
每个地址都写入自己的地址,然后检查一致性。理论上,之前的测试应该已经发现任何内存寻址问题。此测试应该可以发现之前未检测到的任何寻址错误。此测试按顺序在每个可用 CPU 上进行。
测试2[地址测试,自身地址,并行]
与测试 1 相同,但使用所有 CPU 和重叠地址并行进行测试。
测试 3 [移动反转,一和零,顺序]
此测试使用移动反转算法,模式均为 1 和 0。即使缓存在某种程度上会干扰测试算法,也会启用缓存。启用缓存后,此测试不会花费很长时间,并且应该可以快速找到所有“硬”错误和一些更细微的错误。此测试只是快速检查。此测试按顺序在每个可用 CPU 上进行。
测试 4 [移动反转,一和零,平行]
与测试 3 相同,但使用所有 CPU 并行进行测试。
测试 5 [移动反转,8 位拍子]
这与测试 4 相同,但使用 8 位宽的“移动”1 和 0 模式。此测试将更好地检测“宽”内存芯片中的细微错误。
测试 6 [移动反转,随机模式]
测试 6 使用与测试 4 相同的算法,但数据模式是随机数及其补码。此测试在发现难以检测的数据敏感错误方面特别有效。每次通过的随机数序列都不同,因此多次通过可以提高效率。
测试 7 [方块移动,64 步]
此测试使用块移动 (movsl) 指令对内存进行压力测试,基于 Robert Redelmeier 的 burnBX 测试。内存使用每 8 个字节反转一次的移位模式进行初始化。然后使用 movsl 指令移动 4mb 内存块。移动完成后,检查数据模式。由于仅在内存移动完成后才检查数据,因此无法知道错误发生的位置。报告的地址仅适用于发现错误模式的位置。由于移动被限制在 8mb 内存段,因此失败的地址将始终与报告的地址相距不到 8mb。此测试中的错误不用于计算 BadRAM 模式。
测试 8 [移动反转,32 位 pat]
这是移动反转算法的变体,该算法将数据模式左移一位,用于每个连续地址。起始位位置在每次传递时左移。要使用所有可能的数据模式,需要传递 32 次。此测试在检测数据敏感错误方面非常有效,但执行时间较长。
测试 9 [随机数序列]
此测试将一系列随机数写入内存。通过重置随机数的种子,可以创建相同的数字序列作为参考。检查初始模式,然后在下一次通过时补充并再次检查。但是,与移动反转测试不同,测试写入和检查只能向前进行。
测试 10 [模 20,1 和 0]
使用 Modulo-X 算法应该可以发现由于缓存和缓冲干扰算法而无法通过移动反转检测到的错误。与测试一一样,数据模式仅使用 1 和 0。
测试 11 [位淡入淡出测试,90 分钟,2 种模式]
位衰减测试使用一种模式初始化所有内存,然后休眠 5 分钟。然后检查内存以查看是否有任何内存位发生变化。使用全 1 和全 0 模式。
由于坏扇区有时可能有效,有时无效,因此我建议让 MemTest 运行几次。完整的经过是已通过的完整测试系列。(上述测试系列 1-11)无错误通过的次数越多,MemTest 运行就越准确。我通常会运行 5 次左右以确保万无一失。
错误计数正常内存的值为 0。任何大于 0 的数字都可能表示有损坏/故障的扇区。
ECC 错误计数ECC
仅当设置为时才应考虑off
。ECC 代表纠错码内存,它是一种检测和纠正内存状态中错误位的机制。它可以与 RAID 或光学介质上的奇偶校验略有相似之处。这项技术非常昂贵,可能只会在服务器设置中遇到。ECC 计数计算内存的 ECC 机制纠正了多少错误。对于健康的 RAM,不应调用 ECC,因此 ECC 错误计数高于 0 也可能表示内存有问题。
错误解释
遇到错误的 Memtest 示例。它显示哪个扇区/地址发生故障。
第一列(血清睾酮) 显示哪个测试失败,数字对应于上面提到的列表中的测试编号。第二列 (经过)显示该测试有通过。在示例中,测试 7 没有通过。
第三列(失败地址) 准确显示内存的哪个部分有错误。此类部分有一个地址,很像 IP 地址,该地址对于该数据存储部分是唯一的。它显示哪个地址发生故障以及数据块有多大。(示例中为 0.8MB)
第四个 (好的) 和第五 (坏的) 列分别显示已写入的数据和已检索的数据。在无故障内存中,这两列应该相等(显然)。
第六列(错误位)显示发生故障的确切位的位置。
第七列(数数) 显示具有相同地址和故障位的连续错误的数量。
最后,最后,第七列(陈) 显示内存条所在的通道(如果系统使用多个通道)。
如果发现错误
如果 MemTest 发现任何错误,确定哪个模块出现故障的最佳方法请参阅这个超级用户问题及其接受的答案:
使用消除法 - 删除一半的模块并再次运行测试......
如果没有故障,则说明这两个模块没有问题,因此将它们放在一边并再次测试。
如果出现故障,则再次减少一半(现在减少到四个内存模块中的一个),然后再次测试。
但是,不要仅仅因为一个测试失败,就认为另一个没有失败(您可能有两个出现故障的内存模块)——如果您检测到两个内存模块出现故障,请随后分别测试这两个模块。
重要提示:由于内存交错等功能以及某些主板供应商提供的较差的内存模块插槽编号方案,很难知道给定的地址代表哪个模块。
答案2
测试编号:memtest 当前正在运行的具体测试的编号。有很多。
错误计数:遇到的内存错误数量
ECC 错误:ECC 纠正的错误数。您的芯片组/内存没有 ECC,因此这个数字无关紧要。
如果您的内存中的错误数量大于 0,那么您将需要更换它。
编辑:测试是 memtest 写入内存的不同模式。它将不同的模式写入内存并读回以检查错误,并使用不同的模式来测试所有位的所有状态。
该计数表示读回到 memtest 的结果与写入内存的结果不匹配的次数,表示正在测试的内存块存在错误。
ECC 是服务器和工作站内存芯片内置的纠错技术。大多数台式机不支持内置 ECC 的内存模块。几乎所有服务器/工作站都支持它,并且通常需要它。ECC 纠正的错误数是 ECC 芯片成功修复的错误数。
答案3
错误数量
在进行测试时,如果内存未能通过任何测试,它就会增加错误数。如果我没记错的话,它会计算未通过测试的地址数。
ECC 错误数
ECC 内存是一种特殊的内存芯片,用于防止数据损坏。您的ECC Errs
列计算了 ECC 修复了多少问题。
(ECC 速度慢且昂贵,基本上适用于不愿意更换 RAM 的关键任务系统。)
测试编号
Memtest 会对你的内存进行不同类型的测试,具体描述如下:Memtest86网站。下面是一个简单的英语翻译:
测试 0:行走地址测试
Memtest 会先写入00000001
第一个内存位置,00000010
再写入下一个,以此类推,每 8 个字节重复一次此模式。然后,它会读取内存并确保值没有改变。(来源)
测试 1&2:自己的地址地址测试
Memtest 将自己的地址写入每个内存位置,并检查该值是否改变。
测试 1 是顺序的,测试 2 是并行的(即使用并发)。
测试 3&4移动倒立测试
本质上,这个测试将 0 加载到内存中,然后
- 获取内存中的每个位置(从第一个/最低位置开始),
- 并写出模式的逆(我相信它是按位非,但我找不到有关它的任何文档)。
这里的目标是尝试测试每个位及其相邻位“0 和 1 的所有可能组合”。
测试 3 不使用并发,而测试 4 使用了并发。
测试 5:移动反转,8 位 Pat
这再次执行移动反转方法,但这次使用 8 位块中的测试 0 来移动 1。
测试 6:移动反转,随机模式
Memtest 使用随机数,而不是全 0 或随机 1。
测试 7:阻挡移动
这个很有趣。它将模式加载到内存中,以 4mb 为单位移动它们,然后验证它们。
测试 8:移动反转,32 位 Pat
与测试 5 相同,但使用 32 位块。该测试确实在每个位置加载了所有可能的 32 位值。
测试 9:随机数
这个程序将伪随机数加载到内存中并进行验证。伪随机数生成器的妙处在于它并不是非常随机(如果您曾经运行过printf("%d", rand());
没有种子的 C 程序并得到了非常随机的 41,您就会明白我的意思)。因此,它通过重置随机数种子程序并再次运行生成器来进行验证。
测试 10:Modulo-X
每 20 个位置,它会写入一个模式(全 0 或全 1)并在所有其他位置写入补码,然后进行验证。
测试 11:位淡入测试
这个程序将全 1(然后再次全 0)加载到 RAM,等待 5 分钟,然后查看是否有任何值发生变化。