闪存技术对大家来说,已经不是什么新鲜技术。但每个技术从出现到广泛应用,都需很长的时间跟现有技术进行博弈,最终通过实践才能深得用户的认可。闪存就是一个典型的例子。用户在欣喜闪存高性能的同时,也对可靠性、擦写次数和故障率等问题充满担忧。所以,笔者觉得非常有必要通过以下几点,谈谈闪存这方面的问题,缓解大家的疑虑和担忧。
闪存介质为什么会有擦写寿命的限制?
闪存介质中,保存数据的基本单元被称为Cell。每个Cell通过注入、释放电子来记录不同的数据。电子在Cell中进出,会对Cell产生磨损;随着磨损程度的增加,Cell中的电子出现逃逸的概率会不断增加,进而导致Cell所保存的数据出现跳变。(举个例子,某个Cell最开始保存的二进制数据是10,一段时间后再读取该Cell,二进制数据可能就变成了11)。
因为闪存中保存的数据有一定的概率出现跳变,因此需要配合ECC算法(Error-Correcting Code)来使用。
写入数据时,ECC引擎基于原始数据计算出冗余数据,并将原始数据和冗余数据同时保存。
读取数据时,原始数据和冗余数据一并被读出,并通过ECC引擎检查错误并纠正错误,最终得到正确的原始数据。
闪存所保存的数据出现跳变的数量,随着擦写次数的增加而增加。当擦写次数达到一定的阈值后,闪存中保存的数据出现跳变的数量会增大到ECC引擎无法纠正的程度,进而导致数据无法被读出。这个阈值就是闪存的最大擦写次数。
LDPC算法为什么可以提升闪存的擦写寿命?
闪存所保存的数据,在保存一段时间后,会出现跳变;且出现跳变的数量,随着擦写次数的增加而增加。因此,SSD内部需要有ECC引擎进行数据检错和纠错。
在SSD领域,当前标准的ECC算法是BCH算法(该算法以三位作者的名字首字母命名),可以满足绝大多数SSD的纠错需求。闪存介质所宣称的最大擦写次数,就是基于BCH算法来给出的。
但随着TLC介质和3D NAND的普遍应用,同样的数据块,其寿命末期的出错率将会大大增加,BCH编码的纠错能力显得非常无力,这也使得LDPC纠错算法在SSD领域有了用武之地。