SMR 叠瓦盘究竟在什么情况下会显著掉速?

2021-11-26 21:24:28 +08:00
 acess
(先不要吐槽为啥不上固态之类的……)

想拿到公认是 CMR 而不是 SMR 的 ST2000LM003 ( 2.5 寸 CMR 盘里貌似也只有这个型号是 2TB 了,而且据说很多年前就停产了),为此淘了一块希捷 2T 移动硬盘,感觉像赌石,结果这次赌输了,插到电脑上发现是 ST2000LM007 ,网上搜了一圈基本公认是 SMR ,anandtech 当时还有报道。
据说希捷的 2T 移动硬盘是 2016 年 2 月以前出厂才是 CMR 的 ST2000LM003 ,在此之后就逐渐换成 SMR 的 ST2000LM007 了。

这块 ST2000LM007 在 Crystal Disk Info 里没有显示支持 TRIM 。
出于好奇,楼主用 DiskGenius 选择随机数据进行全盘填充 /清除,总共用了大概 5 个小时,没感觉到速度慢——嗯,应该是因为新盘本来就都是 0 ,还没有条件暴露“脏盘掉速”问题。

但是在此之后,用 HD Tune 跑写入测试(这个测试是强制在没分区的情况下进行的,否则软件拒绝开始),看着写入速度曲线好像并没有什么异常,还是外圈快( 125MB 左右),越到内圈越慢(最慢也没低于 50MB/s )。

然后我又整盘分了一个大分区,启用 BitLocker 加密,XTS-AES 128 ,选择只加密可用空间。我觉得 BitLocker 应该可以防止硬盘主控耍压缩之类花招。

先是复制进去了一个 70GB 的大文件,显示速度大概在 100MB/s 以上,没感觉到掉速。

然后我创建了一堆 1GB 的填 0 文件填满分区(最后不足 1GB 也仍然让他填满)——貌似还是没发现有显著的掉速问题,还是最慢也没跌破 50MB/s 。
做成图表,看上去也类似于 HD Tune 跑出来的曲线,只是跑到最后几十 GB 的时候速度会突然变快。用 DiskGenius 定位最后几个文件的数据开始位置 LBA ,好像也并不在靠近外圈的地方,所以不太理解具体原因,也许和 SMR 盘内部的翻译映射有关?

接着我用脚本,让 openssl 先在 ramdisk 里走 aes128cbc 生成 1GB 的伪随机数(每个文件密钥都不一样),再从 ramdisk 复制到这个移动硬盘、覆盖填充上述文件——没跑完我就把它停了,但跑了好一阵子还是没发现显著的掉速问题。

再然后我又用同一份伪随机数据,按文件名反过来的顺序覆盖填充这些 1GB 的文件,结果发现这样跑出来的曲线,左右翻转一下,几乎就是和上述填 0 的实验跑出来的曲线一模一样。


现在我的猜测是,这块( drive-managed ) SMR 硬盘的主控也许远比我想象的要聪明。
比如……(以下纯脑补)也许写入 1GB 数据的时候,(因为仍然是顺序读写)虽然会覆盖邻近磁轨,但绝大部分空间本来就是要被新数据覆盖掉的,所以前面绝大部分空间并不需要去费劲反复搬迁数据,只有最后一点点数据收尾的时候需要搬迁,于是在这种情况下就感知不到明显的掉速?

总之楼主不太理解现在的状况……难道同是标注型号为 ST2000LM007 ,还可能有 CMR 而不是 SMR 的盘?楼主感觉这似乎也不太可能吧……
5130 次点击
所在节点    硬件
33 条回复
Cooky
2021-11-26 21:37:48 +08:00
这里面有系统缓存的影响,我的 2T 硬盘 dd 测速 oflag=dsync 直接就最低速度几十 M/s ,不带 oflag 就带着系统缓存跑直接 160+M/s
acess
2021-11-26 21:42:27 +08:00
@Cooky 我用的 cygwin 里的 dd ,加了 conv=notrunc,fdatasync
acess
2021-11-26 21:44:33 +08:00
@Cooky 另外任务管理器显示的磁盘写入速度,好像时不时瞥一眼,看上去也没有出现显著的掉速。
acess
2021-11-26 21:55:57 +08:00
@Cooky 又看了一下设备属性,删除策略是“快速删除(默认)”,应该是因为盘并没有拆出来,还是 USB 线连着原装的移动硬盘盒。下面的写入缓存之类并没有启用。
而且即便是缓存也应该只影响突发的少量写入,这样直接写满接近 2T 应该迟早要露原形,毕竟我这边的物理内存大小也比 2TB 小太多太多了。
geniussoft
2021-11-26 21:59:21 +08:00
要想刺激 SMR ,写 0 是不行的,还是写入真实世界数据吧,要不就写不重复的随机文件。
acess
2021-11-26 22:12:46 +08:00
@geniussoft
就是为了防止主控发现全是 0 而偷懒,我才开了 BitLocker ,并且指定加密方式为 XTS-AES 128 (而且 manage-bde -on -fet hardware 会报错“不支持基于硬件的加密”)。而且在此之前还是全盘随机填充过一次的。
而且不重复的随机文件我也算试过了(尽管本来就已经是隔着一层 BitLocker 了),跑了大概一两百 GB 吧(不过我是先在 ramdisk 里生成好再写进去,这样会有个短暂“喘息时间”,生成随机数据大约 300 多 MB/s )……但好像没看出明显掉速。
再然后我就不再给每一个文件重新生成一份新的数据了,直接从 ramdisk 里复制同一份随机数据,这样跑出来和(透过 BitLocker )写 0 的情况几乎是一模一样的。

