WeHack BBS
遇到了一块延迟很大的硬盘 - 可打印的版本

+- WeHack BBS (https://bbs.wehack.space)
+-- 版块: 计算机技术 (https://bbs.wehack.space/forum-5.html)
+--- 版块: 硬件设备讨论区 (https://bbs.wehack.space/forum-15.html)
+--- 主题: 遇到了一块延迟很大的硬盘 (/thread-148.html)



遇到了一块延迟很大的硬盘 - vimacs - 03-31-2020

最近给一台电脑测试 Windows 系统,于是我拿了手上一块东芝的 320GB 机械硬盘装上 Windows 7. 结果遇到了一些怪现象,就是操作的时候时不时的会卡顿,此时硬盘灯一直亮着。我开始以为是因为内存太小导致 swap 次数过多,但是用任务管理器和性能分析器观察了一下,内存使用率不大的时候也会卡,于是我就怀疑到硬盘上来。

既然是硬盘的问题,首先我就怀疑是不是有坏道。进入 GNU/Linux 用 fdisk -l 查看硬盘分区的时候,到这块硬盘的时候也会卡顿,但是 dmesg 并没有显示 I/O error. 也就是说,卡顿不一定是由坏道引起。那么我就想看看硬盘到底有多慢,用 hdparm -t 看了一下,发现硬盘的速度出奇的低,hdparm 做了 3s 的读取居然才测出几 M/s 的速度。为了排除是 hdparm 读取固定位置造成的偏差,我试着用 hdparm 的 --offset 参数读不同的位置,最后干脆写成了以下脚本(脚本已经整理过,使用时把 DEV 换成要测的硬盘)。

引用:#!/bin/bash

DEV=/dev/sda
SIZE=$(blockdev --getsz $DEV)
SIZE_GB=$(($SIZE*512/1024/1024/1024))

OFFSETS=($(for i in $(seq 0 ${SIZE_GB}); do echo $i; done | shuf))

for i in "${OFFSETS[@]}"
do
hdparm -t --offset "$i" "$DEV"
done

结果发现硬盘的确是非常的慢。但是没有 I/O error,还是排除坏道的可能。没办法,我就把数据迁移到一块西数 500G 机械硬盘上。这块西数硬盘用以上脚本测试,在每个位置做 3s 读取速度都是接近 100MB/s.

然后就发现了奇怪的结果。我做数据迁移用的是 partclone,partclone 报告出的数据迁移速度是 6GB/min 多一点的,平均到秒就是 100MB/s 多一点的速度。可是按照这块东芝硬盘用 hdparm 测试的读取速度,这是不应该发生的。于是我做一个更长时间的测试,用 dd 读上 G 的数据,例如:

引用:dd if=/dev/sda of=/dev/zero bs=1M count=1000 skip=1000 status=progress

然后我就发现,开始的时候读取速度的确很慢,但逐渐加快,到 9s 的时候,速度就上到 100MB/s,这就解释了为什么 partclone 可以到这个速度。因为长时间连续读取时,硬盘会达到最大的速度。但是操作系统经常做随机读取,这样就导致了硬盘经常卡顿。

由此可以得出一点结论,这块东芝硬盘的读取延迟非常大,但是大量连续读写数据的性能是正常的。从机械硬盘的工作原理来看,这块硬盘可能寻道时间很长。此外,系统的电源管理是否造成了这样的性能表现,也有待进一步检查。


RE: 遇到了一块延迟很大的硬盘 - nadebula - 03-10-2021

有可能是监控盘而非普通桌面级,因为监控盘一般只考虑长时间连续读写,如果用作系统盘性能极差,这是正常现象。报一下硬盘型号看看?


RE: 遇到了一块延迟很大的硬盘 - vimacs - 03-11-2021

TOSHIBA MK3261GSYN


RE: 遇到了一块延迟很大的硬盘 - nadebula - 03-11-2021

(03-11-2021, 07:57 PM)vimacs 提到: TOSHIBA MK3261GSYN

这还是东芝高端的7200rpm系列,感觉像是盘体有些异常(听声音是否正常起转?)。我的一块MK1661GSYN(同系列160GB)挺好的。
最近有收购一些中小容量HDD(160-500GB)的打算,由于新盘大多是叠瓦盘。某些CMR老硬盘用于一些非关键应用还行。