关于SSD的FTL

FTL Flash Translation Layer 闪存转换层

作用:完成主机逻辑地址空间到闪存物理空间的映射
简言之,使用者在C盘下写入一个文件,对应这个文件资料写进SSD,SSD会记录这份资料存储的位置,在HOST再次读取时,从SSD闪存对应位置再取出资料的一张对照表。有点像仓库管理员的职责,记录出入库产品位置信息,别人来拿的时侯准确拿到

FTL的作用不仅仅只是做地址映射,还包含如下功能:

1.GC : Garbage Collection 垃圾回收

这是由于我们的闪存时不可覆写的,就是写资料前你得保证这个Page里面是空的,所以,当我们写的资料更新以后,可能就会存在Block里面有一些有用数据,有一些没用得数据,这些存储没用的数据得空间我们得给他空出来呀,不然整个SSD里面存了好多无用资料,把空间盛满了,就没办法写新的资料进去了。
所以在SSD空闲或者空间不太够的时候,就需要主动去做GC,把有用的数据读出来重新放到新的地方去,然后这个Block整个擦掉,整理出来更多的空间,以便后续写入
注意,GC同时也会影响读写性能,但又不得不去做,否则我们不停的更新资料不做,来不及GC擦掉无用数据,最终SSD会没办法写入新更新的资料,所以这个是需要SSD固件去平衡的一个点

2.WL : Wear Leveling 磨损均衡

之前提到,闪存有寿命,有擦写的上限。假如我们一直在对同一个地方高强度的写入再擦除就会造成这个位置的Block的擦写次数(P/E Cycle [Program/Erase Cycle])严重高于其他地方的Block,长此以往,这些Block很快就寿终正寝了。所以为了平衡整体的寿命,就需要适时调整,让数据尽量均匀的分布到每个闪存块上。

3.处理Read disturb问题

之前说闪存存在读干扰,一直不停读会导致最后数据出错,所以FTL也需要适时的将这些一直在读取的位置的资料做搬移再写入的操作,避免最后数据出错

4.处理Data Retention问题

数据长时间保存,会导致电子偷偷溜走,导致数据丢失。在上电的情况下,FTL也需要定期维护这些数据,假如存在问题,就需要做重新读取写入动作,以免数据丢失

5.坏块管理

闪存存在寿命,又坏块如何处理?自然是标注起来不再使用,FTL也需要记录这些坏块
坏块包含,擦写失败,ECC无法纠正的读失败

6.闪存类型配置

简单说,就是为了性能或其他因素,在条件允许的情况下,将原本是QLC或者TLC的闪存配置为SLC来使用,一方面提升读写速度,一方面也可以提高寿命和可靠性
当然,所以我们在消费级SSD上能看到,最开始写入速度飞快,写到一定数据量,比如50G以后速度突然以下就断崖式跌落,就是因为SSD上配置的SLC被消耗完了,TLC或QLC写入相对就会慢非常多

衍生问题思考:

针对第六点:QLC配置为SLC,提速了,但容量变小了,我如果一直写,把SLC都写完,继续写QLC,为了保证容量,原本的SLC是否还会再继续释放出来,变成QLC,这个处理过程是不是更会影响速度?
SLC变QLC的过程应该也算GC的一种吧?那我之前认为的顺序写不会有GC的理解是错误的,对于这样的消费级产品,顺序写也会造成GC?

你可能感兴趣的:(深入浅出SSD学习,SSD)