纠错内存
更正錯誤記憶體(英語:,縮寫:ECC memory或ECC)指能够实现错误检查和纠正错误技术的内存。
技术原理
在ECC技术出现之前,内存中应用最多的另外一种錯誤檢查技术,是奇偶校验位技術。
在数位电路中,最小的数据单位是“比特(bit)”,也叫“位元”。“比特”也是内存中的最小单位,它是通过“1”和“0”来表示数据高、低电頻信号。在数字电路中8个连续的比特是一字节,不带“奇偶校验”的内存中的每个字节只有8位,若它的某一位存储出了错误,就会使其中存储的相应数据发生改变而导致应用程序发生错误。
而带有“奇偶校验”的内存在每一字节(8位)外又额外增加了一位用来进行错误检测。比如一个字节中存储了某一数值(1、0、1、0、1、0、1、1),把这每一位相加起来(1+0+1+0+1+0+1+1=5)。对于偶校验,若其结果是奇数,校验位就定义为1,反之则为0;对于奇校验则相反。当CPU返回读取存储的数据时,它会再次相加前8位中存储的数据,计算结果是否与校验位相一致。当CPU发现二者不同时就会试图纠正这些错误。
但奇偶校验位技术有个缺点,当内存查到某个数据位有错误时,由于不一定能确定错误在哪一个位,也就不一定能修正错误。所以带有奇偶校验的内存的主要功能仅仅是“发现错误”,并不能纠正错误。
此外,奇偶校验技术是通过在原来数据位的基础上增加一个数据位来检查当前8位数据的正确性,但随着数据位的增加,用来检验的数据位也成倍增加,就是说当数据位为16位时它需要增加2位用于检查,当数据位为32位时则需增加4位,依此类推。特别是当数据量非常大时,数据出错的几率也就越大,对于只能纠正简单错误的奇偶检验的方法就显得力不从心了。正是基于这样一种情况,错误检查和纠正(Error Checking and Correcting)应运而生了。
ECC与奇偶校验不同的是,如果数据位是8位,则需要增加5位来进行ECC错误检查和纠正。数据位每增加一倍,ECC只增加一位检验位。也就是说当数据位为16位时ECC位为6位,32位时ECC位为7位,数据位为64位时ECC位为8位,依此类推。在内存中ECC能够容许错误,并可以将错误自动更正,使系统得以正常的操作,不致因错误而中断。
误解
部份人認為伺服器必須使用ECC内存,认为ECC内存效能較高,其实是一种謬誤。ECC内存之所以廣泛應用於伺服器領域,并非其效能,而是因为ECC內存的纠错能力,使伺服器保持稳定。
备注
截止到2020年8月9日,带ECC校验的内存还得要电脑其他部件支持才能正常使用,例如主板和CPU[1](并且可能要在BIOS中进行相应的设置),应用在大多数服务器CPU和主板上(一些非服务器CPU和主板也支持)。还有,在购买ECC内存时,需注意是ECC UDIMM、ECC RDIMM、ECC LRDIMM、ECC 3DS RDIMM还是其他,因為你的电脑其他部件可能不支持某些种类。
外部連結
- SoftECC: A System for Software Memory Integrity Checking (页面存档备份,存于)
- A Tunable, Software-based DRAM Error Detection and Correction Library for HPC (页面存档备份,存于)
- Detection and Correction of Silent Data Corruption for Large-Scale High-Performance Computing (页面存档备份,存于)
- Single-Bit Errors: A Memory Module Supplier’s perspective on cause, impact and detection (页面存档备份,存于)
- Intel Xeon Processor E3 - 1200 Product Family Memory Configuration Guide
- Linus Torvalds On The Importance Of ECC RAM, Calls Out Intel's "Bad Policies" Over ECC (页面存档备份,存于)