在消费者市场, 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资讯, 请通过下方⼆维码添加我们的微信公众号。