2023年度消费级SSD评测和购买建议

在消费者市场,  SSD持续替代HDD成为大众存储设备的首选 。如何选择SSD? 我们在最近⼀年多时间里 测试了市场上大部分主流产品,现在我们将测试结果整理到这篇文章中,希望能帮助大家更好地理解和选择SSD。

我们使用了从市面上采购的通用计算机作为我们的测试平台,并且通过Quarch PAM实现了通用平台无 法提供的能⼒,  包括:

1. 对测试盘掉电 、上电,

2. 精确地抓取测试盘的功耗,  特别是低功耗状态的功耗,

3. 通过监测CLKREQ#信号,  确认测试盘在低功耗状态时是否进⼊了L1.2模式。

下面是我们测试平台的具体信息。

测试主机 Dell Precision 3560 Mobile Workstation
CPU 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
内存 32GB
OS Ubuntu 22.04
PCIe Gen4x4 M.2
测试软件 PyNVMe3
功耗测量设备 Quarch Power Analysis Module + Gen4 M.2 PAM Fixture

1. 测试的目标

SSD的测试需要覆盖其功能 、功耗 、性能 、可靠性等诸多方面。

1.1. 功能

SSD产品⼀般都会通过⾏业的认证测试,  譬如UNH-IOL的NVMe协议测试 。但是这类测试只会覆盖最基 本的功能和场景,  并不能保证产品的质量 。市场上的SSD产品有好有坏,  但他们都会通过这些认证测试。

各个SSD⼚商的测试能⼒差异很大,大⼚会在基本功能测试的基础上进⾏更深⼊的测试,  提升测试的强 度和覆盖度 。譬如HMB特性,除了其基本功能,⼚商还需要在主机异常操作 、甚至是内存故障的时候, 保证SSD盘能正常⼯作 。这类测试需要SSD盘的生产⼚商有能⼒实现各种不同的系统级操作,  而不是仅 仅利用现成的操作系统和软件来做测试。

在过去的五年中,  我们开发了⼀套专业的NVMe SSD测试⼯具,  PyNVMe3 。作为⼀个独立第三⽅测试 平台,PyNVMe3已经被多个NAND/SSD⼚商和PC⼚商采用,  应用于新品研发和导⼊测试 。很多⼚商在 PyNVMe3的基础上⼜自⾏研发了成百上千的测试脚本,  涵盖NVMe协议 、TCG协议 、ZNS 、掉电 、功  耗 、性能 、可靠性和压⼒等各个⽅⾯ 。通过这些测试,  PyNVMe3可以帮助⼚商便捷地实现各种不同的 host操作,以便更早地发现问题,  提升产品的质量。

1.2. 性能

很多消费级SSD产品的评测只能把目光集中在性能上,  但其实要做到有意义的性能测试依然是很不容易 的 。大量的测试⼯具都是在重复测试顺序读写或者基本的随机读写速度,  也就是跑分 。但是跑分的结果 和实际使用体验相去甚远 。除了常⻅的顺序和随机读写性能,  我们还需要关注更多细节,  以更贴近用户 实际体验的⽅法去收集性能数据 。我们在第⼆章中会深⼊探讨这部分内容。

1.3. 功耗

可移动设备对功耗的要求越来越高,  SSD也不能例外 。在⽇常使用中,  SSD盘在空闲的时候会进⼊低功 耗状态;  出现读写请求时,  ⼜会立刻退出低功耗状态 。低功耗测试要实现以下三个⽅⾯的目标:

1. 精确测量低功耗状态下的功耗值,

2. 进⼊和退出低功耗状态的时间,

3. 频繁进⼊和退出低功耗状态的稳定性。

PyNVMe3对低功耗状态实现了全⾯的测试 。我们利用Quarch的Power Analysis Module  ( PAM)  测试⼯ 具来抓取精确的功耗数据 。PAM可以使用在任意笔记本和台式电脑的M.2插槽上,  获得更接近用户实际 使用环境的测试数据 。下表是⼀些盘在低功耗状态下的功耗和退出时间。

  PS4功耗 mW PS4退出时间 ms
