1.SSD的寿命
如果栅极加0V电压,这是擦过的晶体管阈值电压为-V,写过的晶体管阈值电压为+V;随着擦写次数的增加,会出现3种故障:
1.擦过的晶体管阈值电压变大,氧化层变薄,从-V到0靠近;这样读的时候沟道电流变小,容易把“1”读成“0”
2.写过的晶体管阈值电压变小,从+v向0v靠近。容易被把”0“读出”1“
3.写过的晶体管阈值电压变大,即使控制加大于V的电压,晶体管也是截止的。
浮栅晶体管对浮栅极下面的绝缘层很敏感,擦写多了,氧化层逐渐老化,产生不少Charge Trap,这些陷阱最终会吃掉电子,导致写的时候进入浮栅的电子数量会减少,最终导致0和1两个区间不断靠近。
如下图,上面是写后的阈值电压,下面是擦除后的阈值电压,很明显,擦除后的阈值电压在擦很多次之后显著变高。所以,一般擦除之后会做校验,方法是把所有的Wordline设为0V,再去检测每个Bitline的电流。如果某个Bitline电流是0,就意味着有个单元的擦除阈值电压接近0V,导致晶体管关断。所以这个闪存块应该标为坏块。
怎么解决这些的问题:
Wear Leveling:通过综合磨损均衡算法,让所有的闪存块均衡擦写。
降低写放大:写放大越低,固态的磨损速度越慢。
用更好的ECC纠错算法:纠错能力越强,容许的出错率越高。
什么是写放大?
写放大,表示NAND实际写入数据量和host写入量的比值,用来衡量SSD中写放大程度,当NAND Flash中写入的数据多余主机提交的数据时,就会发生写放大。例如主机写入2GB数据,而SSD实际上写入了4GB数据,此时的WAF等于2;
写放大的主要来源
垃圾回收
因为SSD和传统的机械硬盘不一样,不能够覆盖写,必须按页写入,按块擦除,在这个过程中,例如垃圾回收,在块里面有有效页和无效页,需要将有效页搬移到其他的块中,然后对块进行擦除;这个过程中由于搬移就会增大写放大。
磨损均衡
磨损均衡同样需要做搬移的操作,所以也会增大写放大;
读干扰和写干扰
读写干扰发生之后会造成NAND的非永久性损伤,需要重新擦除之后正常使用,但是在擦除之前需要搬移数据,会增大写放大。
怎么样优化写放大?
其实就是怎么样去减少搬移的情况。
1.预留OP空间
预留空间越大,空闲块越多,GC不需要频繁的搬移数据,写放大越低,因为OP越大,每个闪存块有效数据越少,垃圾越多,需要重写的数据更少,写放大就越低
2.ECC纠错
ECC对少量bit的翻转会自动纠错,从而避免数据搬移,降低写放大。
3.写压缩
对写入的数据进行压缩,主要依赖主控芯片的压缩算法,降低实际写入的数据量,从而降低写放大。
MLC使用特性
1.必须按照顺序写入
对MLC或者TLC来说写一个闪存块中的闪存页,应该按照顺序写的Page0---Page2 Page3----禁止随机写入,原因如下
例如MLC,一个存储单元包含两个闪存页的数据,要先写Lower Page,再写Upper Page。
- MLC 单元的阈值电压分布,是由两次编程操作共同决定的。Lower Page 的写入会先把单元的电压拉到一个中间状态,Upper Page 的写入再在此基础上精细调整到最终的目标区间。
- 具体来说,就是MLC在一个Cell里面写入的数据有4种,00,01,10,11,可以理解为要写入数据需要两次编程,例如第一次写入1,那第一次就是写入Lower Page,你需要给Cell分配“1”所属范围的电压即可完成第一次的编程。第二次编程就是Upper Page的数据,例如要写入“0”,那第二次就分配属于“0”的电压范围,最终写入了“01”数据。
- 如果跳过 Lower Page 直接写 Upper Page,会导致单元电压无法正确落在目标区间,数据直接损坏
相邻的Cell之间存在耦合电容,工艺上要求后面的闪存页写操作时,前面的闪存页已经写过。
闪存单元之间是挨得非常近的,相邻单元的浮栅之间会形成寄生耦合电容。所以在写后面的页的时候,就很有可能会干扰到前一页。
但是读和SLC没有按顺序写的这个限制。
2.使用寿命更短
MLC的最大擦写次数会变少,因为它在读写的时候划分的阈值电压更多(4个),每次读写要施加的电压的次数更多,所以需要Wear Leveling(磨损均衡)来保证整个存储介质的使用寿命。
3.写一个闪存页失败,可能会导致另一个闪存页的数据损坏
一般过程是先写Lower Page,将Cell的电压(擦除电压)拉到一个中间区域,然后写Upper Page在Lower Page的基础上,通过精细调整电荷的输入,把电压分到更窄的区间;如果在写Upper Page的过程中,这个时候掉电了,那之前写入的Lower Page数据也会丢失,也就是写一个闪存页失败,可能会导致另一个闪存页的数据损坏。
4.页写入速度不均,Lower 快、Upper 慢
写入Lower Page时间短,写Upper Page时间长,因为你Lower Page是将电压拉到中间位置,速度比加快,而写Upper Page 需要对电压做更精细的划分,所以时间长。
读干扰
读干扰会导致和浮栅极进入电子,由于有额外的电子加入,导致晶体管阈值电压右移(变大了),如果这时候闪存依旧按照之前的参考电压去判断数据,就会误判。
缓解方案:
1.记录每个Block读的次数,在数据出错之前,把整个Flash的数据块刷新或者搬移,导致数据出错。
2.减少Vpass(也就是加在未被读的Wordline上的电压)可以缓解读干扰
闪存数据保存期(Data Retention)
这个主要跟浮栅极氧化层厚度有关,越厚保存数据的时间越久。
本征电场
在控制栅极不加电压的时候,氧化层会产生一个本征电场,它是由浮栅里面的电子产生的,在这个电场的作用下,电子会慢慢从浮栅慢慢泄漏,泄漏多了,数码据就会发生错误,从数据泄漏到出错的时间过程就叫做数据保存期。
TAT效应
闪存用的越久,数据保存时间越短;闪存使用的多,就会历经很多次的擦写,导致氧化绝缘层由了导电性,这下电荷从浮栅泄漏速度更快了。所以,闪存擦写次数越多,数据保存的时间就越短。