固态硬盘 (SSD) 没有机械部件,由晶体管构建,断电后仍能保存数据。我们主要关注 NAND 闪存,其具有独特性质:写入前必须擦除较大的块,且频繁擦除会导致磨损。
存储单比特
闪存芯片通过晶体管中捕获的电荷水平来编码数据。
- SLC (Single-Level Cell):单层单元,每个晶体管存储 1 bit (0 或 1)。性能高,价格昂贵。
- MLC (Multi-Level Cell):多层单元,存储 2 bit (00, 01, 10, 11)。
- TLC (Triple-Level Cell):三层单元,存储 3 bit。
从比特到存储库
闪存芯片组织为存储库 (Bank) 或平面 (Plane),包含大量单元。
访问单位分为两种:
- 块 (Block):擦除块,通常为 128 KB 或 256 KB。包含多个页。
- 页 (Page):通常为几 KB (如 4 KB)。
写入块内的页之前,必须先擦除整个块。
闪存基本操作
闪存芯片支持三种底层操作:
- 读 (Read):读取任意页,速度快 (约 10 微秒),支持随机访问。
- 擦除 (Erase):写入前必须擦除整个块,将所有位设为 1。耗时较长 (几毫秒)。擦除前需将有用数据移动到他处。
- 编程 (Program):擦除后,将页中的某些 1 改为 0。耗时约 100 微秒。
页的状态转换:
- INVALID:初始状态。
- ERASED:擦除块后,页内容重置并可编程。
- VALID:编程后,页内容已设置且可读。再次修改必须擦除整个块。
性能与可靠性
读取延迟低,编程延迟较高且随每个单元的比特数增加而增加。擦除成本最高。
主要可靠性问题:
- 磨损 (Wear out):频繁擦除和编程会导致电荷积累,最终无法区分 0 和 1。MLC 寿命约为 10,000 次 P/E (Program/Erase) 循环,SLC 约为 100,000 次。
- 干扰 (Disturbance):访问某页可能导致相邻页的位翻转 (读干扰或编程干扰)。
从裸闪存到固态硬盘
SSD 内部包含闪存芯片、易失性内存 (用于缓存和映射表) 以及控制逻辑。
闪存转换层 (FTL, Flash Translation Layer) 将客户端的逻辑块读写请求转换为底层的读、擦除和编程命令。
FTL 的目标是提高性能和可靠性:
- 减少写放大 (Write Amplification):FTL 发出的总写入字节数与客户端发出的总写入字节数之比。
- 磨损均衡 (Wear Leveling):将写入均匀分布在所有块上,确保设备寿命。
- 顺序编程:从低页到高页顺序编程,以减少编程干扰。
糟糕的直接映射
直接映射 (Direct Mapped):逻辑页 直接映射到物理页 。
每次写入逻辑页 时,FTL 必须读取整个物理块,擦除该块,然后编程旧页和新页。这会导致严重的写放大和极差的写入性能,且无法进行磨损均衡,容易导致热点块快速损坏。
日志结构映射
现代 FTL 多采用日志结构 (Log-Structured)。写入逻辑块时,设备将其追加到当前正在写入的块的下一个空闲页中。
设备在内存中维护一个映射表 (Mapping Table),记录每个逻辑块的物理地址。读取时通过映射表查找物理页。
这种方法避免了每次写入时的擦除操作,提高了性能,并允许 FTL 将写入分布到所有页上,实现磨损均衡。
垃圾回收
日志结构会导致覆盖写产生垃圾 (Garbage)(即旧版本的数据)。设备必须定期进行垃圾回收 (GC) 以释放空间。
GC 过程:
- 找到包含垃圾页的块。
- 读取该块中的活动页 (Live pages)。
- 将活动页写入日志的末尾。
- 擦除整个块以供后续使用。
为减少 GC 成本,SSD 通常会过度配置 (Overprovision),增加额外的闪存容量以延迟清理并在后台进行。
映射表大小
页级映射表可能非常大 (例如 1 TB SSD 需要 1 GB 内存)。
- 基于块的映射 (Block-Based Mapping):每个块保留一个指针,减少映射信息。但小规模写入会导致大量数据复制,增加写放大。
- 混合映射 (Hybrid Mapping):保留少量擦除过的日志块 (Log blocks),并为其保留页级映射。大部分数据使用块级映射。FTL 定期将日志块合并为数据块 (通过 Switch merge, Partial merge 或 Full merge)。
- 页映射加缓存 (Page Mapping Plus Caching):仅在内存中缓存活跃的页级映射,减少内存需求。
磨损均衡
FTL 必须定期读取包含长期未修改数据的块,并将其重写到其他位置,使该块可用于写入。这增加了写放大,但确保了所有块的磨损率大致相同。
性能与成本比较
SSD 的随机 I/O 性能远超机械硬盘 (HDD),顺序性能也有优势。由于日志结构设计,SSD 的随机写入性能甚至优于随机读取。然而,SSD 的单位容量成本仍远高于 HDD。