高密度写入的代价:QLC固态硬盘性能变化的底层逻辑
XCtrl固态硬盘
2025年12月30日 17:35

在多数使用场景中,QLC固态硬盘在开始写入时表现得相当平稳,顺序写入速度往往能够接近甚至达到产品标称值。但当写入持续一段时间后,写入性能可能出现明显下降,有时甚至呈现出突然下滑的特征。这种现象并非偶发,也并非控制器异常,而是由QLC存储介质的物理约束与控制器写入策略共同决定的结果。

要理解这一过程,需要从QLC单元的存储方式开始。QLC在单个Cell中存储4bit数据,对应16种不同的电荷状态。为了在读操作中正确区分这些状态,每一种状态在阈值电压轴上都只能占据很窄的区间。与SLC或TLC相比,QLC的阈值电压分布更加密集,相邻状态之间的安全间隔显著缩小。

阈值窗口变窄不会直接让写入“变慢”,它真正带来的影响在于写入过程对精度的要求显著提高。写入的本质是向Cell中注入电子,使其阈值电压落入目标区间。由于区间变窄,任何一次编程脉冲带来的电压变化,如果略高或略低,都更容易越过目标区间的边界,进入相邻状态的判决范围。这种越界风险在QLC中明显高于低密度存储。

写入越界指的是某些Cell在编程过程中,其阈值电压超过了目标状态区间的理想范围。由于浮栅或电荷捕获层中的电子只能增加而无法精确减少,一旦发生过度编程,控制器并不存在将阈值电压“拉回”的物理手段,擦除也只能以Block为单位进行,无法针对单个Cell或Page操作。

在写入过程中的越界并不意味着Page会立即失效。控制器并不会立即将该写入视为失败,而是通过写入路径中的验证与回退机制来进行处理。每一次编程脉冲之后,控制器都会对目标Page执行一次读取操作,通过调整读参考电压,判断当前Cell的阈值电压落在何种判决区间内。如果读取结果显示阈值电压尚未进入目标区间,控制器会继续施加下一次编程脉冲;如果检测到阈值电压已经越过目标区间,进入相邻状态的判决范围,则会触发写入回退或重试流程。

在回退过程中,控制器通常不会尝试“精确拉回”已经注入的电荷,因为电荷无法被局部、可逆地移除。工程上的处理方式,是将该写入视为不可接受状态,并在后续写入中采取更保守的策略。控制器可能降低后续编程脉冲的步进幅度,增加验证次数,或者将该Page标记为高风险区域,在必要时重新选择其他物理Page来完成写入。这些调整都会直接增加写入所需的脉冲次数和验证开销。

在工程实践中,越界存在程度差异。部分越界仅表现为阈值电压略微偏离目标区间中心,尚未稳定进入相邻状态的判决区。这类状态在统计意义上仍然可判别,且在纠错编码能力和多参考电压读取机制的配合下,仍具备可靠读取的条件。控制器通过在每一次编程脉冲后执行读验证,评估阈值电压所在区间、状态裕量以及Page级的整体错误率,以判断当前写入结果是否仍处于系统可接受范围内。

需要明确的是,纠错编码(ECC)并不会、也无法改变 Cell 内部的物理电荷状态。ECC的作用是在读取阶段,当部分比特因阈值漂移或判决模糊而被错误识别时,通过冗余信息在逻辑层面恢复原始数据。也正因为如此,控制器关注的并不是单个Cell是否“物理完美”,而是整个Page在未来时间、温度变化和扰动条件下,是否仍能保持在可判决、可纠错的范围内。

如果验证结果表明,某个Page内的越界程度已经显著压缩状态间的安全裕量,使其在统计意义上难以稳定区分,或错误率预计将超过纠错能力,控制器就会放弃该Page。此时,这个Page会被标记为不可用于有效数据承载,逻辑映射不再指向它,系统重新分配新的物理Page完成写入。由于Page是最小的写入、校验和管理单位,工程上不存在只标识或单独利用部分越界Cell的路径,一旦Page的整体可判决性被破坏,放弃整个Page是唯一可行的选择。

在QLC存储中,由于阈值电压窗口更窄,允许的误差空间更小,写入过程中触发越界及其相关验证、回退和放弃Page的概率明显高于低密度存储。这并不会直接表现为写入失败,但会延长写入路径、增加重试和内部写入次数,并进一步推高后续垃圾回收和写放大的压力,最终体现在持续写入场景下的性能下降。

为控制上述这种风险,NAND写入采用的是增量脉冲编程(ISPP)机制。ISPP的基本做法是:控制器先施加一个较小幅度的编程脉冲,然后读取Cell的阈值电压,判断是否接近目标区间;如果尚未达到要求,再施加下一次脉冲,并在每一步之后进行验证。通过多次小步逼近,而不是一次性写到目标值,来提高最终状态的准确性。

在QLC中,由于目标区间狭窄,ISPP过程往往需要更多次脉冲和更多次验证。单次Page的平均写入时间因此变长。更重要的是,写入时间的离散程度明显增大:有的Page可能在较少脉冲后完成写入,有的则需要更多次尝试才能满足判决条件。这种差异来自制造偏差、历史擦写带来的老化、相邻Cell的电场干扰以及温度变化等因素,它们共同导致不同Cell对同一编程脉冲的响应并不一致。

