内存刷洗
内存刷洗(英語:)也可称内存擦洗、内存清洗,是指从每个電腦記憶體位置读取数据、以一种错误纠错码(ECC)纠正可能存在的位元错误,再将校正后的数据写回原位置。[1]
由于现代计算机内存芯片的高度集成,单个内存单元的结构已足够小到易于受到宇宙射线和/或阿尔法粒子的影响。由这些现象引发的错误被称为軟性錯誤,这对基于DRAM或SRAM的内存来说可能是个问题。在任何单个内存位元发生软错误的概率非常小。但是,配以现代计算机的庞大内存空间,加之长时间持续运行的如服务器,在已安装内存中发生软错误的概率可能比较显著。
纠错内存中的信息被冗余存储,以便能校正每个内存字(word)的单比特错误。也因如此,ECC内存可以支持对内存的刷洗。换句话说,如果内存控制器系统性扫描内存,则可以检测到单比特错误,并可以使用ECC校验和来确定出错的比特并将校正的数据写回内存。
概述
在同一个字(word)未发生多比特错误前周期性检查每个内存位置很重要,这是因为截至2008年,ECC内存模块还不能校正出现多比特的错误。
为了不干扰来自CPU的常规内存请求以及防止電腦性能下降,刷洗通常仅在空闲时进行。由于刷洗是由正常的读取和写入操作组成,它可能增加内存相较非刷洗操作时的功耗。因此,刷洗应该周期性但不是持续性进行。许多服务器可以在BIOS设置程序中配置刷洗周期。
普通的内存读取是由CPU或DMA设备发出和检查ECC错误,但由于数据局部性原因,它们可能被限制在小范围的地址空间内,并且保持位置、很长时间不被触碰。这些位置因而可能容易受到多个软错误的影响,而刷洗可确保在指定时间内检查整个内存。
在某些系统上,不止主内存(基于DRAM的内存)支持刷洗,有些CPU高速缓存(基于SRAM)也可以。在大多数系统上,两者都可以独立配置刷洗速率。因为缓存比主内存小得多,所以缓存的擦洗不需要频繁进行。
内存刷洗提高了可靠性,因此它可被归类为可靠性、可用性和可維護性(RAS)特性。
变种
它通常有两种变体,被称为巡逻刷洗(patrol scrubbing)与按需刷洗(demand scrubbing)。虽然它们本质上都执行内存刷洗及相关的错误纠正(如果可行),两者的主要区别是如何启动和执行。巡逻刷洗会在系统空闲时自动运行,而按需刷洗是在数据被主存储器实际请求时执行错误纠正。[2]
参考资料
- Ronald K. Burek.
- (PDF). Supermicro: 4-10. March 5, 2014 [February 22, 2015]. (原始内容存档 (PDF)于2019-11-09).