固态硬盘

SSD 用 Flash 芯片代替了盘片和磁头,于是磁盘的三项时间(寻道、旋转、传输)里前两项直接消失。这是它最大的优势,也是最容易一句话说完的部分。

真正需要理解的是它换来的新麻烦:Flash 写之前必须擦除,而擦除的粒度远大于写的粒度(见 3.2.2)。这一条不对称性单枪匹马地造出了 SSD 的全部复杂性——闪存翻译层、垃圾回收、写放大、磨损均衡,四个概念全部是同一个问题的连锁后果。

机制

三级粒度

芯片()块(,擦除单位)页(,读写单位)
  • 读、写以页为单位(典型 4 KB)
  • 擦除以块为单位(典型一块含 16~512 页)
  • 一个页只能在被擦除之后写入一次;要改写已有内容,不能原地覆盖

“擦除单位远大于写入单位”就是那条不对称性。 若坚持原地更新,改一个 4 KB 的页要先把整块(可能几百 KB)搬走、擦掉、再写回——代价高得无法接受。

闪存翻译层:把原地更新变成异地更新

FTL(Flash Translation Layer)维护”逻辑页号 → 物理页号”的映射表,工作方式是:

  1. 要改写逻辑页 时,不动原物理页,而是找一个已擦除的空闲物理页 写入新内容
  2. 把映射改成
  3. 把原物理页标记为无效

于是”写”永远是顺序地写空白页,不需要擦除——擦除被推迟了。

FTL 使 SSD 在外部看来是一块普通的块设备,操作系统按逻辑块号读写,完全不知道物理页在哪。这与 页式虚拟存储器的地址映射是同一种手法。

垃圾回收与写放大

无效页越积越多,空闲页迟早耗尽,此时必须垃圾回收:挑一个无效页最多的块,把其中仍然有效的页搬到别处,再擦除整块。

搬移动作本身也是写。 用户写入 1 个页,SSD 内部实际写了不止 1 个页:写放大系数闪存实际写入量主机请求写入量写放大是 SSD 随机写性能明显低于顺序写的直接原因,也是它比磁盘更怕”写满”的原因——剩余空闲块越少,垃圾回收越频繁,写放大越严重。

磨损均衡

Flash 的每个块擦写次数有限(万次量级)。如果某些块被反复改写,它们会先坏,而其他块还很新。

磨损均衡(Wear Leveling)让擦除次数在所有块之间尽量平均:

  • 动态磨损均衡:分配空闲块时优先选擦除次数少的
  • 静态磨损均衡:主动搬走那些长期不变的冷数据,把它们占的”新块”腾出来参与轮转

没有静态磨损均衡,只读的冷数据会永久霸占一批低磨损块,动态均衡对它们无能为力。

TRIM

删除文件时,文件系统只是在自己的元数据里把块标为空闲,SSD 并不知道——它仍然认为那些页有效,在垃圾回收时白白搬移它们。

TRIM 命令让操作系统主动告诉 SSD”这些逻辑块已经没用了”,SSD 于是可以直接把对应物理页标为无效。这是操作系统必须为 SSD 做的配合,也是 SSD 与磁盘在软件接口上的一个实质差别。

边界

SSD 没有寻道时间和旋转延迟,因此随机读性能远超磁盘。 但随机写受垃圾回收拖累,与顺序写差距明显——“SSD 各种访问一样快”是错的。

SSD 属于外存,不在 CPU 的地址空间里。 尽管它由半导体构成、支持随机存取,它仍然要经过 I/O 通路调入主存。

SSD 在教材分类里归入 ROM 一节,见 3.2.2——这是按非易失性分类的结果,不表示它不能写。

SSD 的”块”与文件系统的”块”不是一回事。 SSD 的块是擦除单位(几百 KB),文件系统的块是分配单位(几 KB)。同名不同物,题目里要按上下文区分。

磨损均衡缩短的是”最先坏掉的那一块”的寿命差距,不是提高总擦写次数。 说”磨损均衡使 SSD 寿命无限”是错的。

对照速查

磁盘(HDD)固态硬盘(SSD)
介质磁表面半导体(Flash)
机械部件有无
寻道 / 旋转延迟有无
随机读慢快
随机写慢较快,受 GC 拖累
读写粒度扇区页(读写)/ 块(擦除)
原地更新可以不可以
寿命限制机械磨损擦写次数
抗震 / 功耗 / 噪声差 / 高 / 有好 / 低 / 无
价格低高
概念一句话
FTL逻辑页 → 物理页的映射,把原地更新变成异地更新
垃圾回收搬走有效页,擦除整块,回收空闲空间
写放大实际写入量 / 请求写入量
磨损均衡让擦除次数在块之间平均,分动态与静态
TRIMOS 告诉 SSD 哪些逻辑块已失效

考点

  • 读写以页为单位,擦除以块为单位,块远大于页
  • 写之前必须擦除,因此不能原地更新——这条不对称性推出后面全部概念
  • FTL 做逻辑页到物理页的映射,实现异地更新
  • 垃圾回收造成写放大,是随机写慢于顺序写的原因
  • 磨损均衡分动态与静态,静态负责搬走冷数据
  • SSD 无寻道无旋转延迟,随机读远快于磁盘
  • SSD 属于外存,不在 CPU 地址空间内
  • SSD 的”块”(擦除单位)≠ 文件系统的”块”(分配单位)

链接