磁盘表现不佳

2021-05-10 19:56:47

人们经常告诉我他们不了解性能工具输出,因为它们可以' t告诉39; s"好"或"坏。"它可能很难,因为性能是主观的。什么'对于一个用户而言,对另一个用户可能不好。还有我可以在哪里' t告诉他们:工具只提供进一步分析的线索。

我最近遇到了可怕的磁盘性能并认为它' D收集Linux工具屏幕截图并分享它们以供参考。例如,Iostat(1):

$ iostat -Xz 10 [...]设备R / SW / S RKB / S WKB / S RRQM / S WRQM / S%RRQM%WRQM R_AWAIT W_AWAIT AQU-SZ稀有Q-SZ WAREQ-SZ SZM%UNTERNVME0N1 4.40 6.00 42.00 43.20 0.00 4.30 0.00 41.75 6.45 0.03.55 7.20 0.15 0.160.19DM-0 4.40 10.30 42.00 43.20 0.00 0.00 0.00 0.0 0.47 0.03 9.55 4.19 0.47 0.80DM-1 4.40 9.80 42.00 43.20 0.00 0.00 0.24.00 43.20 0.00 0.00 0.241 0.49 0.03 9.54.41 0.56 0.0SDB 4.50 0.00 576.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0 0.234.31 0.00 1.98 128.00 0.00 222.22 100.00

它' s sdb磁盘和i' m首先查看r_await列以查看读取的毫秒内的平均时间。平均434毫秒是可怕的,小队列大小(Aqu-sz)表示它' s磁盘的问题,而不是应用的问题。我想看到分发和事件日志。但首先,关于这个磁盘......

你曾经在计算机科学中教授尘埃粒子矮人的大小,磁盘头和盘子之间的距离吗?就像是:

它' s称为#34;飞行高度"或"飞高," (从该参考)为2011年的驱动器约为5纳米。灰尘颗粒可以是1000倍更大的颗粒。头部" float"在空气薄膜上,有时被描述为"空气润滑。"要引用关于硬盘驱动器空气过滤器的文章:"在运行时,一些硬盘不超过7,000英尺,因为在驱动器内部的空气压力太低,可以正确浮动头部。"

我第一次讲述了在学校的计算机研究课中飞行高度和尘埃粒子之间的比例,老师在黑板上绘制了这个图。我认为,斑点的灰尘会以7200rpm摧毁驱动头。正确的?

我刚刚找到了一个Quora文章,比我更好的图表,这也问了这个问题,如果磁盘读/写头跑过灰尘,你认为会发生什么? (这篇文章并不答案。)

磁盘照片是一个80 Gbyte Western Digital IDE磁盘,我在打包移动房屋时找到。错过了它的盖子。尘土飞扬。我最近也买了一个SATA / IDE到USB HUB,并且可以抵抗磁盘尽管灰尘,并且发现它是什么(I' d忘记)。肯定是它' s不可读,对吗?...

驱动器立即失败。磁盘加速了,头部单击,然后用错误向下抽出。我发现盖子但没有驱动螺丝,并将它搁置在顶部。仍然错误。然而,通过向下推盖子,(模拟螺钉)在失败之前将上下加上几次。我越难以推动它的振动越少,而且它的工作就越多,直到我终于返回I / O,尽管如此。 (这可能与我着名的喊叫视频相反:这次I' m抑制振动以使磁盘工作。)

我成功地读到了99.9999%的磁盘扇区。花了几个小时,所以我留下了一瓶苹果汁按下盖子。表现仍然很差,但是头部姓氏' t删除。只有一个8千字节的顺序块失败,无法读取(大灰尘?)。从早期的IOSTAT输出(以及下面的屏幕截图)是此磁盘的性能,灰尘-N-all。

虽然灰尘可能是一个因素,但我认为性能不佳的最大原因是盖子的振动,盖子拧下了,当我使用我的体重持有盖子时的工作量有多更快。我可以听到它更快的旋转。它似乎有几种设置速度,当推动努力时,它会尝试更快的速度,然后速度更快,然后更快,直到它发现它可以运行的最快(据推测它开始速度更快,直到它开始获得扇区 - ECC错误)。尝试速度更快的方式,以某种方式提醒我32x CDROM驱动器的操作。

回到我的开场线:以下截图可以帮助您更好地了解这些工具输出。我' ll从最糟糕的性能开始,然后表现出适度的性能。来自这些输出,我尝试确定问题是:

工作负载:高延迟磁盘I / O通常由应用的工作量引起。它可能是由于排队,尤其是发送批次写入的文件系统。它也是简单的I / O,或存在慢慢I / O的其他磁盘命令。

Warning: Can only detect less than 5000 characters

这将显示磁盘SDB的单独I / O为100 ms和更多(LAT(MS))。如果我足够长时间运行这个,我应该看到高达超过2秒的异常值。

我没有看到这个Biosnoop输出中排队的证据:排队的一个讲述迹象是当I / O延迟增加(例如:10ms,20ms,30ms,40ms等)之间的稳定完成时间他们(在时间列中看到)。这可以是磁盘通过其队列工作时,因此我以后的I / O稳步增加延迟。但是该输出中的完成时间和延迟显示磁盘似乎有一个深队列。它' s只是简单的慢。

通过在磁盘盖上挤压它,它能够更快地运行,但仍然有些差。

#BIOSNOOPTIME(S)通讯PID磁盘T扇区字节LAT(MS)[...] 2.643276 DD 16014 SDB R 46133728 131072 1.602.660996 DD 16014 SDB R 46133984 131072 16.982.671327 DD 16014 SDB R 46134240 131072 10.312.673299 DD 16014 SDBř46134496 131072 1.942.675298 DD 16014 SDBř46134752 131072 1.972.685624 DD 16014 SDBř46135008 131072 10.292.705410 DD 16014 SDBř46135264 131072 19.762.707425 DD 16014 SDBř46135520 131072 1.962.710357 DD 16014 SDBř46135776 131072 1.662 0.716280 DD 16014 SDBř46136032 131072 1.622.739534 DD 16014 SDBř46136288 131072 19.072.741464 DD 16014 SDBř46136544 131072 1.902.743432 DD 16014 SDBř46136800 131072 1.932.745563 DD 16014 SDBř46137056 131072 1.572.756934 DD 16014 SDB R 46137312 131072 10.112.783863 DD 16014 SDB R 46137568 131072 26.902.785830 DD 16014 SDB R 46137824 131072 1.932.787835 DD 16014 SDB R 46138080 131072 1.972.790935 DD 16014 SDB R 46138336 131072 2.55 [...]

这里的延迟看起来像是正常速度(~1.9毫秒)和较慢的混合(〜10ms又慢)。给定它' s一个7,200转磁盘,革命需要〜8ms,所以如果需要重试我' d期望看到2ms,10ms,18ms,26ms等的延迟。

磁盘=' SDB' USECS:数分布0 - > 1:0 | | 2 - > 3:0 | | 4 - > 7:0 | | 8 - > 15:0 | | 16 - > 31:0 | | 32 - > 63:0 | | 64 - > 127:0 | | 128 - > 255:0 | | 256 - > 511:0 | | 512 - > 1023:0 | | 1024 - > 2047:13 | ****** | 2048 - > 4095:82 | **************************************** 4096 - > 8191:0 | | 8192 - > 16383:9 | **** | 16384 - > 32767:7 | *** | 32768 - > 65535:41 | ******************** | 65536 - > 131071:77 | *********************************** | 131072 - > 262143:2 | | 262144 - > 524287:1 | |

分布是双峰的。更快的模式将是顺序读取,较慢的模式显示重试。

$ iostat -xz 10 [...] avg-cpu:%用户%nice%system%iowait%窃取%空闲11.78 0.1.68 2.82 0.00 82.72device r / sw / s rkb / s wkb / s rrqm / s wrqm / s %rrqm%wrqm r_await w_await Aqu-sz稀释剂-sz wareq-sz svctm%utilnvme0n1 3.50 11.70 15.60 146.40 0.40 2.30 10.26 16.43 2.40 0.21 0.246 12.51 0.08 0.46 12.51 0.08 0.46 12.51 0.08 D-0 3.90 14.00 15.60 146.40 0.00 0.00 0.00 0.87 0.17 0.01 0.00 0.46 0.54 0.96dm-1 1.40 13.70 5.60 146.40 0.00 0.00 0.00 0.00 4.29 0.18 0.01 4.00 10.69 0.29 0.44dm-2 2.50 0.00 10.00 0.00 0.00 0.00 0.00 0.00 2.08 0.00 0.01 4.00 0.00 2.08 0.52sdb 321.40 0.00 41139.20 0.00 0.00 0.00 0.00 0.00 5.11 0.00 1.64 128.00 0.00 3.01 96.88

5.11 ms的平均(R_await)真的并不讲述像直方图或每次事件输出一样的完整故事。

什么'发生在所有灰尘中?它是否粘在拼盘表面上,或者在磁盘旋转时会反弹?我包括的照片是在我读完整个磁盘之后,所以尘埃没有在内部空气过滤器中达到。它仍然在拼盘上。

1 TB磁盘会像旧的80 GB磁盘一样容忍灰尘吗? (当我是一个Sysadmin时,我听到了一个故事的vax驱动器将如何停滞,所以洞已经在洞里用胶带钻了它们。当停滞不前时,Sysadmin会剥离录像带并用他们的手指旋转起步他们。那些甚至更老的驱动器必须更容忍灰尘!)

在什么时候有太多的灰尘?我不建议你试试这个,但如果我有时间或兴趣i' d创建一个有机玻璃盖,看看驱动器可以继续使用多少灰尘。

至少我回答了一个问题。我发现这些硬盘头没有被灰尘摧毁,并且可以从尘土飞扬的盘中读取几乎所有东西,尽管如此。也许是那个'不是这种具有较小公差较小的现代SMR磁盘,但我' D必须尝试,鉴于这次令人惊讶的结果。

您可以在此评论,但我可以' t保证您的评论将永远留在这里:我可能会在某个点切换评论系统(例如,如果disqus添加广告)。

评论由Disqus提供动力