西部数据 (Western Digital) 推出的 SN5000S 固态硬盘 (SSD) 近期引起了存储界的广泛关注。这款定位于 OEM 市场的中高端 QLC 硬盘, 采用了全新的 nCache 4.0 缓存算法, 本应带来性能的飞跃。然而, 经过深入测试, 我们发现这款产品存在诸多问题, 尤其是在高占用率和脏盘状态下表现令人失望。本文将从硬件规格、性能测试到算法分析, 全方位剖析 SN5000S 的优缺点。
硬件规格: 密度之王的诞生
SN5000S 采用了西部数据自研的新一代主控芯片, 搭配最新的 B6Q NAND 闪存。主控型号为 A101 000171 A1, 采用 12nm 工艺制程, 大小与 MAP1602 相仿。 B6Q NAND 闪存采用 162 层 QLC 设计, 单 Die 容量高达 1Tb(1024Gb) 。得益于更大的单 Die 容量和先进的封装技术,2TB 容量版本仅需一颗 NAND 芯片即可实现, 这使得 SN5000S 成为目前市面上密度最高的 SSD, 无出其右。
本次评测样品包括 1TB 和 2TB 两个容量版本, 分别来自不同的 OEM 厂商。这种做法也反映了西部数据在供应链管理上的灵活性。
性能测试: 空盘亮眼, 满盘崩溃
空盘状态下的表现
在空盘状态下,SN5000S 展现出了不俗的性能。使用 CrystalDiskMark(CDM) 测试, 不同容量版本的成绩高度接近, 可视为误差范围内。与几款基准盘对比,SN5000S 在 4K 随机读取性能上表现出色, 甚至超过了 PC411 。然而,4K 随机写入性能相对较弱, 低于 PC411 。值得一提的是, 在 4K 混合读写测试中,SN5000S 表现惊人, 超越了 P41P, 仅次于顶级 SSD PVC10 。
切换到 Ubuntu 23.04 系统, 使用 FIO 工具进行更精确的测试。结果显示,SN5000S 的 4K 随机写入性能确实出色, 但 4K 随机读取性能与 CDM 测试结果相反, 在高队列深度下仅能达到 600K IOPS, 限制了其整体表现。不过, 混合读写性能依然令人印象深刻, 无论在高队列深度还是低队列深度下都表现出色, 证明了 nCache 4.0 算法在空盘状态下的优秀设计。
在 PCMark 10 存储测试中,1TB 版本获得了 3281 分的高分, 超越了 PM9A1, 接近 SN810 和 SN850 的水平。 2TB 版本略逊, 得分为 3245 。虽然这个成绩在所有样本中属于不错水平, 但考虑到 SN5000S 比 SN580 具有更高的标称顺序传输速率和更优秀的 4K 混合性能, 这个得分并不算特别出色。
3DMark Storage 测试中,SN5000S 的表现中规中矩。 1TB 版本得分 3481, 而 2TB 版本仅为 3080, 性能下降明显。考虑到 QLC SSD 通常不会用作仿真和计算的缓存盘, 这项测试的重要性相对较低。
满盘状态下的灾难性表现
然而, 当填充率达到 75% 时,SN5000S 的性能急剧下降, 表现堪称灾难。性能下降幅度远超预期, 即使是以回收策略懒惰著称的 Ti600 和 BM9C1 也不至于如此。
通常情况下,QLC 和 TLC SSD 可以通过全盘填 0(Full0) 操作来解决高脏盘度问题, 强制进行垃圾回收 (GC) 和 SLC 缓存的回写 (WriteBack) 释放。然而,SN5000S 在这方面表现异常:
- 1TB 版本无论如何都无法恢复性能,PCMark 10 得分仅为 1283 分, 已经接近 SATA SSD 的水平。
- 2TB 版本在 75% 填充率下的性能相对较好, 但仍然存在显著下降。
- 3DMark Storage 测试分数也出现巨大跌幅, 已经可以与 SATA SSD 一较高下。
为什么会出现如此大的性能下滑? 许多人可能会认为这是由于缓存耗尽 (缓外) 导致的。然而, 通过深入分析 PCMark 10 的子项目成绩, 我们发现真正的问题并非如此简单。
在进行 75% 填充率测试之前, 第二个 SN5000S 样品经过了手动填 0 和 TRIM 操作, 以确保 SLC 缓存的强制释放。然而, 结果显示, 真正灾难性的表现出现在 4K 随机读写项目上, 尤其是 CPS2 和 CPS3 测试中。相比之下, 顺序写入性能的下降幅度并不大。
对比两次 3DMark 测试结果, 我们发现读取相关的项目下降更为严重。这让我们得出一个重要结论: 导致 SN5000S 在高填充率下灾难性表现的主要因素不仅仅是缓存耗尽, 更大的问题在于其极其糟糕的 FTL(闪存转换层) 算法。即使在轻度脏盘状态下,SN5000S 也会出现严重的性能下降, 尤其是在 4K 随机读取方面。
nCache 4.0 算法分析: 失败的设计
通过深入分析, 我们可以将 SN5000S 的问题归结为三个主要方面: 令人疑惑的 SLC 缓存策略、非常诡异的垃圾回收 (GC) 策略, 以及在高度脏盘下极其失败的 FTL 映射表现。
1. 糟糕的 SLC 缓存策略
SN5000S 采用了一种非常特殊的 SLC 缓存算法。通过 FIO 测试, 我们发现其缓存外的写入速度呈现高度离散的特点, 形成了三条明显的直线:
- 最上方:SLC 写入+回写释放的最高速度, 约 300MB/s
- 中间: 缓存外的算术平均速度, 约 209MB/s
- 最下方:SLC 写入+回写惩罚的最低速度, 仅 76.8MB/s
这种高度离散的表现意味着用户在实际使用中会经历严重的性能波动。更令人费解的是,SN5000S 并非采用单纯的全盘模拟策略, 而是在缓存外阶段使用了类似于 2263XT/2259XT 的折叠算法。数据不会直接写入 QLC 区块, 而是必须先写入动态或静态的 SLC 缓存, 同时将其他数据释放到 QLC 区块。
这种设计导致了一个荒谬的数据流转过程:
- 主机写入数据到 SLC 缓存
- SLC 缓存空间不足, 释放数据到 QLC 区块
- 一边填充 SLC 缓存, 一边写入 QLC 区块
- 在高填充率情况下, 可能还会出现数据先经过动态 SLC 缓存, 释放到 QLC 后, 又因为 QLC 中的读改写 (REW) 操作再次经过静态 SLC 缓存, 最后再回到 QLC 中
这种算法不仅无法优化写入速度, 也无法减少写入放大 (WAF), 反而因频繁的数据释放和动态映射严重增加了 FTL 的负担。
2. 莫名其妙的垃圾回收和回写策略
SN5000S 的垃圾回收 (GC) 策略同样令人费解。无论是 TRIM 还是 FSTRIM 命令都无法有效改善其性能, 甚至 BIOS 中的安全擦除 (SE) 功能也无法正确生效。然而, 即使在闲置状态下,SN5000S 也会自发进行 GC 和回写操作, 但其方向是从 QLC 区块向 SLC 缓存转移数据。
根据西部数据的内部文档,nCache 4.0 会尽可能将 QLC 区块内的数据转移到 SLC 缓存中, 直到空间耗尽。这种做法与前文提到的 SLC 缓存策略相结合, 造成了一个荒谬的循环: 数据在 SLC 缓存、 QLC 区块和静态 SLC 缓存之间不断往复, 最终又回到 SLC 缓存中。这种设计不仅浪费了大量的 I/O 资源, 还严重影响了整体性能。
3. 失败的 FTL 设计
SN5000S 最大的问题在于其 FTL 在脏盘状态下的表现极其糟糕。在性能异常时,SN5000S 的读取性能会彻底崩溃, 而顺序写入性能相对较好。使用 FIO 进行 4K 随机读取测试, 结果令人震惊: 仅有 17K IOPS 的读取性能, 这个数字甚至低于许多入门级 SSD 。
造成这种情况的原因可能与 SN5000S 的 SLC 缓存策略有关。由于 nCache 4.0 的某些特性,FTL 似乎只对 SLC 缓存内的数据进行优化 (更可能是静态 SLC 缓存) 。这也解释了为什么 2TB 版本的性能明显好于 1TB 版本。
在高占用率和中等脏盘度的情况下, 数据随机分布在所有物理空间中。频繁的 NAND 内大量不同区块间数据读取和读改写操作不仅增加了读写延迟, 还极大地增加了 FTL 查找的开销。即使在 TRIM 和全盘填 0 后,FTL 的映射问题依然存在, 导致性能直接崩溃。
结论: 高密度之下的算法失败
尽管 nCache 4.0 算法在某些方面表现出色, 如空盘状态下的优秀性能和看似较高的平均缓外速度, 但其在高占用率和脏盘状态下的表现令人失望。 SN5000S 的问题主要源于以下几点:
- 复杂而低效的 SLC 缓存策略
- 不合理的垃圾回收和回写机制
- 在高负载下性能严重下降的 FTL 设计
值得注意的是, 这些问题在 2TB 版本中得到了一定程度的缓解, 主要得益于更大的物理空间。然而, 整体而言,nCache 4.0 算法的设计仍然存在诸多疑问。
西部数据在 SN5000S 上的尝试可以说是一次有趣但不太成功的实验。虽然在某些特定场景下表现尚可, 但频繁出现的性能问题和难以解决的算法缺陷, 使得这款产品难以在高端 SSD 市场中立足。对于消费者而言, 在选购 SSD 时需要谨慎考虑 SN5000S, 尤其是在需要稳定高性能的应用场景中。
未来, 西部数据需要在 QLC SSD 的算法优化上投入更多精力, 以期在保持高密度优势的同时, 提供更加稳定和可靠的性能表现。只有这样, 才能在日益激烈的 SSD 市场中保持竞争力。
参考文献:
- HOMOLAB. (2023). QLC+nCache4.0? WD SN5000S 算法分析. 微信公众号文章.