TiPlus7100 2.3 21.9
990Pro 4.9 2.1
SN770 14.5 14.0
P41 257.6 7.7
980Pro 2043.0 0.4

PS4的功耗越低越好,  因为通常我们使用电脑的时候,  大部分时候SSD都处于空闲状态 。甚⾄有些笔记 本电脑的低功耗做的⾮常好,  用户完全可以像使用⼿机那样,  只要合上屏幕就可以过夜了;  再打开屏幕 的⼀瞬间,  就可以继续使用 。低功耗状态下,  SSD内部的很多模块会被降低时钟频率甚⾄完全掉电;  退 出低功耗恢复⼯作状态时,  需要逐步对这些模块上电或者恢复正常的时钟频率 。⼀般⽽⾔,  功耗降得越 低,  退出低功耗的时间也会越⻓ 。这个退出时间只要不超过100ms,  用户就不会感觉到卡顿。

进⼊低功耗的时候,  在盘降低某些模块的时钟频率甚⾄关闭电源的过程中,  PyNVMe3的测试脚本会在  不同的时间点发送新的读写命令,  去打断这个进⼊低功耗的过程 。这种压⼒测试可以确保在不同的时间 点下,  测试盘都可以正常进⼊并退出低功耗状态 。我们发现有些盘在进⼊低功耗之后有时会⽆法退出, 导致测试盘⽆法响应后续读写命令。

上⾯我们讨论的是低功耗,  也就是SSD盘空闲时候的功耗 。另外,  我们还需要关注SSD盘在⼯作状态下 的功耗,  这时我们把性能和功耗结合起来考察 。下表是顺序读的性能和功耗,  ⼆者相除表示固定能量处 理的数据量,  越大越好。

  顺序读性能 MB/s 功耗 mW 能效 GB/J
TiPlus7100 5812.128 3422.793 1.70
SN770 5062.608 4262.709 1.19

不论在空闲状态还是⼯作状态,  TiPlus7100的功耗表现都比较好,  优势明显。

1.4. 可靠性

SSD的可靠性⾮常重要,不能丢失用户的数据 。⼚家为此需要在NAND颗粒 、主控 、固件等各个⽅⾯做 大量测试 、统计和调校 。用户使用SSD的场景各不相同,  性能优化可以只针对某些场景,  但是数据可靠 性需要在所有场景下都能保证 。譬如SSD盘可以24×7连续⼯作⼏个⽉,  也可以断电放置⼏个⽉,  这些不 同的使用习惯对SSD的数据可靠性提出截然不同的考验 。PyNVMe3利用CRC实现了高效的数据校验能⼒,  可以在任何测试场景中实现透明高效的数据检查功能。

另外,  我们也可以通过延迟分布来预测数据的可靠性 。下图是⼀个盘在刚写完数据之后 、以及掉电放置 2个⽉之后读全盘数据的延迟分布 。可以看到两个⽉后有大量的数据需要100ms 、甚⾄1秒才能读出来。 ⼀⽅⾯,  ⻓延迟会导致用户使用体验变差;  另⼀⽅⾯,  这么⻓的延迟通常意味着NAND数据可靠性变    差,  需要依赖LDPC解码出正确的数据 。暑假结束后,  如果大家发现⾃⼰的电脑变慢很多,  建议检查⼀ 下SSD的SMART数据。

初始状态

两个月后

对于各种不同使用场景的可靠性,  PyNVMe3可以利用其ioworker灵活地制造各种IO序列,  用来检查测试 盘在不同场景下以及不同场景切换时的可靠性。

2. 性能测试

上⾯我们大概探讨了SSD测试需要关注的⼏个方⾯ 。本章我们继续深⼊探讨性能测试,  特别是⼀些贴近 用户实际使用体验的性能测试用例。

2.1 低负载性能

很多性能测试需要创建多个很深的队列,  并直接把负载拉满 。但实际使用中,  低负载才是主流场景 。譬 如我们浏览网⻚ 、写文档 、甚至看在线视频,  对SSD的负载都是⾮常小的 。我们测试低负载的性能主要 看读写命令的完成时间,  也就是延迟 。如果某些命令的延迟大于300ms,  使用者就可能会感受到卡顿 。 我们在这类测试中会固定每秒下发命令的数目,  并收集每个命令的延迟。

