机制)
在深入了解NVMe SSD 的缓存Cache机制之前我们需要明确一个大前提固态硬盘SSD的底层存储介质是NAND 闪存Flash Memory。虽然 NAND 闪存读写已经很快但它的物理结构决定了它无法像 CPU 缓存或系统内存RAM那样进行高速、高频且随机的擦写。为了平衡读写寿命、随机性能和制造成本现代 NVMe SSD 内部设计了一套高度复杂的多级缓存架构。日常工程中我们常说的“SSD 缓存”通常包含以下三种完全不同的技术概念1. 物理 DRAM 缓存独立缓存芯片这是高端 NVMe SSD如三星 990 Pro 等旗舰盘的标配。在 SSD 的 PCB 板上除了主控芯片和 NAND 闪存颗粒外还会额外焊接一颗或两颗LPDDR4 / LPDDR5 内存芯片。它的核心作用存放“地图”FTL 映射表DRAM 缓存最主要的功能不是用来缓冲你下载的电影而是用来存放FTLFlash Translation Layer闪存转换层映射表。为什么需要这个映射表操作系统如 Linux/Windows是按逻辑地址LBA读写数据的而 SSD 内部必须把数据写在物理的闪存单元Page/Block上。FTL 就是一张记录“逻辑地址→\to→物理地址”的地图。DRAM 的优势如果每次读写数据主控都要去速度慢、有擦写寿命限制的 NAND 闪存里查阅这张地图延迟会暴增盘也会很快写坏。把这张地图直接常驻在读写近乎无限、延迟极低的物理 DRAM 中SSD 就能实现极高的随机读写 IOPS每秒输入输出次数。行业现状DRAM-Less 盘为了降低成本市面上许多中低端或便携式 NVMe SSD 拿掉了这颗独立的 DRAM 芯片即 DRAM-Less。它们会转而使用接下来的第 2 种技术。2. HMBHost Memory Buffer主机内存缓冲HMB是 NVMe 1.2 协议之后引入的一项硬核技术专门用来拯救上述没有独立 DRAM 缓存的DRAM-Less 固态硬盘。它的工作原理既然 SSD 自身为了省成本没带 DRAM 内存那能不能借用一点电脑主板上的系统内存RAM呢借地盘在 HMB 开启状态下NVMe 主控会通过 PCIe 总线向计算机的主操作系统申请借用一小块系统内存通常只需 64MB ~ 128MB。存放 FTLSSD 同样把最常用的一小部分 FTL 映射表缓存到这块借来的系统内存中。性能表现虽然走 PCIe 总线去访问系统内存的延迟略高于盘载独立 DRAM但相比直接去 NAND 闪存里查表其随机读写性能提升了数倍极大地改善了无缓存盘在小文件读写、系统开机、游戏加载时的卡顿问题。3. SLC Cache模拟 SLC 缓存空间无论你的 NVMe SSD 是带独立 DRAM 还是走 HMB 借内存当你向 SSD 拷贝一个 100GB 的超级大文件时真正起作用、让你看到写入速度飙到 7000 MB/s 的其实是SLC Cache技术。核心背景TLC / QLC 颗粒的先天不足现在市面上的 SSD 绝大多数采用TLC每单元存 3 块数据或QLC每单元存 4 块数据颗粒。为了在一个单元里塞下更多数据主控在写入时必须非常精准地控制电压区分 8 种或 16 种电压状态。这导致 TLC 和 QLC 的原生写入速度非常慢QLC 原生写入可能只有 100MB/s 左右和机械硬盘差不多。模拟 SLC 机制为了掩盖这个缺点主控会在空闲的 TLC/QLC 闪存空间中划出一部分区域进行“降维打击”在写入时不进行复杂的电压克制而是把 TLC/QLC 强行当作只存 1 块数据的 SLC 颗粒来写只需区分 2 种电压状态。速度爆发由于写入逻辑极度简化这块区域的写入速度能够瞬间飙升到物理接口的极限如 PCIe 4.0 的 7000 MB/s。后台释放当你停止写入电脑空闲时SSD 主控会默默启动垃圾回收Garbage Collection机制把这块 SLC Cache 区域里的数据重新压缩、搬运到普通的 TLC/QLC 区域存储释放出缓存空间等待下一次爆发。常见的两个工程痛点“掉速/出缓存”如果你连续写入的数据量超过了 SLC Cache 的容量上限例如缓存只有 50GB你一口气写了 100GB当缓存被塞满且主控来不及搬运时写入速度就会瞬间崩塌跌回 TLC/QLC 难看的原生写入速度。动态缓存空间挤压许多 SSD 采用的是动态 SLC Cache根据剩余空间按比例划分。这意味着当你的 SSD 塞得越满可用的 SLC 缓存就越小大文件写入时就会越快发生掉速。总结三种缓存怎么协同我们在日常挑选和调优 NVMe SSD 性能时它们三者扮演着不同的角色如果你追求极致的数据库并发、高频小文件读写、多任务不卡顿如作为系统盘、编译服务器优先选择带独立物理 DRAM 缓存的旗舰盘如果预算有限至少要确保操作系统开启了HMB。如果你经常需要大吞吐量地拷贝超大视频素材、大模型权重文件你需要重点关注 SSD 的SLC Cache 大小以及“出缓存后的原生写入速度缓外速度”。