【发布时间】:2014-06-28 13:12:02
【问题描述】:
大多数可用的桌面(廉价)x86 平台现在仍然不支持 ECC 内存 (Error Checking & Correction)。但是内存位翻转错误率仍在增长(not the best SO thread,Large 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-16 BER)。 Google09 表示每 Mbit 最多可以有 25000-75000 位 FIT(每十亿小时的时间故障),这相当于 8GB RAM 每小时 1-5 位错误(“平均可纠正错误率每年每 GB 2000–6000")。
所以,我想知道,是否可以在系统范围内添加某种软件错误检测(检查用户和内核内存)。例如,为 Linux 内核和/或系统编译器创建一个补丁,为每个内存页面添加一些校验和,并尝试通过定期重新计算校验和来检测静默内存损坏(位翻转)?
例如,我们能否查看所有对内存的写入(来自用户和内核空间),以区分预期的内存更改和内存中的位翻转?或者我们可以通过一些帮助程序以某种方式检测所有代码吗?
我了解任何类型的软件内存 ECC 可能会消耗大量性能并且不会捕获所有错误,但我认为尽早检测至少一些内存位翻转是有用的,然后它们将在以后被重用计算或存储到硬盘驱动器。
我也明白更好的数据保护方法是切换到 ECC 硬件,但大多数 PC 仍然是非 ECC。
【问题讨论】:
-
一些链接:2005 "SoftECC: A System for Software Memory Integrity Checking" by Dave Dopson, Libsdc 2011 "A Tunable, Software-based DRAM Error Detection and Correction Library for HPC", RedMPI 2012 "Detection and correction of silent data corruption for large-scale high-performance computing" (redmpi.com) 和其他论文来自来自 NCSU 的 David Fiala (fiala.me)
-
另外,Derek Jones,The Shape of Code 博文:Compiling to reduce the impact of soft errors on program output (2011) 和 Source code will soon need to be radiation hardened (2014)
标签: memory linux-kernel error-detection