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)