EHWPOISON(133)错误代码会造成永久性损坏吗?

EHWPOISON(133)错误代码会造成永久性损坏吗?

最近,在运行 Ubuntu 16.04 的 AAEON UPcore 上测试一些软件时,我遇到了退出代码 133 EHWPOISON。我以前从未听说过它,经过一番研究后,我找到了这个页面:

https://www.kernel.org/doc/html/latest/vm/hwpoison.html

这似乎意味着每次我看到退出代码时,一页内存就被标记为“中毒”,并且操作系统将来将不再使用该页面。

这是永久性的吗?如果是,有什么方法可以让我查看有多少内存被污染了?

答案1

我不认为你的代码 133 意味着 EHWPOISON。程序可以通过调用 exit 函数并以所需代码作为参数来返回它想要的任何代码。有些程序可能会将它们收到的最后一个 errno 作为退出代码传递。我认为你的 133 意味着其他东西。我编写的任何程序都会打印 errno 的错误消息,然后全部以错误代码 -1(或 254)退出。但是任何程序都可以随心所欲。我甚至看到其中一些使用退出代码传递状态来与其他程序通信。例如 0 表示一切正常 1 表示重试等等...

关于您的 EHWPOISON,我以前从未见过该信号,而且我以前也曾有过损坏的 RAM。内核如何知道映射到其的页面的物理内存已损坏?唯一的方法是硬件告诉内核“哦,伙计,那部分内存坏了,不要使用它”,普通的 DDD2/3/4... RAM 物理上无法做到这一点。然而,ECC Ram 具有一些硬件功能,有时可以纠正错误,或者至少在发生错误时检测到它们。我个人只见过 ecc ram 用于无论如何都必须全年 365 天全天候运行的系统。这通常是非常特定的企业硬件,普通的台式电脑/笔记本电脑/手机/soc 不会有 ecc ram。唯一的其他方法(我能想到的)是,如果操作系统使用 CPU 中的缓存并以某种方式检测到 RAM 中的内容没有意义。然而,我并不是这方面的专家,但我认为,除非操作系统主动进行健全性检查,将缓存与主内存进行比较,否则系统不太可能检测到主内存的特定部分已损坏。我不希望在用户模式下运行程序时发生此类健全性检查,因为那只会浪费 CPU 时间。我可能错了,但我认为这种可能性很小。

假设您的硬件坏了,而您的操作系统奇迹般地检测到了它。此时我预计您的系统会变得不稳定,可能是内核崩溃。(由于这个原因,我在使用 Windows 时遇到过很多 BSOD)我唯一一次在 Linux 系统上遇到内存损坏时,系统表现如下。它会在使用过程中随机停止。(冻结或黑屏)。有时它无法启动。我认为主内存损坏的系统无法稳定运行超过 15-30 分钟。

是的,硬件损坏是永久性的。即使只有一个字节的 RAM 损坏,也要更换该 RAM。就你的情况而言,如果你的总体系统看起来不稳定,那么我认为很有可能是你的程序希望通过代码 133 告诉你一些其他的事情。如果你想要安心,只需运行 memtest 一整晚,如果它没有检测到任何错误,那么你就没事了。

相关内容