延迟 (ms) 10 IOPS 99% 4K 1QD 99.9% RW/Trim mixed 99.9%
S50Pro 1.824 0.122 78.861
SN770 102.830 0.179 16.043
NM710 >999.999 0.142 293.858

2.2. 0秒性能

在互联网还不发达的时候,  我们经常会拷贝很大的电影或者数据库文件,  所以我们⾮常在意持续读写的速度 。但是在互联网时代,  这种使用方式已经不再是主流 。而且随着SSD性能的提升,  很多大文件的拷贝时间也只需要几秒钟 。在这种情景下,  我们非常重视SSD的0秒性能,  要求读写的速度能很快拉满 。  下面是2块不同的测试盘顺序读的性能曲线,  尽管他们总体性能很接近,  但第⼆块盘的0秒性能明显是有问题的。

2.3. 延迟分布

我们平时用电脑最恼火的事情就是卡顿 。可能打开⼀个word文件会卡很久,  可能打开⼀个网站会卡很久,可能编译代码会卡 。如果上面三件事情在同时进行,  那卡顿的可能性就更大 。有些卡顿问题来自于 存储 。SSD号称的快通常指读写带宽,  但在卡顿问题上我们更在意读写的延迟,  特别是最大延迟 。最大 延迟这个指标非常重要:  譬如我们打开⼀个word文件需要同时从SSD读取10个数据,  用户感受到的不是 这10个数据的平均延迟,  而是最慢的那⼀个 。但SSD在最大延迟这个指标上面,  并不是天然优秀。

good

bad

如上图1是⼀个延迟分布非常好的例⼦,  绝大部分IO的延迟集中在很短的时间范围内, 但图2的延迟分 布就相对差⼀些。

2.4. SLC缓存释放速度

很多评测数据是在空盘的时候测试写⼊速度,  也就是所谓的SLC缓存写⼊速度 。这个速度是盘能提供的 最大写⼊速度,  跑分⼀定好看 。但是在实际使用中,  SSD肯定不会是空盘,  甚至会是接近满盘的状态。

这就意味着SLC缓存的效果会大打折扣 。如果断断续续有很多写操作,  后面的数据就会被直接写到    TLC/QLC上面,  导致性能下降 。所以SSD盘⼀般在空闲的时候会尽量把SLC缓存里面的数据再次写⼊ TLC/QLC,  释放SLC缓存空间供后续的写操作使用。

在实际场景中,  我们看重SLC缓存的释放速度,  考察盘在空闲的时候能不能尽可能快地把缓存数据搬移 出去 。这个项目对QLC SSD尤其重要,  因为QLC的写⼊速度特别慢,  而其SLC缓存也会比较⼩ 。如果不 能发挥其SLC缓存的作用,  QLC固态硬盘的写⼊性能会更像机械硬盘。

该项测试由4轮写操作组成,  每轮的空闲时间逐个变长 。如下图所示,  空闲时间越长,  期望被释放出来 的SLC缓存越多,  因此SLC的写⼊性能可以维持越长的时间 。通过这个测试,  我们也可以估算出空闲时 SLC缓存的释放速度。

2.5. 满盘性能

空盘的性能是最好的,  因为这个时候的读写操作通常发生在SLC缓存内 。但日常使用时,  大部分时候盘 都不会是空的 。我们在盘的不同空间占用水平  (例如10% 、50% 、90%等)下测试SSD的性能 。总体  上,  盘越满,  性能越低,  写性能尤其明显 。下表是顺序写在不同空间占用水平下的性能。

单位:  MB/s 10%空间占用 50%空间占用 90%空间占用
TiPlus7100 5141.568 2283.801 2001.968
990Pro 5535.679 1661.820 1421.784
P41 5519.930 1735.471 955.609
Rocket4Plus 5372.183 1097.728 771.419

