gpt4 book ai didi

memory - 无 ECC 平台的软件内存位翻转检测

转载 作者:IT王子 更新时间:2023-10-28 23:29:23 30 4
gpt4 key购买 nike

大多数可用的桌面(廉价)x86 平台现在仍然不支持 ECC 内存 (Error Checking & Correction)。但内存位翻转错误率仍在增长(not the best SO threadLarge scale CERN 2007 study "Data integrity":“其内存模块的位错误率为 10-12 ...观察到的错误率为比预期低 4 个数量级”;2009 年 Google 的 "DRAM Errors in the Wild: A Large-Scale Field Study")。对于当前具有数据密集型负载(8 GB/s 读取)的硬件,这意味着可能每分钟(来自 CERN07 的 10-12 个供应商 BER)或两天一次(10< CERN07 的 sup>-16 BER)。 Google09 表示每 Mbit 最多可以有 25000-75000 位 FIT(每十亿小时的时间故障),这相当于 8GB RAM 每小时 1-5 位错误(“平均可纠正错误率每年每 GB 2000–6000")。

所以,我想知道,是否可以在系统范围内添加某种软件错误检测(检查用户和内核内存)。例如,为 Linux 内核和/或系统编译器创建一个补丁,为每个内存页面添加一些校验和,并尝试通过定期重新计算校验和来检测静默内存损坏(位翻转)?

例如,我们能否查看所有对内存的写入(来自用户和内核空间),以区分预期的内存更改和内存中的位翻转?或者我们可以通过一些帮助程序以某种方式检测所有代码吗?

我了解任何类型的软件内存 ECC 都可能会消耗大量性能并且不会捕获所有错误,但我认为尽早检测至少一些内存位翻转是有用的,然后它们将在以后被重用计算或存储到硬盘驱动器。

我也明白更好的数据保护方法是切换到 ECC 硬件,但大多数 PC 仍然是非 ECC。

最佳答案

问题是,与“软件 ECC 对策”相比,ECC 非常便宜。您可以轻松检测他们是否有 ECC 模块并在没有时提示(或打印警告)。

http://www.cyberciti.biz/faq/ecc-memory-modules/

For example, can we see all writes to memory (both from user and kernel space), to distinguish between intended memory changes from in-memory bit flips? Or can we somehow instrument all codes with some helper?

呃,你永远不会“看到”总线上的位翻转。它们实际上是由粒子撞击 RAM 引起的,稍微翻转一下。直到很久以后,您才能注意到您读出的内容与您写入的内容不同。要仅通过总线检测到这一点,您需要一份 all RAM 的副本(即创建一个影子副本)位于您的真实 RAM 中,因此您可以验证每次读取都返回写入该位置的内容。)

try to detect silent memory corruptions (bit-flips) by regular recomputing of checksums?

Redis 专家对用于测试 RAM 是否存在问题的算法写了一篇很好的文章。 http://antirez.com/news/43但这实际上是在寻找 RAM 错误,而不是随机位翻转。

如果“重新计算校验和”仅在您不写入内存时有效。这可能“足够好”,但您需要弄清楚哪些页面没有被写入。

要捕获 100% 的错误,每次写入之前都必须先计算该内存块的校验和,然后将其与记录的校验和进行比较(以确保该 block 在 RAM 中没有降级)。只有这样才能安全地进行写入然后更新校验和。正如你可以想象的那样,它的性能将是可怕的(至少慢 100 倍)。

I understand that any kind of software memory ECC may cost a lot of performance and will not catch all errors, but I think it can be useful to detect at least some memory bit-flips early, before they will be reused in later computations or stored to hard drive.

嗯,有一种简单的方法可以检测 100% 的错误,但会以 50% 的性能为代价:只需一次在 2 个盒子上运行计算(或者在两个不同时间在一个盒子上运行,可能需要进行 RAM 测试)如果您偏执,则介于两者之间。)如果结果不同,则说明您检测到错误。

另见:

https://www.linuxquestions.org/questions/linux-hardware-18/how-to-detect-ecc-memory-errors-under-linux-886011/

关于memory - 无 ECC 平台的软件内存位翻转检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23587591/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com