彻底搞清SSD原理: TLC能擦写3000次, 为什么1T SSD 只能写 600T? 您所在的位置:网站首页 m2固态速度大概多少 彻底搞清SSD原理: TLC能擦写3000次, 为什么1T SSD 只能写 600T?

彻底搞清SSD原理: TLC能擦写3000次, 为什么1T SSD 只能写 600T?

2024-06-09 01:55| 来源: 网络整理| 查看: 265

严格来说, 我们口头说的「写入次数只有 N 次」代表的是「NAND 上的某种 Cell 的 P/E(编程/擦除)有 N 次」.

更可靠的描述是: 按照特定的写入模式(如 JESD-219 或者纯顺序写入), 这块 SSD 能有多少写入量(TBW); 或者在一定年限内, 以特定的写入模式, 每天能完成多少次全盘写入(DWPD).

至于 SSD 为什么有寿命限制, 这就要说到 SSD 的 NAND 芯片的底层结构, 也就是浮栅晶体管的特性.

这里引用下面这个专栏的部分内容: 一刀:NAND系列-Threshold Voltage & Vt Distribution

简单来说: 浮栅晶体管内电子的多少, 会影响到下面沟道通过电流的阈值电压.

好比说我现在有个 SLC 的 Cell, 我给他加一个 3.5V 电压.

如果有电流通过, 代表 3.5V 大于了 VT1 状态的电压范围, 即意味着当前浮栅内电子不多, 是没有充电的擦除后状态, 即代表了状态「1」.

反之若没有电流通过, 说明当前浮栅是充了电的状态, 阈值电压 VT0 大于读取的 3.5V, 代表了编程的状态「0」.

如果我们能实现更多的读取电压, 让充电电压更高, 擦除放电的更彻底, 从而实现更高的精度, 那就意味着我们能用一个 cell 表示更多 bit 的状态.

但是这样做的问题就是:

更多状态的判断依赖更高的精度(信噪比), 而随着编程/擦除的过程, 浮栅两侧绝缘氧化物的损耗, 电子的保留能力会下降, 导致信噪比会显著下降

编程到特定电压、读取更多的状态会更麻烦, 表现为速度下降

最高状态的充电电压更高, 擦除放电的电压更低, 会更加剧浮栅两侧绝缘氧化物的损耗

这就是为什么 NAND 单个 cell 从 SLC 时代的 SLC 标称 10 万次, 掉到 MLC 的一万次, 再掉到 TLC 的三千次和一千次.

从阈值电压分布的角度看, 经历一定次数的 PE 后, 状态之间的分界就不是那么明显了, 此时就无法判断这个 cell 是什么状态了.

但是, TLC 不代表他不能当作 SLC 使用. TLC Cell 还是可以像 SLC 那样, 只用一个特定电压的充电状态. 只要始终把 TLC Cell 当 SLC 用, 这样就可以获得与普通 SLC 近似甚至是更好的寿命.

但是 NAND 可不能按照 Cell 写入. 实际上的 NAND Cell 之间会编组成字线、再组成 Page 页. 

其中 Page 是 NAND 上最小写入单位, 而一系列 Page 之间共享用于擦除的衬底, 这就组成了最小擦除单位 Block 块.

就比如下面这个 nand 一个页面有 2K 字节+64 字节的 ECC 校验(校验挂了说明这个页面所在的块可能有问题了), 然后一个块有 64 个页面. 上面的页面要按顺序写入, 然后一起擦除.

这样的编程/擦除模式就需要特殊的写入策略, 如下图所示.

于是就引出了另外一个问题: 既然NAND编程、擦除的粒度会大于用户 IO 操作的大小, 那在用户眼里看来可能写了 1GB, 但可能消耗掉了 0.8billion 的 P/E 次数, 相当于消耗了 2.4GB 的写入寿命. 写入被放大到了顺序写入的 2.4 倍.

而且如刚才所说, TLC/QLC Cell 的写入速度较慢, 所以有的厂商为了 SSD 达到更好的顺序写入性能, 主控除了调用专用的 pSLC 模拟区域进行加速, 可能还会调用用户的TLC区域、以SLC模式写入, 然后还要以 TLC 模式写回.

这样在用户看来写了 1GB, 实际等效写入了 4GB (1GB 会以 SLC 模式写在原来 3GB 的 TLC 区域上, 然后转写到另外 1GB 的 TLC 区域), 写入放大高达 4 倍.

但是如果只用 OP 预留区域里面的 pSLC 空间写入, 虽然一个 cell 的容量只有 TLC 模式的 1/3, 但是寿命是 TLC Cell 的 30 倍多.

比如 3GB的 TLC 做成 1GB 的 pSLC, 能承受 100TB 的写入量, 而 3GB TLC 只能承受 9TB, 两者差了一个数量级.

