FTL是个啥?
FTL指Flash Translation Layer(闪存转换层),这玩意儿的本职工作是完成Host的逻辑地址到Flash的物理地址的转换。
controller每把一笔数据写入Flash中时,便会记录下该数据的逻辑地址到物理地址的映射关系,这样当Host想要读取这笔数据时就会根据这个映射读取到真实的数据。
首先说明一下闪存的特性:
1. 闪存块需要先擦除才能写入,不能覆盖写。
2. 闪存块是有寿命的。每擦除一次寿命便会减少一点。
3. 闪存块的读取次数是有限的。读的次数多了会造成读干扰问题。
4. 闪存的数据保持是有时限的。高温时数据保持时间会缩短。
5. 闪存天生就会有坏块。使用过程中会产生新的坏块。
6. MLC和TLC 会有 lower page corruption的问题。
针对闪存的以上特性,FTL在完成本职工作逻辑地址到物理地址转换的同时,还要具有十八般武艺:
垃圾回收(Garbage Collection),磨损平衡(Ware Leveling),坏块管理,读干扰处理,数据保持处理等事情。
FTL十八般武艺之本质工作---映射管理
映射有基于块映射、基于页映射和混合映射。
基于块映射Host在读写小尺寸数据(随机性能)时性能较差,一般用在U盘中(ps:不要惊讶,U盘中也用到FTL的),所以U盘不适合装系统,适合用来读写大尺寸数据的数据传输用。
基于页映射对小尺寸数据(随机性能)有很好的性能,但是由于闪存的页要比闪存块多的多,需要更多的空间来存放映射表。为了追求更好的随机性能(操作系统对这个很在意)所以SSD都采用页映射。
混合映射的性