为什么我在非 ECC RAM 中看到零错误?

Ale*_*kin 4 motherboard memory ecc memory-error

根据消息来源,内存错误是一个非常可能的事件:

  • 有人说,只有 4 GB RAM 的计算机在运行 3 天内出现 DRAM 错误的概率为 95%,
  • 其他人表示, 32% 的服务器在一个月内至少遇到一次错误,其中 8% 的 DIMM 出现故障。

与这些恐怖相反,在我 10 多年的个人计算机使用中,我完全没有看到任何内存错误。

我承认我从来没有特别注意过这个话题。但是,我已经尝试memtest86了几次多小时的运行,也从未发现过错误。

IMO应该加剧内存问题的一些因素:

  • 我用最“大宗商品”的部件来制造我的电脑:主流预算主板和最便宜的内存。
  • 此外,我通常最大限度地利用可用技术,例如在 32 位操作系统时代,我使用 4 GB 的 RAM,而对于当前的桌面 CPU 和较新的 64 位操作系统,我使用 32 GB 的 RAM。
  • 内存使用量适中,许多虚拟机 24/7/365 运行大小任务。

但是,没有发现与内存相关的问题!

怎么样?

Syn*_*ech 10

布莱格!

该死,我试图把它塞进评论中,但格式不够,所以我不得不求助于把它放在一个答案中。

统计数据

你没有看到的原因是你看到它的几率很低,更重要的是你没有看到。您注意到记忆错误的几率是根据以下几率计算得出的:

  • 宇宙射线撞击地球
  • 光线击中您的位置
  • 光线不会被其他任何东西阻挡或吸收
  • 光线击中你的电脑
  • 光线击中你的内存
  • 光线在 RAM 中稍微翻转
  • 该位在当前分配的内存块中
  • 使用的内存是:
    • 通过像memtest86+这样的程序测试
      • 在正确的时刻进行测试以检测错误(例如,在程序写入内存然后读回并比较的微秒之间)
    • 分配给一个可执行代码块,在这种情况下还:
      • 更改的位显着修改了代码,足以对代码产生巨大影响
      • 剧烈的影响导致它崩溃
      • 崩溃的程序实际上崩溃了,而不是简单地消失
      • 该程序是您注意到并关心的东西
      • 你不会简单地把它当作有缺陷的程序丢弃

当然,如果我们谈论的是瞬态的、间歇性的错误,比如宇宙射线和其他电子设备的干扰。如果 RAM 模块实际上有缺陷,那么您几乎肯定会在某个时候看到问题(尽管如此,可以想象的是,如果您从未在任何给定时间用完所有物理 RAM 并且缺陷恰好很小并且完全局部化在您从未使用过的部分中,那么您可能看不到错误)。

暂时性错误的几率确实会高得惊人,但您可能已经看到了多年的内存错误,并且只是因为上面列出的两个项目而没有注意到它们:可执行代码和错误忽略。

例子

如果更改的位恰好落在一条数据中,那么您甚至可能不会注意到它,因为它很容易被淹没。

例如,如果在文本数据块中翻转了一个位,那么您可能会注意到它The end.变成了Tje end.,而不是注意到h已被 a 替换,j因为有一个位被翻转了(如果您愿意,请随时确认) ,您更有可能只是假设您的手指按错了键,因为它们碰巧彼此相邻并且只是修复了错误。

更糟糕的是,如果翻转的位恰好是图片、音频或视频文件的一部分,您可能根本不会注意到任何东西。如果它恰好在正确的位置,那么它可能会导致明显的变化,例如图片的宽度或高度错误,或者歌曲中有轻微的爆裂声或视频中的一些损坏导致瞬间阻塞在解码过程中。然而,考虑到媒体文件的庞大规模,一个比特位于正确位置的可能性极低。更有可能的是,它会稍微改变单个像素的颜色(例如,从深红色变为稍微深一点的红色)并且您可能永远不会注意到。它可能会改变歌曲波形的单个峰值,使其幅度略低,您可能永远不会注意到。注意到。

警告

可怕的事实是,这种未被发现的瞬态错误确实会悄悄潜入并被忽视。这就是为什么我一直非常关心使用闪存介质进行备份的原因,因为有时它们会损坏,如果您没有注意到,那么损坏可能会潜入您的备份并最终永久化。此外,由于预期会发生更改,因此测试损坏可能很困难,因此您必须手动检查每个更改,这对于二进制文件来说将是一场噩梦。

带走

我想好的一面是,如果有的话,正如我在列表中所说的那样,更改必须发生在真正重要的数据部分。对于大多数人来说,它落在要保存的重要的、不可替代的数据中的几率往往非常低。

您可以使用像 memtest 这样的程序来检查您的 RAM 是否存在缺陷。如果它通过集合,那么您只需要担心一些重要数据被损坏的“十亿分之一的机会”(如果需要,我会将确切的计算留给其他人),否则有点在这里或那里的“位腐烂”通常不会做太多,除了可能会导致程序崩溃并导致您对开发人员发誓(尽管如此,如果它不再这样做......)