固态硬盘写放大系数
-
我们将从一个最基本的概念开始:固态硬盘(SSD)的主要存储介质是NAND闪存。与可以原地覆盖写入的机械硬盘磁盘不同,NAND闪存有一个关键物理限制:其最小的可擦除单元(块)远大于最小的可写入单元(页)。通常,一个块由128或256个页组成。你无法直接向一个已经写入数据的页里写入新数据,你必须先将整个块擦除(使其恢复为全1状态),然后才能写入。
-
基于上述物理特性,我们来理解一个核心操作:当SSD需要修改(即覆盖)一个已有数据的页时,它不能简单地在原位置更改。控制器会将该页的新数据写入到一个新的、空闲的页中,并将原页标记为“无效”。这个过程被称为**“异地更新”**。久而久之,一个块中就会混合包含有效的(当前数据)和无效的(已被新版取代的旧数据)页。
-
现在引入一个关键问题:SSD需要持续的空闲块来接收新的写入数据。当空闲块不足时,SSD必须进行垃圾回收操作。垃圾回收的目标是:从一个包含有效页和无效页的“脏块”中,将所有仍然有效的页读取出来,合并写入到一个新的空白块中,然后把这个“脏块”整体擦除,使其变为一个可用的空闲块。这个“读取-合并-写入-擦除”的过程本身,就产生了额外的写入操作。
-
写放大系数 正是量化这个现象的核心指标。它的定义是:WA = 主机实际写入NAND闪存的数据量 / 主机(例如你的电脑)命令SSD写入的数据量。理想情况下,WA=1,表示主机写1GB,闪存也只写入1GB。但实际上,由于上述的垃圾回收等后台管理操作,WA总是大于1。
-
让我们通过一个简化的例子来计算WA:假设一个块有4个页。主机要求连续写入数据A、B、C、D,正好占满一个块,此时WA=1。接着,主机要更新数据B为B‘。控制器执行“异地更新”,将B’写入一个空闲块中的第一个页,并将原B页标记为无效。此时,主机写了1页(B‘),但闪存实际也写了1页,WA=1。但此时系统中已无完全空闲的块,且存在一个包含无效页的块。
-
当主机要继续写入新数据E时,触发垃圾回收。假设那个包含A、B(无效)、C、D的块被选中。控制器需要:读取该块中仍有效的A、C、D三页数据(3次读操作),将它们与新的E数据合并,写入到一个新的空白块中(共4次写操作),最后擦除原来的块。对于主机写入E这个动作(1页数据),闪存实际发生了4页的写入(A、C、D、E)。因此,这次操作的WA = 4 / 1 = 4。这表明闪存的磨损(写入/擦除次数)被放大了4倍。
-
影响写放大系数的关键因素包括:
- 写入负载模式:持续的顺序大文件写入(如拷贝电影)产生的WA较低,接近1。大量随机小文件覆盖写入(如数据库操作、系统盘日常使用)会产生大量无效数据,显著推高WA。
- SSD剩余可用空间(OP,预留空间):这是SSD出厂时或用户格式化后保留不作主机访问的额外容量。更大的OP意味着更多空闲块,能延缓垃圾回收触发、降低回收频率和合并数据的压力,从而有效降低WA。
- 垃圾回收算法:控制器的算法智能程度,如选择包含最多无效页的块进行回收(贪心算法),可以最小化每次回收需要搬迁的有效页数量,从而降低WA。
- TRIM指令:当操作系统删除文件时,能主动通知SSD哪些数据块已无效。这使得SSD能在空闲时提前清理这些块,避免在写入高峰时进行高成本的垃圾回收,有助于降低WA。
-
写放大系数的实际意义主要体现在两个方面:
- 寿命影响:NAND闪存的每个存储单元都有有限的编程/擦除循环次数。WA越高,意味着为完成同样多的主机写入,闪存实际经受的磨损越大,这会直接缩短SSD的理论使用寿命。
- 性能影响:垃圾回收操作需要占用控制器资源、进行额外的读写,尤其在空闲空间紧张时,可能导致前台写入操作暂停等待,造成写入延迟增加、速度下降,也就是常说的“用满变卡”。
-
最后,从系统层面看,降低写放大系数是SSD控制器设计的核心目标之一。现代控制器通过结合大容量OP、智能垃圾回收算法、积极支持TRIM/Deallocate、以及更高效的磨损均衡算法等综合手段,努力将WA维持在较低水平(例如1.1-1.5甚至更低),以提升SSD的整体耐用性和稳态性能。