10%空间占用  ( 基本空盘)  时候的写入性能都很好 。但盘买来肯定是要用的,不可能⼀直是空盘 。我们 看到50%空间占用的时候,  所有盘的性能都出现大幅下降  ( 因为SLC缓存用完了)  。到了90%空间占用 的时候,  写入性能进⼀步下降 。大家可以根据自己的使用习惯,  参考50%或者90%空间占用时的写入性能。

2.6. 老化性能

很多厂家的标称性能是对新盘测试得到的,  但是当SSD盘用了⼀段时间,  NAND的PE被消耗⼀部分之 后,  性能还会保持吗? 我们测试了不同PE消耗水平  (例如300PE,  600PE,  900PE等)下的顺序写性 能,  发现有些盘会出现明显的性能衰减 。很明显,  这里不建议大家购买⼆手SSD。

单位:  MB/s TiPlus7100 顺序写 NM710 顺序写
300 PE消耗 2671.769 2336.024
600 PE消耗 2661.653 720.599
900 PE消耗 2665.166 716.710

2.7. 性能⼀致性

上⾯我们看到的性能数据都是在测试周期内的性能平均值 。我们总是⼀厢情愿的认为SSD应该提供⼀个 很稳定的性能 。但事实上有太多可能导致性能的抖动,  甚至是间歇性休克 。如下图,  在顺序写的时候, 测试盘出现了周期性的性能降到0的休克现象 。对应到具体使用场景,  如果用户在拷贝⼀个大文件的时 候还在浏览网⻚,  那可能就会遭遇到周期性的卡顿问题了。

至于产生性能抖动的原因其实有很多可能,  譬如:  盘内部回收垃圾数据  ( GC)  、高温保护,  等等 。上  图中红色线是温度曲线,  可以发现当红色线上升到⼀个温度阈值的时候,  开始出现周期性的性能休克现 象 。所以这里的问题应该是由高温保护机制造成的 。以后SSD要上车,  这⼀点⾮常重要!

2.8. 混合性能

标称性能通常是纯读或者纯写的性能,  但实际使用中读写可能混合在⼀起 。有多种可能的混合方式,  譬 如不同比例的读写混合 、读写和Trim命令混合 、和Admin命令混合,  等等 。我们发现在混⼊Trim命令    后,不同盘的性能差异⾮常大 。而在混⼊admin命令后,  差异会更大:  有些盘响应admin命令的时间甚 至会高达数秒 。这些问题在大压⼒的场景下会影响用户的使用体验。

  读写混合 KIOPS 读写Trim混合 KIOPS
P41 218.772 11.671
990Pro 510.325 6.936
980Pro 267.420 1.355

在上表中我们可以注意到980Pro的Trim混合性能并不好,  但这个问题在后续的990Pro上得到了修正。

2.9. 上电时间

还有⼀类性能是上电时间,  就是盘在各种情况下,  从上电到完成第⼀笔读命令的时间 。上电时间在正常 掉电和非正常掉电的情况下会很不⼀样 。下图是⼀个盘500次非正常掉电后的上电读操作完成时间,  分 布在1-5秒之间 。而对于正常掉电,  这个时间基本稳定在0.2秒以内。

另外,  在功耗测试中我们也会统计各种低功耗状态的退出时间 。我们的测试可以控制测试盘在不同时间 点  (精确到us)  退出各种低功耗状态,  并测量退出过程所需要的时间 。可以看到当盘进入低功耗状态的 时间越久,  其退出时间会越长。

上图的低功耗退出时间控制的比较好 。但有些盘的退出时间就比较长而且发散,  这样也会影响到用户的 使用体验。

3. 影响SSD性能和可靠性的各种因素

3.1. 封装

在实际使用中,  首当其冲的问题是散热问题 。以前SATA SSD盘性能低 、尺寸大,  所以发热并不严重 。 但是进入到NVMe SSD时代,  盘的性能成倍增⻓,  而尺寸却变得更小,  SSD的温度问题就暴露出来了 。 有些盘在短时间内读写的性能⾮常好,  但是当测试时间拉⻓,  温度上升到⼀个阈值后就触发了高温保护 机制,  性能随即下降。

上图是⼀个2230封装形式的产品 。我们测试了相同型号的2280封装的产品,  结果如下 。可见,  2280封 装由于散热更好,  性能也更稳定。

