随着这些年的科技的加速发展石头是越来越猛,固态硬盘这种产品现在也几乎成为了每一台电脑必备的硬件之一。上到七八十岁的老大爷,下到十几岁的小姑娘都已经知道固态硬盘可以对电脑带来什么好的结果。
至于过程似乎并没有多少人愿意去关注,今天虫子君跟大伙一起聊聊关于固态硬盘当中的“ECC”模块。
ECC是“Error Correcting Code”的简写,ECC是一种能够实现“错误检查和纠正”的技术,ECC内存就是应用了这种技术的内存,一般多应用在服务器及图形工作站上,可提高计算机运行的稳定性和增加可靠性。
提起ECC现在已经成为了固态硬盘的标配,曾几何时这可是一种相对高大上的技术,是应用于内存条当中的一种技术,用来提升图形界面的处理能力的一种方法。
当前SSD内最普遍使用的ECC码是BCH码(一类重要的纠错码)。当数据写入的时候,控制器内部的ECC模块计算数据并生成ECC签名,一般来说这个步骤非常的快,因此并不会影响到整个SSD太多的性能表现。ECC的签名一般来说都保存在NAND页后部的SA区域,当数据从NAND读取的时候ECC模块回去读取ECC签名,并对照相同与否来发现出现的错误。
技术构成
计算机的操作指令才可以继续执行。当然在纠错时系统的性能有着明显降低,不过这种纠错对服务器等应用而言是十分重要的。要了解ECC技术,就不能不提到Parity(奇偶校验)。
在ECC技术出现之前,内存中应用最多的是另外一种技术,就是Parity(奇偶校验)。我们知道,在数字电路中,最小的数据单位就是叫“比特(bit)”,也叫数据“位”,“比特”也是内存中的最小单位,它是通过“1”和“0”来表示数据高、低电平信号的。
在数字电路中8个连续的比特是一个字节(byte),在内存中不带“奇偶校验”的内存中的每个字节只有8位,若它的某一位存储出了错误,就会使其中存储的相应数据发生改变而导致应用程序发生错误。而带有“奇偶校验”的内存在每一字节(8位)外又额外增加了一位用来进行错误检测。
比如一个字节中存储了某一数值(1、0、1、0、1、0、1、1),把这每一位相加起来(1+0+1+0+1+0+1+1=5)。若其结果是奇数,对于偶校验,校验位就定义为1,反之则为0;对于奇校验,则相反。当CPU返回读取存储的数据时,它会再次相加前8位中存储的数据,计算结果是否与校验位相一致。
当CPU发现二者不同时就作出试图纠正这些错误,但Parity有个缺点,当内存查到某个数据位有错误时,却并不一定能确定在哪一个位,也就不一定能修正错误,所以带有奇偶校验的内存的主要功能仅仅是“发现错误”,并能纠正部分简单的错误。
工作原理
ECC(Error Correct Code,纠错码)是在原来的数据位上外加位来实现的,增加的位用来重建错误数据。在ECC纠错体系中,如果数据为n个字节,则外加的ECC位为log2n + 5。例如对于64位数据,需要外加log28 + 5 = 8个ECC位。
当出现一个存储位错误时,ECC体系可以自动进行纠错。当出现2个数据位错误时,可以检测出来,但不能纠错,这种行为通常称作“单错纠正/双错检测(Single Error Correction/Double Error Detection ,简称SEC/DED)。
一次存取中有2个以上的数据位出错时,由于SEC/DED体系检测不出来了,致使数据的完整性受损。采用这种结构的存储器,当检测出多位错误时,系统就会报告出现了致命故障(Fatal fault),之后系统崩溃
最后想说的;
虽然对于现在固态硬盘使用ECC信号纠正技术,已经是常态,但是对于一些国内的产品来说,到底是否有使用这个技术还不得而知。再一个由于数字信号纠错这种技术,并非几句话就能够说得明白,所以最好利用测试软件测试一下。
还有就是一些国产的固态硬盘,使用相对体质较差的芯片,以及工艺的不成熟,也容易导致一些问题的发生。
原创文章,作者:大柱,如若转载,请注明出处:固态硬盘当中的ECC 纠错是什么意思