TLC、QLC 与无 DRAM 固态硬盘
NAND 类型和主控的缓存会如何改变硬盘的行为表现,以及何时值得在意这两者。
更新于
QLC 不是有缺陷的 TLC。它在 TLC 只能放三比特的单元里放进四比特,换来的是 每 TB 成本下降,花掉的则是持续写入速度和耐久度。硬盘是否带有 DRAM 是另一个 独立的问题,只是廉价硬盘恰好都用同一种方式作答。
TLC 和 QLC 的含义
一个闪存单元是一枚容纳被困电荷的存储晶体管。字母表示从这一个单元里能读出 多少比特。TLC(三层单元)容纳三比特。QLC(四层单元)容纳四比特。
比特数之所以重要,是因为 n 个比特需要 2 的 n 次方个可区分的电荷电平。三比特 是八级;四比特是十六级。可用的电压窗口并不会为此加宽,所以从 TLC 换成 QLC, 每个频带的宽度减半,主控必须在它们之间放置的边界数量翻倍:七个读取阈值变成 十五个。
窄频带在读写两边都要付代价。写入意味着把电荷导进一个频带,更窄的目标需要更 多的编程脉冲,每两次脉冲之间还要有一次校验步骤——这正是 QLC 单元编程更慢的 大部分原因。读取意味着判断电荷落在了哪个频带,十五个边界需要更多次的感应扫 描,并且随着电荷随使用时间漂移,对纠错的依赖也更强。读取的代价远比写入小。
而换来的,是从同样的单元阵列中多产出三分之一的比特。
硬盘有多少快速缓存
两种单元类型都把写入速度藏在以每单元单比特运行的闪存区域后面,SSD 速度数 字到底告诉你什么一文讲清了由此产生的曲线。这块区 域从哪里来,决定了你能得到多少。
其中一部分可以是永久的。静态缓存在硬盘设计时就以每单元单比特的形式划出, 无论硬盘是空的还是几乎装满,大小都不变。其余部分则是借来的。动态缓存是 普通的 TLC 或 QLC,临时按每单元单比特写入,之后再折叠回密集形态,因此它来自 空闲空间,并随空闲空间一起缩小。
借来缓存的算术并不仁慈。以单比特运行的单元只能容纳其 TLC 容量的三分之一、或 其 QLC 容量的四分之一,所以以缓存速度吸收 100 GB 的写入,会占住一块 TLC 硬盘 的 300 GB、或一块 QLC 硬盘的 400 GB,直到数据被折叠完毕。针对空盘给出的缓存容 量,报出的是那块硬盘一生中最好的一天。SSD 容量怎么选 一文讲清了这对应该留出多少硬盘空间意味着什么。
折叠是账单的另一半。缓存数据在转入密集形态时会被再写一次,所以主机的一个字 节要花掉闪存两次编程操作:一次在每单元单比特下,一次在三或四比特下。这就是 你主动接受的写入放大,它消耗的是耐久度和后台带宽,而不是你能看得见的时间。 它还要求硬盘不被打扰才能完成。折叠期间继续写入,它就得同时干你的活和自己的 活,因此持续吞吐量可能稳定在原生速度之下,而不是原生速度上。
无 DRAM 硬盘舍弃了什么
SSD 上的 DRAM 并不存放你的文件。它存放的是闪存转换层的映射表,把操作系统 请求的地址转换为存放数据的物理页。这张映射表被不断改写,并且在每次访问时都 会被查询。
给映射表定个规格,整个设计就自然浮现了。映射通常以 4 KB 的粒度进行,每个页 对应一个四字节的条目,也就是每 KB 硬盘容量需要一字节的映射表——大约每 TB 容 量需要 1 GB 的映射表。这就是为什么带 DRAM 的硬盘会按容量比例配备 DRAM,也是为 什么省掉它的代价以同样的方式增长。
没有 DRAM 的硬盘有两个地方可以放映射表。第一个是闪存本身,它把一次分散读取变 成两次:一次取映射表的那一段,一次取它指向的数据。第二个是主机内存缓冲, 这是 NVMe 的一项功能,允许硬盘借用一小部分系统内存,把映射表中最繁忙的部分放 在那里。
这对常见情况是一个真正的修复,但并不是彻底的修复。借用额只是完整映射表所需 的一小部分,所以它容纳的是工作集而不是整张表,而分散在大容量硬盘整个地址空 间上的访问会落空。这是主机拥有的、可以收回的内存,所以硬盘丢不起的东西不会 放进去——它缓存的是查询,不是你的写入。而且它是 NVMe 的功能,所以无 DRAM 的 SATA 硬盘没有任何中间方案:它的映射表只能待在闪存里。
所以差异只在很窄的场景中显现:跨大容量且接近满盘的分散访问,以及一边重写映 射表、速度与读取相当的长时间混合工作负载。其余场景,一个借来的窗口就足够应 付了。
根据你的用途买哪一种
这是两个维度,而不是一把梯子。一块硬盘可以是带 DRAM 的 TLC、不带 DRAM 的 TLC、 带 DRAM 的 QLC、或不带 DRAM 的 QLC。它们之所以让人觉得是一根轴,是因为一个系 列中最便宜的硬盘往往是 QLC 与无 DRAM 的结合体,所以只比较系列两端的人永远看 不到中间。
作为启动盘,优先选 TLC,其余都可以让步。它承受小块的分散写入,常年接近满盘, 而且是最难替换的一块。在操作系统和驱动支持主机内存缓冲的机器上,是否还带 DRAM 就没那么重要了。
至于以长段批量写入、之后被反复读取的大量数据——游戏库、媒体档案、你打算保存 而不是剪辑的素材——QLC 是合理的折中。这些写入以长段的形式到达,你可以接受它 们跑得慢一点;而读取速度虽然也背负了窄频带的部分代价,但两者之间的差距远小 于写入速度。
要避免的组合是:一块被保持几乎满盘、又被持续写入的 QLC 硬盘。它的动态缓存恰 恰在需求最大的时候最小,而底层的速度也是你能买到的最低档。
耐久度是真实存在的,但也容易被夸大。单元有一定次数的编程和擦除循环预算,而 平均到每个单元,QLC 的预算更低,因为更窄的频带经不起每次擦除留下的磨损。但 印在硬盘上的数字并不是按单元计的。它是整块硬盘的总写入量,因此它随单元数量 和留作备用的容量一起增长,一块大容量 QLC 硬盘的额定寿命总写入量可以超过一块 小容量 TLC 硬盘。拿这个额定值去对比你一年写多少,而不是去对比另一块硬盘的单 元类型。SSD 耐久度与保修一文讲清了如何 衡量你写入的数据量,以及这个额定值作为保修条款有多少分量。
为什么商品列表很少告诉你这两者
这两者都不是制造商会稳定公开的信息。NAND 类型和缓存设计在大多数产品页面和几 乎所有零售商品列表中都是缺失的,而且缺失于数据表的情况也相当常见,以至于发 烧友媒体是靠实测而不是靠查阅来确定它们的。
它们还会变化。一个型号可能在生命周期中途被改版——换 NAND 供应商、换主控、去 掉 DRAM——然后在同一名称和型号编号下继续销售,有时甚至同一个包装盒。改版前 写的评测描述的是已不再是出厂状态的硬盘。型号名不能证明即将送到你手里的那块 硬盘里装的是什么,照抄型号名的商品列表同样不能。
正因为如此,当商品列表没有写明 NAND 类型或硬盘是否带 DRAM 时,我们让字段留 空,而不是从型号名去推断。留空的字段记录的是商品列表说了什么。它不是对硬件 的断言。
如何选择 SSD一文把容量、速度和接口排好了顺序, 我们目录中的每一块 SSD 都在同一页上。
常见问题
- QLC 很差吗?
- 不,但它确实不同。QLC 在每个单元中存储更多数据,从而降低了每 TB 的成本,但也降低了持续写入速度和耐久度。对于存放一个以读取为主的大型资料库的硬盘来说,这是一个合理的取舍。
- 无 DRAM 的固态硬盘对日常使用有影响吗?
- 在现代机器上通常影响不大,因为主机内存缓冲(host memory buffer)允许硬盘借用系统内存来存放它的映射表。它会在持续高强度写入以及不支持该功能的机器上显现出来。