SSD(Solid State Driver)具有一下关键特性:
1、Block需要先整片擦除,内部的page才能写入,不能覆盖写。该特性决定相同LBA的数据需要更新时,不能覆盖写入老的LAA,需要写入新的LAA,同时需要更新L2P表,建立新的映射关系,老的LAA失效,等待GC回收。
2、Block都是有一定寿命的。Block的每次擦除动作都会对其造成一定磨损,擦除次数达到一定的阈值(PE)后,Block就会死亡,所以我们希望SSD整体磨损达到均衡状态,而不是集中擦写某些Block而导致死亡,这就是FTL中WL(Wear Leveling,磨损均衡)需要做的工作。
3、每个Block的读次数是有限的,存在读干扰(RD,Read Disturd)问题,当某个Block的读次数达到一定阈值时,FTL需要对其进行更新,将其读出写入另外的Block,或者写入原先的Block。
4、闪存存在数据保存(DR,Data Retention)问题,闪存上的数据由于存在电荷流失,过一段时间后会造成数据丢失,所以FW就需要定时对闪存上的数据进行更新。
5、闪存的坏块问题,闪存坏块存在两种,出厂坏块和使用坏块,出厂坏块是闪存出厂时就存在的坏块,FW需要通过扫描获知出厂坏块,使用坏块是SSD在使用过程中数据擦写导致的坏块,FW通常需要根据数据的ECC校验进行判定,坏块管理是FW的一大任务。
6、MLC、TLC和QLC存在Lower Page corruption,FW在写入Upper Page数据时异常掉电会导致Lower Page的数据丢失,从而导致已经写入SSD的数据丢失,FW需要对SSD的异常掉电进行处理。
7、SLC的数据处理速度快于MLC、TLC和QLC,但是它们可以配置成SLC来使用,相关处理会导致SSD在空余空间大时读写速度快,当快要写满时,读写速度下降很大。
综上所述,SSD的FW(FirmWare)需要处理以下问题:地址映射、垃圾回收(GC)、磨损均衡(WL)、坏块管理、读干扰(RD)、数据保持(DR)等等。