存储⑥—深入浅出SSD-核心技术:FTL

存储⑥------深入浅出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):随着闪存的使用,一些初期好块也会变成坏块。变坏的原因,主要是擦写磨损。