Flash 与 SSD

Flash Memory 是一种非易失性半导体存储器,断电后仍能保存信息。U 盘、SD 卡、SSD 都基于 Flash。

SSD 是固态硬盘,通常可以理解为:

$$
\text{SSD} = \text{控制单元} + \text{Flash 存储单元}
$$

SSD 与普通 Flash 存储芯片使用的存储介质类似,但 SSD 的控制单元更复杂,要负责地址映射、磨损均衡、坏块管理、垃圾回收等工作。

页和块

SSD 内部常以组织数据。

单位 描述
读写的基本单位,常见大小为 512 B 到 4 KB
擦除的基本单位,常见大小为 16 KB 到 512 KB;即一块包含多页

==SSD 通常按页读写,但按块擦除==。

这意味着 SSD 不能像 RAM 那样随意覆盖一个已有数据的位置。若要改写旧数据,控制器可能需要搬移同块内仍有效的页,擦除整个块,再写入新数据。

SSD 读快写慢

SSD 读数据时,可以直接按页读取;写数据时却受到擦除单位限制。

写入旧位置时,可能经历:

  1. 读取原块中仍然有效的页。
  2. 擦除整个块。
  3. 把有效页和新页写入新的位置。
  4. 更新地址映射关系。

因此 SSD 的写操作往往比读操作复杂,也可能出现写放大:用户看似只写入少量数据,SSD 内部却移动和写入了更多数据。

SSD 与机械硬盘

项目 机械硬盘 HDD 固态硬盘 SSD
存储介质 磁表面介质 Flash 芯片
访问方式 依赖磁头移动和盘片旋转 电子访问,无机械寻道
随机访问 受寻道和旋转延迟影响大 随机访问性能好
顺序访问 适合连续块传输 顺序读写也快
写入特点 可直接改写目标位置 常受擦除单位限制
典型问题 机械延迟、抗震性差 擦写寿命、写放大、价格
Note

SSD 没有磁臂移动和盘片旋转,因此随机访问性能远好于机械硬盘。但这不意味着 SSD 写入完全没有代价,Flash 的擦除限制仍然是核心问题。

# 磨损均衡

Flash 块的擦除次数有限。如果总是反复擦写同一批块,这些块会先达到寿命上限。

磨损均衡让 SSD 控制器尽量把擦除次数分散到不同块上,使各块老化程度更接近,从而延长整体寿命。

常见策略可以分为两类:

策略 做法 解决的问题 性能代价
动态磨损均衡 新写入的数据尽量写到擦除次数较少的空闲块上 避免少数空闲块被频繁擦写 只在写入时选择空闲块,额外开销较小
静态磨损均衡 把长期不变的冷数据从擦除次数少的块搬走,让这些块也参与后续写入 避免存放冷数据的块长期闲置,导致其余块承担过多擦写 需要主动搬移冷数据,会增加内部读写和写放大

动态磨损均衡通常对性能影响较小。静态磨损均衡还会主动搬移冷数据,因此会占用控制器和 Flash 带宽,短期性能代价更高,但能让全盘块的擦除次数更接近,长期寿命更均匀

但对于普通用户,实际上并不是很需要担心寿命问题

一个简化估算:

假设 SSD 容量为 $2^{40}\text{ B}=1\text{ TB}$,每天写入 $2^{37}\text{ B}=128\text{ GB}$,每个 Flash 块可擦除 $2^{10}$ 次。 每天写入容量占全盘容量的:$\frac{2^{37}}{2^{40}}=\frac{1}{8}$ 理想磨损均衡下,平均每 8 天全盘每个块相当于被擦除一次。每个块可擦除 $2^{10}$ 次,因此理论寿命约为: > $$ 8\times 2^{10}=8192\text{ 天}\approx 22.4\text{ 年} $$