FTL
FTL(Flash Translation Layer) 是 NAND flash 管理的核心 ,NAND flash 的设备包括我们经常碰到的SD、eMMC、UFS、SSD、 等,通常 FTL 由这些设备的固件提供实现
1. 组成
一个典型的 Flash 芯片由 Package、die、plane、block 和 page 组成
1.1. Package
也就是 chip 即 Flash芯片 ,就是我们经常在 M.2的 SSD上看到的NAND flash颗粒:
1.2 Die
一个NAND颗粒是由一颗或者多颗Die封装在一起而成,这种封装可是平排的,也可以是层叠的。die内部可以通过3D 堆叠技术扩展容量,Die也是可以单独执行命令和返回状态的最小单位:

1.3 Plane
一个die可以包含几个Plane
1.4 Block
重要的概念,它是擦除操作的最小单位
1.5 Page
也很重要,它是写入动作的最小单位
2. 原理
Flash芯片 最小单位是 Page,并且只能将1改成0,若把0改回1,则需要擦除操作,但是擦除操作只能在block的上面操作,而 NAND flash 的寿命是由其擦写次数决定的,FTL 就可以用来平衡整块 flash的整体擦写次数
2.1. 原理
系统维护了一个逻辑 Block 地址(LBA,logical block addresses )和 物理Block地址(PBA, physical block addresses)的对应关系
2.2. 颗粒度问题
实际使用中常用的是log-block mapping,它从我们现代的log文件系统中学到经验,也充分利用了page和block的不同特性
2.3. 寿命均衡(Wear Levelling)
具体擦写策略待考
2.4. 垃圾回收(GC,Garbage Collection)
具体GC策略待考
2.5. LBA/PBA表存储
在大部分的NAND Flash里,还有些空闲块,叫OP(Over Provisioning),利用它可以处理坏块、存储LBA/PBA表、给GC和Wear Levelling留下腾挪空间、减少写入放大(Write Amplification)