也许在 Linux 下测试才能彻底从心理上打消所有疑虑,但我感觉现在这个状况好像不太可能是缓存、主控对写 0 特殊处理之类的。
Cooky
2021-11-26 22:19:57 +08:00
@acess 找个 livecd 测吧,cygwin 测毕竟隔着一层
xinbaqiu
2021-11-26 22:21:25 +08:00
我这有两块 st2000lm003
xinbaqiu
2021-11-26 22:24:08 +08:00
楼主有兴趣可以联系我(测试或者购买
514146235
2021-11-26 23:36:02 +08:00
smr 硬盘在写的比较满的情况下速度掉的很严重。几乎可以掉到 10M/s 左右,而且还不一定能稳定在这个速度。
ryd994
2021-11-27 02:38:08 +08:00
smr 的问题是磁道有重叠,所以写入大小小于整磁道的时候有写入放大的问题。
你试来试去都是连续写入,被缓存合并成整磁道了,那当然试不出问题啦。其实 smr 没那么坑,你自己存点电影什么的没影响。
如果是 zfs 重建这样的,随机写入,而且是大范围长时间的,那 smr 的问题就会暴露出来了。我 nas 上就有两块 smr 盘。平时用没事但是往 smr 空盘上写入重建就会掉到个位数 MB 。可以往 cmr 的氦气盘上重建。然后整盘 dd 到 smr 盘上。
2i2Re2PLMaDnghL
2021-11-27 03:05:59 +08:00
SMR 重点是小量随机覆写容易被写入放大,如果你直接丢一大堆数据的话很可能可以直接被优化掉(已知将被覆写的数据)。
我怀疑你就算 dd ,bs 调大也能作相同效果
billgong
2021-11-27 06:12:25 +08:00
我只是在 nas 上用过 SMR ,都是 8T 的希捷。一个是 resync ,另外一个是 dd bs=4M 写入整盘(双盘克隆),必定在 50-80%这个区间掉速到个位数 m/s 。

楼上说了其中的原理了,和那些 QLC 掉速差不多的原因。写满了缓存爆了性能自然就下来了。其实平常用起来没什么问题。NAS 不推荐用就是因为换盘后 resync 要老命了。
kokutou
2021-11-27 08:23:01 +08:00
持续顺序读写没影响的。
快满的时候,盘上剩余空间里到处都是脏数据碎片的时候才会变慢。
codingadog
2021-11-27 09:29:54 +08:00
写一堆大大小小的文件写满,然后随机删掉一半。
然后再写满,再删掉一半。
然后就能出来了。。。
Seanfuck
2021-11-27 09:57:31 +08:00
2.5 寸的 cmr 貌似只能买到最大 1T 的了,400 多。
acess
2021-11-27 11:00:42 +08:00
@billgong 我是 dd bs=1M
感觉很奇怪。网上说 DM-SMR 用户直接写的是 Media cache
acess
2021-11-27 11:03:21 +08:00
@billgong (接上条,刚刚手滑按到回复按钮了)
那么我这样测试应该能看到 media cache 被写满后的断崖式掉速才对。
那么也许是像我一开始脑补的那样,主控很聪明,知道我是大量顺序写入,于是就直接朝 SMR 里写,这样只需要处理最后一点点收尾的(因邻近磁轨会被覆写而不得不进行的)搬运就 OK ?
acess
2021-11-27 11:04:29 +08:00
@ryd994
@2i2Re2PLMaDnghL
所以并不单纯是“脏盘掉速”,其实是“碎片掉速”?
acess
2021-11-27 11:04:56 +08:00
@ryd994
@2i2Re2PLMaDnghL
所以就有一个问题,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/818254

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX