你买了一块标称写入速度7000MB/s的NVMe SSD,兴冲冲地开始复制一个50GB的游戏安装包。前几秒速度确实快得惊人,稳定在6000MB/s以上。但大概写了二三十GB后,速度突然断崖式下跌,跌到1500MB/s甚至更低。你检查硬盘健康度、更新驱动、换接口,一切看起来都正常。

这不是故障,而是现代SSD的工作原理使然。写入速度的大起大落,是存储工程师在性能、容量和成本之间反复权衡的结果。

一个关于"假装"的技术:伪SLC缓存

要理解SSD写入速度的变化,首先要理解NAND闪存的基本单元——存储单元(Cell)是如何工作的。

每个存储单元本质上是一个特殊的晶体管,通过在浮栅或电荷捕获层中存储电荷来表示数据。存储的电荷量决定了晶体管的阈值电压,读取时通过检测阈值电压来还原数据。这是1980年代东芝工程师舛冈富士雄发明闪存时的基本原理。

最初的闪存每个单元只存储1bit数据,这就是SLC(Single-Level Cell)。单元只需要区分"有电"和"无电"两种状态,编程操作简单直接:施加一个高电压,电子通过F-N隧穿效应注入浮栅,完成写入。读取时,检测晶体管是否导通即可。整个过程干净利落,编程时间通常在100-300微秒范围内。

但SLC的问题是容量太小。同样面积的硅片,SLC只能存储1bit。随着数据爆炸式增长,存储密度成为核心诉求。于是工程师想到了一个办法:让每个单元存储更多bit。MLC(Multi-Level Cell)存储2bit,需要区分4种电压状态;TLC(Triple-Level Cell)存储3bit,需要区分8种状态;QLC(Quad-Level Cell)存储4bit,需要区分16种状态。

电压状态的数量呈指数级增长,但物理世界不会因此变得更宽容。编程一个TLC单元,需要精确地将电荷注入到8个电压区间中的某一个。这就像用气枪把飞镖射到靶子上——射到任意一个区域容易,但要精确射中指定的小格就需要反复调整。TLC编程通常采用"增量步进脉冲编程"(ISPP)算法:先施加一个较低的编程电压,检测阈值电压是否进入目标区间,如果没有,再增加一点电压重试。这个过程可能需要循环十几次才能完成一个单元的编程。

结果就是:TLC的直接写入速度只有SLC的1/3到1/5,QLC更慢。如果SSD直接把数据写到TLC/QLC单元,速度可能只有几百MB/s,这显然无法满足现代用户对"高速"存储的期待。

解决方案是"伪SLC缓存"(pseudo-SLC Cache)。SSD控制器将一部分TLC/QLC单元临时配置为SLC模式——每个单元只存储1bit,忽略其他bit位。这样这部分空间就能以SLC的速度接收数据。当缓存空间用尽或硬盘空闲时,控制器再把数据从SLC模式"折叠"(folding)回真正的TLC/QLC模式。

这就像一个繁忙的餐厅:高峰期时,服务员先把顾客快速引导到临时座位(伪SLC缓存),等厨房有空档了再把顾客转移到正式餐桌(TLC/QLC)。临时座位有限,但能保证高峰期的响应速度。

TechPowerUp对Samsung 990 Pro 2TB的测试清晰展示了这一机制:写入开始时速度接近5GB/s,持续到写入约187GB后突然下降到1.7GB/s。这187GB就是它的伪SLC缓存大小。缓外速度才是这块硬盘TLC模式的真实写入性能。

缓存策略分为静态和动态两种。静态缓存固定占用一定容量,无论硬盘是否填满都保持不变。动态缓存则根据剩余空间自动调整——空间充足时缓存很大,硬盘快满时缓存收缩。动态缓存更灵活,但性能更不可预测。一块1TB的SSD,空盘时可能有300GB的SLC缓存,用了800GB后缓存可能只剩几十GB。

这就是为什么SSD越满越慢——不是NAND闪存性能下降,而是SLC缓存空间被压缩。

八个电压状态的编程困境

理解了SLC缓存机制,再来看一个更根本的问题:为什么TLC/QLC的直接写入会这么慢?

NAND闪存的编程本质上是量子力学过程。要向浮栅注入电子,需要在控制栅和衬底之间施加一个强电场(通常15-20V),使电子通过氧化层隧穿进入浮栅。这个过程被称为Fowler-Nordheim隧穿。

对于SLC,只需要决定"注入"或"不注入"。但对于TLC,需要精确控制注入的电子数量,使阈值电压落在8个区间中的指定位置。每个区间的宽度可能只有零点几伏,而编程脉冲通常每次增加几百毫伏。这意味着需要多次脉冲、多次验证。

