如何解释记忆测试的统计信息?


63

我在这里有一个笔记本,怀疑内存模块有故障。因此,我下载了Memtest86 +并使其运行。

请注意,屏幕截图不是我的实际截图,它是由memtest86 +提供的

记忆测试

如何解释屏幕上的数字?我已经让它运行了大约四个小时,现在我通过了第七遍。

特别是什么

  • 测试编号
  • 错误计数
  • ECC错误计数

表明?什么是内存错误的合理值?我应该在什么时候考虑更换内存?


3
您是否要继续使用内存而出现任何错误?
丹尼尔·贝克

4
只有一个建议:)。不要忽略memtest中的错误。RAM中只有一个小错误可能会破坏整个操作系统并导致数据丢失。
Rufo El Magufo 2011年

2
通常,如果您没有看到大的红色闪烁区域,则表示一切都很好:-)
上校

5
如果错误被局限在一个特定的区域在内存中,你运行的是Linux,你可以告诉内核忽视这些领域在此指定:gquigs.blogspot.com/2009/01/bad-memory-howto.html如果您在运行Windows时,错误不在一致的区域中,或者错误太多,应该获取新的RAM。
2011年

4
另外,如果记忆棒开始出现故障,则可能会有越来越多的区域出现故障。与重复搜索数据损坏和系统崩溃问题的开销相比,内存便宜。
Zds 2011年

Answers:


82

TL; DR

最重要的数字在前:健康记忆的错误计数应为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算法应该发现由于算法的缓存和缓冲干扰而无法通过移动反演检测到的错误。与测试一样,数据模式仅使用一和零。

测试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示例。它显示哪个扇区/地址发生故障。

Memtest屏幕出现错误

第一列(Tst)显示哪个测试失败,该编号对应于上面已经提到的列表中的测试编号。第二列(通过)显示该测试是否通过。在该示例的情况下,测试7没有通过。

第三列(失败地址)准确显示了内存的哪一部分有错误。该部分具有一个地址,非常类似于IP地址,该地址对于该数据存储段是唯一的。它显示了哪个地址失败以及数据块的大小。(示例中为0.8MB)

第四列(良好)和第五列(不良)分别显示了写入的数据和检索到的数据。这两列在无故障内存中应该相等(很明显)。

第六列(Err-Bits)显示发生故障的确切位的位置。

第七列(Count)显示具有相同地址和失败位的连续错误数。

最后,最后第七列(Chan)显示内存条所在的通道(如果系统上使用了多个通道)。


如果发现错误

如果MemTest发现任何错误,则此超级用户问题及其公认的答案将涵盖确定哪个模块有故障的最佳方法:

使用消除的过程-移除一半的模块并再次运行测试...

如果没有故障,那么您就知道这两个模块是好的,请将它们放在一边并再次进行测试。

如果出现故障,请再次减少一半(现在减少至四个内存模块之一),然后再次进行测试。

但是,仅因为一个测试失败,就不要假设另一个测试也没有失败(您可能有两个发生故障的内存模块)-在您检测到两个内存模块发生故障的情况下,请分别测试这两个内存模块。

重要说明:由于某些功能,例如某些主板供应商的内存交错和不良的内存模块插槽编号方案,可能很难知道给定地址代表哪个模块。


感谢您的解释!您能否回答如何找出与错误相对应的确切RAM模块?我的失败地址等于000c34e98dc - 3124.9MB。为什么会有这么大的块大小?我的PC中有2x1Gb和2x2Gb模块。如何找到导致故障的原因?
Mikhail 2013年

我@Mikhail想请您看看这个问题,其接受的答案:superuser.com/questions/253875/...
BloodPhilia

0错误并不表示RAM有问题,我遇到过RAM记忆棒以100%的分数通过memtest的情况,只有更换它,我才能解决一个棘手的问题。
那位巴西佬

3
十六进制地址后的MB数不是错误的大小,而是错误的位置(MB)。我很确定任何一个错误的大小总是一个字,因为这就是它写入内存的大小。
杰里德(Jarryd)2013年

6

错误数

在进行测试时,如果任何测试的内存均失败,则会增加错误数量。如果我没记错的话,它会计算未通过测试的地址数。

ECC错误数

ECC内存是一种特殊的存储芯片,用于防止数据损坏。您的ECC Errs专栏将统计ECC解决了多少问题。

(ECC速度慢且价格昂贵,并且基本上适用于关键任务系统,这些系统不必费心将RAM换出。)

测试编号

Memtest对您的内存执行各种测试,这些测试在Memtest86网站上进行了介绍。就像一个快速的普通英语翻译:

测试0:步行者地址测试

Memtest将00000001在第一个内存位置中写入,00000010在下一个内存位置中进行写入,依此类推,每8个字节重复一次此模式。然后,它读取内存并确保该值没有更改。(来源

测试1和2:自己的地址地址测试

Memtest用其自己的地址写入每个内存位置,并检查该值是否不变。

测试1是顺序的,测试2是并行的(即,使用并发性)。

测试3&4 移动反演测试

本质上,此测试将0加载到内存中,然后

  1. 获取内存的每个位置(从第一个/最低位置开始),
  2. 并写出该模式的逆序(我相信这不是一个按位的NOT,但是我找不到关于它的任何文档)。

这里的目标是尝试测试每个位及其相邻位“ 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:位淡入测试

这个加载RAM全为1(再次全为0),等待5分钟,然后看是否有任何值改变。


6

测试编号:memtest当前正在运行的特定测试的编号。有很多。

错误计数:遇到的内存错误数

ECC错误:ECC纠正的错误数。您的芯片组/内存没有ECC,因此此数字无关紧要。

如果您的内存中的错误数量大于0,那么您将要替换它。

编辑:测试是memtest写入内存的不同模式。它将不同的模式写入内存,然后将其读回以检查错误,并且使用不同的模式来测试所有位的所有状态。

计数表示结果读回memtest的次数与写入内存的次数不匹配的次数,表示正在测试的内存块中有错误。

ECC是一种内置于服务器和工作站内存芯片中的纠错技术。大多数dekstop不支持内置ECC的内存模块。几乎所有服务器/工作站都支持它,并且通常需要它。ECC纠正的错误数是ECC芯片成功修复的错误数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.