了解硬件特性有助于我们针对特性进行进一步的探索与优化;本文主要介绍SSD的FTL(Flash Translation Layer);
FTL所在的位置:
在设备端:
在主机端:
Interface Adapter——接口适配:
在内部FTL中主要关联eMMC/SCSI/SATA/PCIe/NVMe等接口,而在外部FTL中主要关联Linux Block Device。
Address Translation——映射管理
地址映射,也可以叫做mapping,负责逻辑地址和物理地址之间的映射,多技术模块都以该机制为核心进行。众所周知,Nand Flash具有写时擦除的特性,因此写入数据时不得不异地更新。
Garbage Collection——垃圾回收
垃圾回收,简称GC,回收异地更新产生的脏数据所占空间的回收工作。
Trim
Trim是一种用来增加GC垃圾回收效率的算法。
没有Trim的话,会出现这样一种情况:在操作系统删除一个文件,实际上数据在物理层面上并没有被删除。
Wear Leveling——磨损平衡
缩短不同块之间的擦写次数差别,均衡闪存块的寿命;分为动态磨损平衡和静态磨损平衡;
掉电恢复——Power off Recovery:
掉电恢复,简称POR。正常掉电,SSD会把缓存中的数据刷新到闪存,重新加载保存的数据即可。如果是异常掉电,因为某些人为或自然外力的原因导致数据没有成功写入到Nand中,掉电恢复要恢复到掉电前的安全状态,比如恢复RAM中的数据和Address Translation中的映射表。
Error Handler——坏块管理
处理读写操作中遇到的Fatal Error或ECC Error状况,以及Bad Block或Weak Block的管理。略过坏块或者跳过坏块;
SLC cache
SLC cache是把MLC或者TLC的一部分闪存块,配置为更优速度优势的SLC模式来作为Cache使用,让SSD具有更好的突发性能。不过一般主要用于消费级SSD或者移动存储中,主要原因是SLC Cache具有更好的突然性能,但是企业级SSD更追求稳定的速度;
RD & DR
RD指的是Read Disturb,DR指的是Data Retention。两者都能导致数据丢失,但原理和固件处理方式都不一样;
RD——对一个闪存块来说,每次读其中的一个闪存页,都需要在其他字线(Wordline)上加较高的电压以保证晶体管导通。这个操作有点类似于轻量的写操作;长期会导致比特翻转;因此需要在达到读阈值之前对这个闪存块上的数据进行刷新;
DR——电子从浮栅极跑出,导致比特翻转;由FTL定期扫描,翻转超出阈值进行数据刷新,避免数据丢失;
Host Based FTL
SSD有Host Based FTL和Device Based FTL两种模式。
Host Based把FTL放在主机驱动程序中,Device Based则是把FTL放在SSD主控内部。
Host Based SSD一般的模式是把闪存的读写接口直接开放给驱动程序,这样驱动程序就能自行管理闪存内部资源。控制器大都采用可编程逻辑器件FPGA,功能比较简单,主要实现ECC纠错和闪存时序控制。