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