在写入负载较轻或写入时间较短时,这些复杂性通常不会直接暴露给用户。原因在于,系统并未立即把数据写入QLC的最终状态,而是先经过SLC Cache中间层。SLC Cache是控制器在一部分QLC空间中,只使用每个Cell的最低一个状态位。这样一来,阈值电压窗口被显著放宽,ISPP所需的脉冲次数减少,写入延迟也随之降低。

SLC Cache的容量通常与产品定位有关。在消费级QLC中,SLC Cache可能占据总容量的5%到20%,有的采用固定大小,有的采用动态分配方式。在写入初期,只要新数据能够进入SLC Cache,写入路径就保持在相对简单的状态,用户看到的性能也相对稳定。

在持续写入的过程中,随着SLC Cache中的数据不断累积,可用的缓存空间逐渐减少。当缓存接近饱和时,控制器必须开始将这些以SLC形式暂存的数据,转换为QLC的最终存储状态。这一过程通常被称为缓存回收或缓存折叠。其核心步骤包括:从SLC Cache对应的Page中读取数据,再按照QLC的高精度写入流程,重新编程到QLC的新Page 中。

这一转换不需要等到SLC Cache完全写满才触发。实际控制器往往在缓存使用率达到一定阈值时就开始后台迁移,以避免完全耗尽缓存后写入路径被迫中断。在迁移过程中,新写入的数据通常仍然可以继续进入尚未使用完的SLC Cache,但前提是后台迁移的速度能够跟上前台写入的速度。一旦后台迁移无法及时释放空间,前台写入就不得不直接面对QLC的最终写入路径。

前台写入与后台迁移在正常情况下是解耦运行的。当前台产生写入请求时,控制器优先将数据写入SLC Cache区域,即将部分Cell以单比特状态使用。由于此时阈值电压窗口较宽,写入所需的编程脉冲次数和验证开销较低,前台写入路径保持在相对简单且稳定的状态。与此同时,后台迁移过程以独立节奏运行,将已经写入SLC Cache的数据重新编程为QLC的最终存储状态,并逐步释放缓存空间,以供后续前台写入继续使用。

这种运行状态依赖一个前提条件:后台迁移释放缓存空间的速度,能够持续跟上前台写入消耗缓存空间的速度。在这一条件满足时,前台写入几乎始终能够命中SLC Cache,复杂的QLC最终写入被延后到后台执行,用户感知到的写入性能也相对稳定。

当后台迁移无法以足够速度释放SLC Cache空间时,系统的运行状态发生变化。此时,SLC Cache中可用的Page数量下降到安全阈值以下,控制器无法再保证新的写入请求能够被完整吸收到缓存路径中。为了维持写入的连续性,控制器会对前台写入路径进行调整。

在这种情况下,部分前台写入将不再经过SLC Cache,而是被直接写入QLC的最终存储区域,进入高精度、长延迟的写入流程;或者,前台写入与后台迁移同时竞争相同的NAND、通道和控制资源,使原本独立的写入与迁移操作在时间和资源上发生重叠。无论采用哪种具体策略,前台写入都开始直接承担 QLC 写入所固有的复杂性和代价。

随着缓存吸收能力的下降,前台写入路径逐步从“缓存主导”转变为“QLC 主导”。写入延迟随之拉长,写入吞吐出现明显下降。这一过程并非瞬时发生,但一旦跨越缓存可用空间的临界点,性能变化往往表现得较为集中,从用户视角看具有突发性。

在这一阶段,系统内部的负载结构发生变化。前台写入仍在进行,后台同时执行SLC数据向QLC的重写操作,而这些重写操作会产生新的无效Page,进一步触发垃圾回收。垃圾回收又需要读取有效数据、写入新位置并执行擦除操作。这三类行为共享相同的NAND、通道和控制资源。

只要后台重写或垃圾回收中的任意一种开始与前台写入在资源上发生明显竞争,写入延迟就会被拉长,吞吐量随之下降。当后台重写和垃圾回收同时活跃时,这种竞争会进一步加剧,性能下滑就表现得更加明显。

QLC中这种情况还与陷阱累积有关。陷阱指的是在隧穿氧化层中形成的电荷捕获缺陷。在高电场反复作用下,一部分高能电子会破坏局部原子结构,形成能够俘获电荷的缺陷态。这些缺陷无法被清除,会随着擦写次数不断累积。陷阱数量增加后,Cell内部的电场分布变得不均匀,控制器需要更高的编程电压和更多的验证步骤,才能将阈值电压写入目标区间。这一变化会进一步拉长写入时间,并提高错误率,从而增加纠错和重试的负担。

从系统层面看,QLC写入性能下降并非某一个单点原因触发,而是多个因素在写入持续过程中逐步叠加的结果:SLC Cache的可用空间减少,QLC最终写入开始占据主路径,后台重写和垃圾回收增加内部写入量,写入精度要求与陷阱累积提高单次写入成本。

针对这一特性,行业内的处理方式大致分为三类。第一类是通过扩大或优化SLC Cache的使用策略,尽可能延缓复杂写入的出现。第二类是通过更保守的写入策略和节奏控制,降低后台迁移和垃圾回收的峰值负载,以换取更稳定的长期性能。第三类则来自使用层面,通过避免长时间连续的大规模写入,为控制器留出后台整理和回收的时间。

QLC写入性能的变化反映的并不是设计失误,而是高密度存储在写入阶段所必须承担的系统代价。缓存机制只能改变复杂性暴露的时机,却无法消除复杂性本身。当写入持续到一定程度,系统必须回到QLC的物理现实,性能下降也就成为一个可以预期的结果。