3.2. SLC缓存

现在的消费级SSD基本都是使用TLC NAND,  以后会过渡到QLC NAND 。为了提升使用体验,  所有消费 级SSD都使用了SLC缓存的设计 。SLC缓存在空盘的时候能显著提升SSD的性能 。但当SLC缓存用尽后 需要把数据搬运出去,  以释放SLC缓存占据的NAND空间给后续写操作使用 。这种数据搬运的操作必然 会影响SSD的性能和寿命,  所以SLC缓存是⼀把双刃剑 。不同⼚家在SLC缓存的设计上有不同的选择, 在利弊之间调校出自己的风格。

下图是某块盘分别在FOB和接近EOL时,  顺序填全盘的性能曲线 。绿线是FOB时候的性能,  可以看到   SLC性能维持了很长的时间 。通过计算可以看出,  这块盘把⼏乎所有的NAND容量都用来做SLC缓存, 这种使用⽅式对NAND颗粒的磨损非常大 。当盘达到⼀定的磨损程度后,  SLC缓存空间会逐步调整,  以 保证总的写⼊数据量 。图中红线是盘在EOL时的顺序写性能,  可以看到SLC缓存空间⼏乎消失,  表现出 现的性能特性也是和FOB时候的截然不同。

3.3. PCIe Gen4

现在市⾯上的NVMe SSD基本都是PCIe Gen4规格的 。我们通过PyNVMe3把测试盘配置到不同的速度规 格,  比较其顺序读写的性能和功耗,  如下表。

PCIe speed sequential read (MB/s) sequential read (mW) power efficiency (GB/J)
Gen4 2735 2850 0.96
Gen3 2714 2652 1.02
Gen2 1754 1960 0.89

事实上,  在大部分实际使用场景中Gen4并没有带来更高的性能和使用体验,  反而功耗效率还可能不如 Gen3 。那我们还需要急着上Gen5吗?

3.4. NAND颗粒

目前市场上SSD的颗粒基本都是3D TLC NAND,  但也开始出现⼀些QLC的产品 。  目前QLC盘的各种测 试结果还不理想,  需要时间去优化 、完善 、成熟 。我们也希望早日看到国产的3D QLC NAND颗粒。

3.5. 固件版本

SSD的固件经常会升级,  用来解决⼀些性能 、功能或者可靠性的问题 。我们内部测试经常会遇到⼀些问 题可以通过升级固件解决 。但是升级固件也有⻛险,  因为后续固件版本的测试资源肯定不如新产品的第 ⼀版固件那么多 。我们看到过⼀些产品升级固件后活盘变板砖的魔术。

4. 购买建议

基于10多年的SSD开发经验以及大量的测试数据,  我们提供⼀些SSD盘的采购建议,  供大家参考 。  目前 市场上的NVMe SSD大概可以分成2类产品:  高性能盘和高性价比盘 。我们首先要确定自⼰的需求 。如  果不知道自⼰需要哪类SSD,  大概率应该是高性价比盘。

4.1. 高性能盘

这类产品配备大容量的DRAM,  用于存放完整的SSD管理数据,  有助于显著提高SSD的随机读写能⼒ 。 这类盘虽然价格比较高,  但是可以完整发挥NAND的性能特点,  在大负载的使用场景下提供稳定的性     能 。这类产品通常是2280封装,  但还是强烈建议加装散热片,  并用在台式机中 。高性能盘不适合用在笔 记本和超极本中,  散热问题导致其性能大打折扣。

4.2. 高性价比盘

另外⼀类产品主打性价比 。这类产品通常不会配备DRAM,  而是通过HMB特性从系统DRAM中获取⼀部 分内存供SSD使用 。这类产品为了追求低成本,  通常会让模组⼚或者主控⼚操⼑代⼯ 。如果预算有限, 我们可以考虑这类盘 。但高性价比盘的质量参差不齐,  即便是来自大⼚的某些产品也未必可靠 。根据我 们的测试结果,   目前渠道市场上可以推荐的只有下面2款产品。

西数 SN770

长存 致钛 TiPlus7100

