如何解释 memtest 运行的统计数据?

slh*_*hck 68 memory memtest86+

我这里有一个笔记本,我怀疑它的内存模块有问题。因此,我下载了Memtest86+并让它运行。

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

内存测试

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

特别是,什么

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

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

Pyl*_*lsa 88

TL; 博士

首先是最重要的数字:健康内存的错误计数应该是 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
Run Code Online (Sandbox Code Playgroud)

数据/测试说明

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 [地址测试,行走的,无缓存]

使用步行地址模式测试所有存储库中的所有地址位。

测试一【地址测试,自己的地址,顺序】

每个地址都写有自己的地址,然后检查一致性。理论上,以前的测试应该已经发现任何内存寻址问题。此测试应捕获以前未检测到的任何寻址错误。该测试对每个可用的 CPU 依次进行。

测试二【地址测试,自有地址,并口】

与测试 1 相同,但测试是使用所有 CPU 并使用重叠地址并行完成的。

测试 3 [移动反转、1 和 0、顺序]

此测试使用具有全 1 和 0 模式的移动反转算法。即使缓存在某种程度上干扰了测试算法,它也已启用。启用缓存后,此测试不会花费很长时间,并且应该可以快速找到所有“硬”错误和一些更细微的错误。这个测试只是一个快速检查。该测试对每个可用的 CPU 依次进行。

测试 4 [移动反转、1&0、平行]

与测试 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 位拍]

这是移动反转算法的一种变体,它为每个连续地址将数据模式左移一位。每次通过时,起始位位置左移。要使用所有可能的数据模式,需要 32 次传递。该测试在检测数据敏感错误方面非常有效,但执行时间很长。

测试9【随机数序列】

此测试将一系列随机数写入内存。通过重置随机数的种子,可以创建相同的数字序列以供参考。检查初始模式,然后补充并在下一次通过时再次检查。但是,与移动反转不同的是,测试写入和检查只能在正向上进行。

测试 10 [模 20,一个和零]

使用 Modulo-X 算法应该可以发现由于缓存和缓冲对算法的干扰而无法通过移动反转检测到的错误。与测试一一样,数据模式仅使用 1 和 0。

测试 11 [位衰落测试,90 分钟,2 个模式]

位衰落测试用一个模式初始化所有内存,然后休眠 5 分钟。然后检查内存以查看是否有任何内存位发生了变化。使用全 1 和全零模式。

因为坏道有时可能会起作用,而在其他时候可能不起作用,我建议让 MemTest 运行几次。完整通过是已通过的完整测试系列。(以上测试系列 1-11)无错误通过的次数越多,您的 MemTest 运行就越准确。我通常会跑 5 次左右。

健康内存的错误计数应为 0。任何大于 0 的数字都可能表示损坏/故障扇区。

ECC 错误计数仅应在ECC设置为时考虑off。ECC 代表纠错码内存,它是一种检测和纠正内存状态中错误位的机制。它可以与在 RAID 或光学介质上进行的奇偶校验略有比较。这项技术非常昂贵,可能只会在服务器设置中遇到。ECC 计数计算内存的 ECC 机制纠正了多少错误。不应该为健康的 RAM 调用 ECC,因此 ECC 错误计数高于 0 也可能表示内存错误。


错误说明

遇到错误的 Memtest 示例。它显示哪个扇区/地址出现故障。

有错误的 Memtest 屏幕

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

第三列(Failing Address)准确显示了内存的哪一部分有错误。这样的部分有一个地址,很像 IP 地址,对于那块数据存储来说是唯一的。它显示了哪个地址失败以及数据块有多大。(示例中为 0.8MB)

第四列(Good)和第五列(Bad)分别显示写入的数据和检索的数据。两列在非故障内存中应该相等(显然)。

第六列 ( Err-Bits ) 显示了失败的确切位的位置。

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

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


如果发现错误

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

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

如果没有失败,那么你就知道这两个模块是好的,所以把它们放在一边重新测试。

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

但是,仅仅因为一个测试失败,不要假设另一个没有失败(您可能有两个失败的内存模块)——如果您检测到两个内存模块出现故障,请在之后分别测试这两个模块中的每一个.

重要提示:由于内存交错和某些主板供应商提供的内存模块插槽编号方案较差,因此很难知道给定地址代表哪个模块。

  • 十六进制地址后以 MB 为单位的数字不是错误的大小,而是以 MB 为单位的错误位置。我很确定任何一个错误的大小总是一个字,因为这是它写入内存的大小。 (3认同)

Eli*_*Eli 7

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

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

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

如果您的内存有任意数量的 0 以上的错误,您将需要更换它。

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

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

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


dig*_*txp 6

错误数

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

ECC 错误数

ECC 内存是一种特殊的内存芯片,用于防止数据损坏。您的ECC Errs列计算了 ECC 修复了多少问题。

(ECC 速度慢且成本高,基本上适用于不需要更换 RAM 的关键任务系统。)

测试编号

Memtest 对您的记忆进行不同类型的测试,这些测试在Memtest86网站上有所描述。就像简单的英语翻译一样:

测试 0:步行地址测试

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

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

Memtest 使用自己的地址写入每个内存位置,并检查该值是否未更改。

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

测试 3&4移动倒置测试

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

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

这里的目标是尝试测试每一位及其相邻位“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 分钟,然后查看是否有任何值发生变化。