更复杂的是,NAND闪存以"页"为单位编程,以"块"为单位擦除。一个典型的3D TLC NAND页大小是16KB,一个块包含数百个页。编程一个页之前,必须确保整个块已经被擦除(所有单元都处于"1"状态)。如果块中包含有效数据,就需要先把这些数据读出来、与新数据合并、擦除整个块、再把合并后的数据写回去。这就是写入放大的来源——用户写1字节数据,NAND可能实际执行了数千字节的物理写入。

编程时间还与电压精确度相关。TLC的8个电压区间必须足够宽以抵抗噪声和干扰,又要足够窄以容纳所有状态。随着NAND制程微缩,单元之间的差异增加,电压分布变宽,边缘状态的编程难度指数级上升。这也是为什么TLC的P/E(编程/擦除)循环次数通常只有1000-3000次,而SLC可以达到10万次以上。

当SSD的SLC缓存耗尽,数据开始直接写入TLC区域时,控制器面临两个选择:直接编程到TLC模式,或者边写边折叠。前者速度慢但逻辑简单;后者可以利用后台时间将已写入的SLC数据迁移到TLC,为新的写入腾出缓存空间。不同厂商采用不同策略,导致缓外性能差异巨大。有些高端TLC SSD缓外速度能达到2GB/s以上,而一些入门级产品可能只有500MB/s。

当温度成为瓶颈:热节流机制

SLC缓存耗尽只是写入速度下降的原因之一。另一个常被忽视的因素是温度。

NAND闪存编程需要高电压和大电流,控制器高速运行也需要功耗。持续写入时,SSD会产生大量热量。在M.2 2280这样狭小的空间里,热量难以散发。当温度超过安全阈值,SSD固件会主动降低写入速度,这就是热节流。

NVMe 1.0规范引入了主机控制热管理(HCTM)协议,定义了两个温度阈值:TMT1和TMT2。当复合温度(控制器温度或NAND温度)超过TMT1时,SSD开始降低性能;超过TMT2时,性能进一步降低以防止硬件损坏。

不同厂商的热节流策略差异很大。根据Hagiwara Solutions的测试,某些SSD在超过TMT1后性能急剧下降到接近100MB/s,而另一些则采取温和策略,逐步降低而不是断崖式下跌。某款SSD的测试显示,当温度达到80°C阈值时,写入速度从数GB/s下降到100MB/s左右,温度下降到75°C后速度恢复。这种循环在持续写入过程中可能反复出现。

热节流对PCIe Gen5 SSD的影响尤为显著。Gen5 SSD的理论速度超过10GB/s,但高带宽意味着高功耗——满载功耗可能超过10W,是Gen4 SSD的两倍以上。一些Gen5 SSD在持续写入时温度迅速飙升,热节流频繁触发,实际写入速度甚至不如散热良好的Gen4 SSD。这催生了各种主动散热方案,从散热片到小风扇,甚至液冷。

热节流的温度来源通常不是NAND闪存本身,而是SSD控制器。控制器芯片集成多个ARM核心、多个NAND通道控制器、ECC引擎等,运行频率可达数百MHz。在高负载下,控制器的功耗和发热远超NAND。红外热像仪照片显示,持续写入时控制器温度通常比NAND高出10-20°C。

垃圾回收:看不见的性能杀手

当用户删除文件或覆写数据时,操作系统只是标记这些逻辑地址为无效,并不会立即通知SSD。NAND闪存不支持原地覆写——要修改一个页,必须将整个块读出来、修改后写入新块,再擦除旧块。这些复杂的操作由SSD固件在后台完成,称为垃圾回收(Garbage Collection)。

垃圾回收需要读取有效数据、擦除旧块、写入新数据,产生大量内部写入。这些操作发生在控制器认为"空闲"的时间段,但如果用户持续写入,垃圾回收可能被迫在写入过程中执行,与用户数据争抢NAND带宽。

更复杂的是写入放大。由于NAND以块为单位擦除、以页为单位编程,修改一个页可能需要重写整个块。写入放大因子(WAF)定义为实际写入NAND的数据量除以主机写入的数据量。理想情况下WAF接近1,但在随机写入、碎片化严重的情况下,WAF可能达到3-5甚至更高。

写入放大不仅影响性能,还影响寿命。NAND闪存有有限的P/E循环次数,写入放大意味着用户每写1字节数据,NAND可能承受3-5字节的磨损。一些高端SSD通过"超额配置"(Over-provisioning)预留额外空间给垃圾回收使用,以降低WAF。

垃圾回收还与SLC缓存释放相互影响。当SLC缓存数据被折叠到TLC区域时,会产生额外的写入操作。如果缓存释放和垃圾回收同时发生,写入性能可能进一步下降。一些固件会智能调度这些后台任务,在用户写入暂停时批量执行;另一些则可能让所有任务并行争抢带宽,导致性能雪崩。

