注意: 此答案与物理无关,而是与非ECC内存模块有关的静默内存错误。有些错误可能来自外部空间,有些则来自桌面的内部空间。
对大型服务器场(例如CERN群集和Google数据中心)上的ECC内存故障进行了多项研究。具有ECC的服务器级硬件可以检测和纠正所有单位错误,并且可以检测许多多位错误。
我们可以假设存在许多非ECC台式机(和非ECC移动智能手机)。如果我们检查文件中可纠正ECC的错误率(单个位翻转),则可以知道非ECC存储器上的静默存储器损坏率。
CERN 2007大规模研究“数据完整性”:供应商宣称“ 其内存模块的误码率10 -12 ”,“ 观察到的误码率比预期的低4个数量级 ”。对于数据密集型任务(8 GB / s的内存读取),这意味着每分钟(10 -12个供应商BER)或两天一次(10 -16 BER)可能发生单位翻转。
2009年Google的论文“狂野的DRAM错误:大规模现场研究”指出,每Mbit最多可以有25000-75000个1位FIT(每十亿小时的时间故障),相当于1-5位经过我的计算,每小时出现8GB RAM的每小时错误。论文也这么说:“ 平均可纠正错误率是每年每GB 2000–6000 ”。
2012年桑迪亚报告“大规模高性能计算的静默数据损坏的检测和纠正”:“不太可能出现双位翻转”,但是在ORNL密集的Cray XT5中,它们“每天有75,000个以上DIMM的速度”与ECC。而且单位错误应该更高。
因此,如果程序具有大数据集(几个GB),或者具有很高的内存读写速率(GB / s或更高),并且运行了几个小时,那么我们可以预期台式机硬件上最多会出现几次静默翻转。memtest无法检测到此速率,并且DRAM模块良好。
长集群可以在数千台非ECC PC上运行,例如BOINC互联网范围内的网格计算将始终会由于内存位翻转以及磁盘和网络静默错误而产生错误。
对于更大的机器(上万台服务器),即使具有ECC保护免受单个位错误的影响,正如我们在Sandia 2012年的报告中所看到的那样,每天可能会有双位翻转,因此您将没有机会运行全尺寸并行程序运行几天(没有常规检查点,并在出现两次错误的情况下从上一个好的检查点重新启动)。大型计算机还将在其缓存和cpu寄存器(例如架构和内部芯片的触发器,例如在ALU数据路径中)中发生位翻转,因为并非所有计算机都受ECC保护。
PS:如果DRAM模块坏了,情况会更糟。例如,我在笔记本电脑中安装了新的DRAM,笔记本电脑几周后就死了。它开始产生大量内存错误。我得到的是:笔记本电脑挂起,linux重新启动,运行fsck,在根文件系统上发现错误,并说它想在纠正错误后重新启动。但是在每次重新启动时(我大约执行了5-6次),在根文件系统上仍然发现错误。