所以根据各种 SSD 的设计(变量和开关), 有一张表格总结了上述做法对写入放大影响.

当然, 我们现实中的写入肯定不是完全理想的顺序写入, 也总有厂商实现了比较差的垃圾回收策略, 或者激进的全盘 SLC 模拟导致更快折寿.

这就是为什么 SSD 厂商的保修有两个条件: 

一定年限(常见如五年)

一定条件的写入量(常见为 JESD-219 下的寿命表现)

所以之前很多人用 PCEVA 的 1TB SSD 写入 3000TB 论证如今的 SSD 很耐用, 实际上忽视了他们的顺序写入测试方法的写入放大 WAF=1. 

因此这里就有个比较令人纠结的地方:

SSD 标称耐久度一般是通过 JESD-219 计算而来(理论上考虑了高端 SSD 大 OP 带来的寿命加成, 当然也会根据产品定位适当削减寿命, 从而降低售后成本)

当前健康度通常是按照磨损程度报告(但也有会参考主机写入量, 看具体实现)

计算保修的时候看的是主机写入量

所以像 PCEVA 的 3PB 写入测试, 顺序写到 1PB 的时候理论上都大于了厂商标称寿命, 也就是会丧失保修. 但是由于磨损平衡的存在, 绝大多数 block 并没有到 P/E 极限, 不会产生坏块导致重分配, 健康度并没有全部归零.

按照健康度消耗的比例, 可以估算出至少有三款产品得到 3PB 才掉到 0% 的健康度, 正好是 1TB*3000 次写入.

但是, PCEVA 3PB 写入测试总结的时候说「官方标称耐久度...是未考虑写入放大倍率的主机写入量标准」是错误的.

就如我刚才所说, 他们「没有注意到厂商标称耐久度一般是通过 JESD-219 计算而来的 footnote」. 因此总结的前提是错误的, 「当前原厂3D TLC闪存普遍具备3000PE以上的擦写寿命,“倒退式发展”的论调可休矣」的结论也就无法成立.

所以为什么会倒退式发展呢? 看下写入放大表就知道了:

主控策略、性能存在问题, 垃圾回收表现不好

预留 pSLC 减少, 影响垃圾回收, 重复写入区磨损更多(less endurance)

主控的磨损平衡实现较差

缓外写入慢, 从而不得不开启全盘模拟 SLC 缓解性能, 造成写入放大

这些问题其实都指向了一个问题: cost down, 厂商为了省钱而缩水了很多性能, 虽然消费者一定程度上也能受惠于 cost down 带来的成本下降, 但 QoS 也由此更加明显, 换句话说就是一分钱一分货

顺带这里至于最近讨论热度较高的 SWAP 磨损 SSD 的问题, 这里再做一些补充.

之所以可以通过「主机写入量/健康度消耗百分比」得到「预期写入量寿命」, 以及通过「使用时间/健康度消耗百分比」得到「预期寿命时间」, 这个逻辑建立在两个前提:

用户的写入量代表了真实场景下的各种写入

测试时间时间越长, 越具有代表性, 随机误差也越低

至于讨论较多的 SWAP 问题, 由于 ARM64 平台页面大小为 16KiB, 等于 TLC SSD 原生的 16KiB页面, 大于 pSLC 页面; 加上内核的页面交换可以实现一个小的 buffer 聚合多个压缩后的页面转入外存, 所以写入放大是有限的

原则上, 回报的健康度基于区块的磨损程度得出, 代表了真实情况下的磨损, 体现了写入放大

不管是 Mac 还是 iPhone, 都可以使用诊断工具输出苹果存储主控 ASP 的日志, 可以看到 intermediate 代表的 10K PE 的 pSLC 区域, 以及 TLC 模式的 User 区域都是 2% 的磨损程度, 反映到 SSD 寿命(used percentage)为 2%

反而有的人张口用 PCEVA 的 3PB 写入论证 SSD 寿命, 其实是不符合实际的. 毕竟真实的工况可不是如此理想的顺序写入.

而且根据 asp 的 log 可以得出 NAND 上真实的字节数量, 可以发现苹果 SSD 的物理容量, 大于标称 1000 进制 GB 数(如 256 GB)对应的 1024 进制 GiB 数(256GB 对应 256GiB). 也就是 OP 预留量大于传统的 7.4% 水平.

如 512GiB 对应 549,755,813,888 bytes(约 549.8GB), 实际上 512GB 的 M2 MBA 物理上有 581GB, 虽然用户到手只有 500.5GB, 但是这样算起来 OP 的比例是 16%, M1 Max 的 Mac Studio SSD 的 OP 更是达到了 25% 的水平.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有