四十年演进中的技术权衡

回顾NAND闪存的发展历程,写入速度的波动其实是技术演进的必然结果。

1980年前后,东芝的舛冈富士雄发明了NOR型闪存。1984年,东芝推出世界首款商业NOR闪存产品。NOR闪存每个单元独立寻址,读取快但写入慢、密度低。1987年,东芝提出了NAND架构,将多个单元串联起来共享位线选择管,牺牲随机读取性能换取更高的存储密度。这是第一个重大权衡。

2000年代中期,MLC闪存开始普及,容量翻倍但写入速度下降。SSD厂商引入写入缓存(通常是DRAM或预留的SLC区域)来弥补性能差距。这是第二个权衡。

2010年代,TLC成为主流,QLC开始出现。存储密度进一步提升,但直接写入速度跌至SATA SSD的水平。伪SLC缓存成为标配,但引入了"缓存耗尽"这个新问题。这是第三个权衡。

2017年后,3D NAND技术成熟,通过垂直堆叠存储单元来增加密度。3D NAND的单元尺寸更大,电气特性更好,编程速度有所改善。但层数从32层增长到200多层,制造良率和可靠性面临新挑战。这是第四个权衡。

每个权衡背后都是成本压力。用户想要更大的容量、更快的速度、更低的价格,但这三者很难兼得。SLC缓存是一种折中——用更少的容量换取更高的临时性能。但缓存有限,终有耗尽之时。热节流是另一种折中——用性能换取可靠性,防止高温损坏芯片。垃圾回收是必须付出的代价——NAND不能原地覆写的物理限制使然。

对于用户而言,理解这些权衡有助于管理预期。SSD规格书上的"最大写入速度"通常是SLC缓存内的峰值速度,而非持续写入速度。视频剪辑、大型文件传输等持续写入场景,应该关注缓外性能和SLC缓存大小,而非峰值速度。

在约束中寻找最优解

没有完美的存储技术,只有在特定约束下的最优解。SSD写入速度的波动,是存储工程师在物理定律和市场需求之间反复博弈的结果。

NAND闪存本质上是一种"有缺陷"的存储介质:不能原地覆写、有有限的写入寿命、写入前必须擦除、编程速度与电压精度强相关。工程师用各种技术手段掩盖这些缺陷——SLC缓存掩盖了TLC/QLC的慢速编程,磨损均衡掩盖了有限的P/E循环,垃圾回收和TRIM掩盖了不能原地覆写的问题。

这些掩盖手段都有代价。SLC缓存耗尽后速度下降;垃圾回收占用带宽;热节流强制降速。当所有掩盖手段同时失效——缓存满了、温度高了、垃圾回收被迫执行——写入速度就会断崖式下跌。

对于日常使用,这通常不是问题。大多数人的写入是突发性的——复制几个GB的文件、保存一个文档、下载一个游戏。SLC缓存足够应对这些场景。但当工作负载变成持续写入——视频渲染输出、虚拟机镜像操作、数据库备份——缓存机制就可能成为瓶颈。

理解技术的边界,才能更好地使用技术。如果你需要持续高速写入,考虑选择缓存策略更保守但缓外性能更好的企业级SSD,或者使用RAID分散写入压力。对于消费级SSD,保持足够的空闲空间可以让动态SLC缓存充分发挥作用,而良好的散热则能推迟热节流的触发。

写入速度的波动不是缺陷,而是设计使然。在物理定律的约束下,这已经是工程师能交出的最好答卷。


参考资料

  1. BittWare, “NVMe SSD Write Performance White Paper” - SLC缓存性能测试数据
  2. TechPowerUp, “Samsung 990 Pro 2 TB Review” - SLC缓存大小与缓外速度测试
  3. ATP Electronics, “SSD Cache Explained: Burst vs. Sustained Performance” - 缓存类型与性能影响
  4. Hagiwara Solutions, “How NVMe SSD thermal throttling works” - 热节流机制与测试数据
  5. The Overclocking Page, “The impact of SLC Cache in performance of an NVMe SSD” - 禁用SLC缓存对比测试
  6. Wikipedia, “Charge trap flash” - NAND闪存电荷捕获技术原理
  7. NVM Express, “NVMe Base Specification” - HCTM热管理协议规范
  8. Eclectic Light, “Why SSDs slow down, and how to avoid it” - SLC缓存大小与写入性能关系
  9. KIOXIA, “Where is Memory Technology From, and Where is it Headed” - NAND闪存发明历史
  10. IEEE Spectrum, “Chip Hall of Fame: Toshiba NAND Flash Memory” - NAND闪存发展历程