大多数可用的桌面(廉价)x86 平台现在仍然没有 ECC 内存支持(错误检查和纠正)。但是内存位翻转错误率仍在增长(不是最好的 SO 线程,大规模 CERN 2007 研究“数据完整性”:“他们的内存模块的位错误率为 10 -12 ...观察到的错误率为 4 个订单数量级低于预期”;2009 年 Google 的“野外 DRAM 错误:大规模现场研究”)。对于当前具有数据密集型负载(8 GB/s 读取)的硬件,这意味着可能每分钟发生一次位翻转(来自 CERN07 的 10 -12个供应商 BER)或两天一次(10 -16BER 来自 CERN07)。Google09 表示,每 Mbit 最多可以有 25000-75000 位 FIT(每十亿小时的时间故障),这相当于 8GB RAM 每小时 1-5 位错误(“平均可纠正错误率为 2000–每年每 GB 6000 ")。
所以,我想知道,是否可以在系统范围内添加某种软件错误检测(检查用户和内核内存)。例如,为 Linux 内核和/或系统编译器创建一个补丁,为每个内存页面添加一些校验和,并尝试通过定期重新计算校验和来检测静默内存损坏(位翻转)?
例如,我们能否看到所有对内存的写入(来自用户和内核空间),以区分预期的内存更改和内存中的位翻转?或者我们可以以某种方式使用一些助手来检测所有代码吗?
我知道任何类型的软件内存 ECC 可能会消耗大量性能并且不会捕获所有错误,但我认为在它们将在以后的计算中重用或存储之前尽早检测到至少一些内存位翻转可能很有用到硬盘。
我也明白更好的数据保护方法是切换到 ECC 硬件,但大多数 PC 仍然是非 ECC。