单位内存错误会对 Linux 产生什么影响?

单位内存错误会对 Linux 产生什么影响?

我正在重建一台三年前的 AMD Athlon 5000 系统,它有一个“ASRock NF7G-FullHD”主板,有 4 个内存插槽,标记为“DDR2 800”,据说总 RAM 容量为 8GB。除了 550W PS 和 500GB 磁盘外,我还买了一对“匹配的”2 个 2GB DIMM不幸的是,它在几个位置上持续存在单比特错误(见图)。

在具有如此内存的系统上运行 Linux 会产生什么效果? IE,不稳定、未检测到的错误或性能低下的可能性有多大?是否会出现操作系统崩溃、段错误、各种应用程序故障等?有没有办法映射或禁用坏的 RAM 块?

memtest86 图片

请注意,4 个内存插槽标记为 DDRII_1、2、3、4;1 和 2 为黄色,3 和 4 为橙色。上面的 Memtest86 图片是在插槽按(新、旧、新、旧)顺序填充时拍摄的。错误也发生在填充顺序为(旧、旧、新、新)的类似地址上,内存访问速率(约 2.9GB/s)与图片中相同。填充(旧、旧、-、-)或(旧、-、旧、-)或(新、-、新、-)时,经过几个小时的测试没有出现错误,但(新、新、-、-)由于某种原因无法进入或通过 BIOS,重置按钮似乎没有效果,也没有视频信号。填充 3 个插槽后,例如(new1、old、new0、-)在 1.5 小时的测试中出现一个错误(位于 RAM 的第一个 GB 中);使用(old、old、new0、-)时,在 2 小时的测试中没有出现任何错误。6GB 配置的性能问题是内存访问率仅为 1.7GB/秒。

问题摘要:如果内存中存在一些单比特错误,在此系统上运行 Linux 会产生什么影响?除了更换 RAM 之外,还有其他解决方法吗?

答案1

  1. 由于双通道内存总是成对安装,因此只有 3 个芯片,内存访问率较低。

  2. 单比特错误几乎可以导致所有事情发生。发生的可能性取决于你的内存有多糟糕,但冒这个险并不是一个好主意。你应该希望系统不稳定。你也可以将系统关键文件(或任何其他对你来说很重要的文件)存储在内存的这一部分,修改它并覆盖原始文件。因此,一个单比特错误可能会搞乱你的整个操作系统。

  3. 有可能只有一个内存条有问题(可能是新的1)。PYG 的内存条提供终身保修,因此您可以尝试购买一条能用的内存条。我听说过 PYG 的内存条和客户服务非常糟糕,但我不能确定。

答案2

如上所述,单个位内存错误可能会导致几乎任何事情出错,或者您可能根本不会注意到它。

我以前有过一个坏的内存条,内存中的坏点实际上意味着 Windows 有时可以工作,但它会经常损坏自身。你永远无法预测系统中任何给定的 RAM 位置会分配什么(由于操作系统分配内存的方式),虽然你可能很幸运,只会破坏一些不重要的程序或损坏一个图形,但很有可能它会做得更糟,使用坏的 RAM 会危及你的数据。

Linux 支持坏内存如果我没记错的话,这意味着你可以“映射”坏的内存块。不过,我无法确定它是否支持最新的内核,看看它对你是否有用。

我的建议是:短期内要做好数据丢失和一般系统不稳定的准备,从长远来看,你应该找出哪根内存条有故障并更换它。

答案3

为了能够运行程序,计算机需要从内存中获取有关执行操作的指令。(程序加载到内存中)。指令只是数字序列,是计算机语言。

让我们构建一个简单的语言,其中 1 = 复制,3 = 来自,4 = 到

1(复印),50,3(来自),100,4(发送),200;

因此数字序列 1,50,3,100,4,200 对于计算机来说可能意味着将 50 字节的数据从内存位置 100 复制到内存位置 200。这与将 50 只袜子从一个抽屉移动到另一个抽屉是一样的。

现在,如果内存出现故障,并且出现单比特错误,数字可能会从 1 变为 129。因此,假设上述序列中的任何数字都可能发生变化,则可能会出现许多有趣的错误。如果 50 更改为 35 或 188 或其他数字,则很容易理解要复制的数据量将是错误的,并且可能会覆盖内存中的其他数据(可能是指令)。如果 1 更改为 5,计算机甚至可能不明白它应该复制任何东西。因此,正如所证明的那样,单比特错误不仅可能导致单个故障,还可能导致由第一个错误引起的其他错误。

Linux(或任何其他操作系统)与计算机上运行的其他程序基本相同:一系列数字,告诉计算机该做什么。如果此序列损坏,您的程序将无法使计算机执行其预期的操作,因此您可能会遇到各种问题。

还要记住,音乐、视频或图片也只是一串数字,因此同样的原则也适用于它们。值得补充的是,根据您的文件,损坏可能不明显(例如图片中的坏像素),但这并不意味着文件没有问题。如果特定字符存储在错误的内存位置,您在网页上阅读的文本中甚至可能存在拼写错误。

存在专门设计用于恢复单比特错误并可检测双比特错误(ECC RAM)的 RAM 芯片。

希望这能解释为什么任何操作系统在包含其数据和/或指令的内存损坏时都无法工作。解决这个问题最安全的方法是更换损坏的内存。同时,您可能希望使用 memmap 内核参数映射出坏内存区域(以下内容是从我在另一个问题上得到的答案中复制而来的)。

 memmap=nn[KMG]$ss[KMG]
            [KNL,ACPI] Mark specific memory as reserved.
            Region of memory to be used, from ss to ss+nn.
            Example: Exclude memory from 0x18690000-0x1869ffff
                     memmap=64K$0x18690000
                     or
                     memmap=0x10000$0x18690000

答案4

如今的存储器(比如至少 10 年前的存储器)应该都内置了纠错功能。如果纠错功能经常失效,那么非常是错误的,随时可能引发灾难性的失败。

尽快更换故障的 RAM。

相关内容