FTL算法
一、Nand Flash基本原理
Nand Flash是一种非易失性存储器,广泛应用于固态硬盘(SSD)、USB闪存驱动器、嵌入式设备等。
1. 物理结构
Cell(存储单元):Nand Flash的基本存储单元是浮栅晶体管,通过浮栅中的电荷量来表示数据(0或1)。
Page(页):多个Cell组成一个Page,Page是读写的最小单位。
Block(块):多个Page组成一个Block,Block是擦除的最小单位。
Plane(平面):多个Block组成一个Plane,多个Plane可以并行操作(Multi-Plane)操作。
2. 擦写读性能
读操作:以Page为单位,读取速度较快。
写操作:以Page为单位,写入之前必须保证目标Page为空,也就是已经被擦除。
擦除操作:以Block为单位,擦除速度较慢。
3.数据存储方式
SLC:每个Cell存储1bit数据(0/1),速度块、寿命长,但成本高。
MLC:每个Cell存储2bit数据(00/01/10/11),容量大、成本低,但速度和寿命不如SLC。
TLC:每个Cell存储3Bit数据,容量更大,成本更低,但速度和寿命进一步降低。
QLC:每个Cell存储4Bit数据,容量更大,成本最低,但速度和寿命最差。
4. 基本特性
Nand Flash不支持覆盖写入,写入之前必须要先擦除目标Block。
有限的擦除次数:每个Block的擦除次数有限,通常SLC模式下的擦除次数为10万次,MLC为1万次,TLC为几千次,超过规定的擦除次数后肯能导致数据丢失。
坏块管理:Nand Flash在生产和使用的过程中会产生坏块,需要进行坏块管理进行标记和屏蔽。
磨损均衡:通过均匀分布写操作,延长Nand Flash的寿命。
垃圾回收:回收无效数据占用的空间,释放可用的Block。
5. 写放大
写放大(WA)= 实际写入数据量 / 用户请求写入数据量 理想状态下写放大为1
原因:
1.写之前擦除:由于Nand Flash不支持覆盖写入,写入前必须擦除目标块,如果目标块有数据,需要先将有效数据迁移到其他Block,然后再擦除目标Block,这会导致额外的写入操作。
2.垃圾回收:为了释放无效数据占用的空间,垃圾回收机制需要将有效数据迁移到其他Block,然后擦除原Block.
3.磨损均衡:为了将写操作均匀分布到所有Block,可能导致额外的数据迁移和写入操作。
影响:
1.性能下降:写放大越高,实际写入数据量越大,会降低Nand Flash的写入性能。
2.寿命缩短:写放大越高,擦写次数消耗越快,会缩短其使用寿命。
3.功耗增加:写放大越高,实际写入数量大,增加写入功耗。
降低写放大方法:
优化FTL算法、增加OP空间(通过增加额外的存储空间,减少垃圾回收的频率和数据迁移的量)、提高垃圾回收效率。
6.常见问题
数据保持:Nand Flash中的数据会随着时间逐渐丢失,特别是高温环境下。
读干扰:频繁读取某个Block可能导致相邻的块数据错误。
写干扰:写入某个Page导致相邻Page的数据错误。
坏块问题:Nand Flash在生产和使用过程中会生产坏块,需要通过坏块管理机制进行处理。
二、eMMC/UFS/SATA/PCIe 协议
eMMC、UFS、SATA、PCIe是四种常见的存储设备接口协议。
eMMC:一种嵌入式存储解决方案,将Nand Flash、控制器和接口集成在一个芯片中。采用并行接口,支持多通道操作。协议基于MMC协议,命令和数据通过同一组引脚传输。
UFS:一种高性能嵌入式存储解决方法,采用串行接口,支持全双工通信,命令和数据通过不同的通道传输。
SATA:一种串行接口协议,用于连接存储设备和主机,采用点对点连接,协议基于AHCI或NVMe。
PCIe:一种高速串行接口协议,用于连接高性能设备(如GPU、SSD)和主机(PC、服务器)。