存储⑥------深入浅出SSD-核心技术:FTL
FTL(Flash Translation Layer,闪存转换层 是SSD的主控固件,它充当主机(操作系统)与物理闪存之间的"翻译官"。主机看到的地址是连续的,但FTL会将其巧妙映射到物理闪存上。
映射管理-FTL(Flash Translation Layer)
映射种类
FTL地址映射 :(提高Nand寿命和提高访存效率)
SSD的三种映射方式 :
一、页映射(Page Mapping) :以"页"(通常是4KB或16KB)为单位进行映射。
特点 :灵活高效,随机写入性能极佳,但需要庞大的内存来存放映射表(每1GB物理空间就需要约1MB内存存表)。
(类比Cache映射:全相联映射(Full Associative):主存(主机地址)的任意一块,可以放入Cache(物理闪存)的任意一页。最灵活,命中率最高,但查找起来最费劲(需要遍历或复杂的CAM电路))
二、块映射(Block Mapping) :以"块"(通常包含数十到上百个页)为单位进行映射。
特点 :映射表极小,但写入时必须整块操作,效率低,极易造成写放大。
(类比Cache映射:直接映射(Direct Mapped):主存的每一块,只能放入Cache的唯一固定位置。硬件实现最简单,但容易产生冲突(就算其他地方空着,也只能死磕那一个位置)。)
三、混合映射(Hybrid Mapping) :将数据块与元数据/映射表分开存储,结合两者优点。
特点 :兼顾了性能与内存占用,是很多中高端SSD的折中方案。
(类比Cache映射:组相联映射(Set Associative):主存的块可以先分组,组内再使用页映射(全相联)。既避免了频繁冲突,又控制了查找复杂度。)
(个人认为在映射算法这块和计算机组成原理中CPU Cache映射非常相似)

映射基本原理
两类地址空间
主机侧 :用LBA 逻辑块地址访问,访问单元为逻辑页;
闪存硬件侧:读写最小单元是物理页,分布在闪存真实存储空间。
映射核心作用
SSD 控制器维护逻辑页 ↔ 物理页映射关系,建立逻辑空间与闪存物理空间的对应桥梁。
读写流程逻辑
写入 :主机下发逻辑页数据,主控分配空白物理页存储,并记录该逻辑页与物理页的映射;
读取:主机指定逻辑页时,主控查询映射表,找到对应的物理页读取数据返回。
垃圾回收-GC(Garbage Collection)
GC(Garbage Collection,垃圾回收) :回收无效页、整理空闲块,解决 "写放大 + 空间碎片化"。
背景 :NAND 不能原地覆盖;更新数据时,新数据写入新页,旧页变成 "无效页"。
问题 :长期运行后,块里混杂有效 / 无效页,空闲块变少、写入变慢。
做法 :
①选一个 "脏块"(无效页多);
②搬移有效页到新空闲块;
③擦除原脏块,变成可再次写入的空闲块。
关键指标 :写放大 WAF(主控写入量 / 主机写入量),越小越好 ;GC 会带来额外读写,影响性能。


磨损均衡-WL(Wear Leveling)
WL(Wear Leveling,磨损均衡):让所有块 P/E 次数尽量一致,避免局部块提前写坏,延长整体寿命。
背景:NAND 块擦写(P/E)有上限:
SLC ≈ 10 万
MLC ≈ 3k--1 万
TLC ≈ 500--1500
QLC ≈ 100--500
问题 :热点数据(如文件系统元数据)反复写同一块,很快写坏;冷块几乎不用,整体寿命由最先坏的块决定。
做法 (FTL 映射):
①动态 WL:写数据时,优先选 P/E 最少的空闲块;同一逻辑地址反复写,映射到不同物理块。
②静态 WL:定期把 冷数据从年轻块搬到年老块,抹平块间磨损差异。

坏块管理
坏块来源主要包括 :
·出厂坏块(Factory Bad Block) :闪存从工厂出来,就或多或少的有一些坏块。
·增长坏块(Grown Bad Block):随着闪存的使用,一些初期好块也会变成坏块。变坏的原因,主要是擦写磨损。