4.3. QLC

这并不是第3类产品,  而是未来的高性价比盘的必然选择 。未来1 、2年消费者应该可以用更低的价格买 到性能够用且可靠的QLC盘 。我们会持续关注这类产品的发展。

4.4. OEM和渠道市场

渠道市场的产品可以从京东或者Amazon上面直接购买 。OEM产品只会供给Dell 、联想 、小米这些PC厂商 。上面提到的高性价比盘在渠道市场上面的产品测试结果并不好,  但是NAND原厂会投入大量的研发 和测试资源,  来保证其OEM产品的质量 。我们不建议大家购买笔记本后自己更换SSD:  渠道市场的高性 价比盘品质普遍不好,  而高性能盘在笔记本中由于散热问题并不能发挥其正常的性能水平。

4.5. 测试盘信息汇总

总体上,  还是符合⼀分价钱⼀分货的道理,  但确实也有个别产品价格高但品质差 。如果预算有限,  我们 推荐512GB的TiPlus7100和SN770,  虽然不是最便宜的选择,  但在我们的测试中表现相当稳定,  性能和 容量也够用 。再多⼀些预算,  我们可以选择1T的P5Plus和KC3000,  容量和性能都会得到⾮常大的提    升 。如果预算⾮常充足,  我们可以选择P41/SN850/990Pro这些产品,  ⾮常适合游戏玩家。

对于大多数⽇常办公和上网的需求,  配备国产NAND和国产联芸主控的TiPlus7100就⾮常适合,功能、 性能 、功耗 、可靠性的表现都相当不错。

5. 关于PyNVMe3

PyNVMe3是⼀个开放 、高性能且可扩展的NVMe SSD测试⼯具 。它配备了专⻔用于测试的NVMe驱动程 序,  内建原生的Python API接⼝,  并提供了⼀整套完善的测试集 。PyNVMe3帮助SSD开发和测试⼯程师高效地开发测试脚本。

PyNVMe3是⼀个第三⽅的可获得的SSD测试平台,有⼀些⼚商在这个公共平台上⾯联合开发和部署测 试脚本,避免了使用内部私有测试⽅案导致的⼀系列IP⻛险。

PyNVMe3的开放性使其能够充分利用Python软件生态,  提高脚本开发的效率  ( 譬如应用AI⼯具来辅助写脚本)  。此外,  用户还可以将PyNVMe3大量部署到各种计算机上,  以此来保护既有投资。

PyNVMe3的高性能源于其用户空间的轻量级设备驱动程序,  该驱动程序能够减少调用操作系统内核的 开销 。这使得PyNVMe3能够产生比其他测试⼯具更高的IO压⼒,  同时获取更准确的性能数据。

PyNVMe3的可扩展性让用户可以通过自⼰的创新来扩展其测试能⼒ 。PyNVMe3⽀持使用Quarch PAM  设备,  也可以通过⼏⾏Python脚本来集成其他测试设备 。用户可以在常规的CI和自动化测试框架中运⾏ PyNVMe3的测试脚本。

PyNVMe3的测试集覆盖了NVMe协议  ( 包括各种正常和异常测试用例)  、HMB注错 、异步上下电 、IO  压⼒ 、低功耗状态切换和TCG等各种测试 。通过大量Python测试脚本,  实现了完全的自动化测试与数据 分析,  保证了测试结果的准确和公正。

最近⼀年,  我们使用PyNVMe3测试集对消费级SSD市场上的多款产品进行了详细地测试,  每块测试盘  的测试周期长达3个月,  并收集了SSD产品在整个测试周期内的各种场景下的性能和可靠性数据 。欢迎 访问我们的官网获取这些测试的基本结果 。如果需要完整的测试数据和测试服务,  请通过电子邮件联系 我们:  sales@pynv.me

作为⼀个独立的第三方SSD测试平台和服务供应商,  我们不断优化和提升我们的测试工具,  为客户提供

快速而周到的服务,提供公正客观的资讯,  希望和业界合作伙伴⼀起做出更好更稳定的SSD产品!

获取更多更新的SSD资讯,  请通过下方⼆维码添加我们的微信公众号。