磁盘性能testing结果奇怪的差异

我开始尝试做一些简单的性能testing。 “哪些磁盘更快,以及多less东西。 我不需要太高的精度,我只是想要一个粗略的想法。 它变成一个奇怪的进入如何工作的内部事件。 有趣的,实际上,但有点奇怪。

在我进一步讨论之前,我要说的是,本文中的所有内容都是在Arch Linux系统上运行的,运行3.0内核,从MyBook Essential USB3机箱中移除Western Digital WD30EZRX 3TB SATA磁盘驱动器(这些机箱可以做坏事您的数据),并安装在Sans Digital单盘USB3机箱中,通过Buffalo USB3 PCIe单通道卡连接。 驱动器是该USB卡上的唯一设备,在testing期间系统处于空闲状态。

我写了一个性能testing程序,一个简单的C程序来打开一个文件,写入四个GiB的数据,fsync(),然后退出。 我在一个空的全盘ext4文件系统上运行了9次testing(任意一个数字,因为我想要单个数字,但是忘了从零开始),每次运行58-59秒,大约73 MB /秒。 不是世界上最快的磁盘,但结果是相当一致的。

由于我不记得的原因,没有预料到任何麻烦,我在几个小时后回来做了完全相同的testing,拔掉磁盘后再testing另一个磁盘,将原始磁盘重新插入,然后重新执行mkfs。 令我惊讶的是,我得到了非常不同的结果。 这一次,我在51-52秒(83 MB /秒)的范围内得到了结果,2秒接近48秒。

几个小时后,在做了一些研究之后(包括在这里问一个关于如何找出文件使用哪个磁盘块的问题),我在同一个磁盘上运行了另一个testing,而不用重新初始化。 我只是在前一个testing的同一目录(文件系统的根目录)中创build了新的文件。 这一次,我在44-45秒(96 MB /秒)的范围内得到了结果。

后来,我又跑了三个testing(实际上改进了我的testing程序),再次把这些文件放在现有的文件旁边,并获得了44秒,45秒和50秒的性能。 这三组运行是完全相邻的。 请记住,我还没有谈论个人跑步。 我跑了9次testing程序,所有的结果都是44秒,还有9次,都是45秒的结果,还有9次,都是50秒的结果。

这些差别很大,而且很奇怪。

我使用debugfs来检查文件正在使用哪些块,并没有什么“有趣的”在那里。 每个文件似乎从磁盘开始依次得到下一个可用块。

我能想到的唯一可能的解释是,如果磁盘电路以某种方式从磁盘的不同部分分配块并将它们呈现给主机为连续的。 对于我所看到的结果,它将不得不注意到我的testing运行之间的延迟,并将其作为切换到磁盘的不同部分进行分配的机会。

坦率地说,这听起来有点像我,但我没有很多其他的想法。

任何人都可以阐明这一点? 为什么我会得到这样的局部一致而全局variables的结果呢?

这是一个鱼子酱绿色驱动器。 由于绿色电路,我听说有一些不一致的performance。 他们有一个可变的RPM速度来节省电力,这绝对可以影响传输率。 足够你所看到的? 我不能说,我没有亲自处理。 如果一致的performance是你以后,我会去他们的蓝色或黑色线。

几个月后,似乎值得跟进我这个仍然存在的问题。

由于其他优先事项,我不得不暂时搁置这个项目,在碰到这个路障之后不久。 最近,我能够回到它。

最令人沮丧的是(现在)我现在完全无法重现这个问题。 我仍然有完全相同的硬件和相同的机器。 但是,所有的performance都是合理的,并且和我预期的一样快。 为了简单起见,我最初的问题并没有包括我试过的所有不同的设置(和硬件)。

特别是有一台机器出现了这个问题,我在testing这个问题的时候就closures了。 几个月后,它仍然closures。 我又回过头来,试图描绘不一致的performance,只是发现问题没有了。

月相? 一年的数字? 太阳黑子? 我不知道。 从那以后,我重新启动了这台机器,用两个不同的USB接口卡和两个不同的磁盘进行了大量testing。 没有结果是不寻常的。 我怀疑自己的理智,除了原始testing中还有剪切粘贴的日志以及时间戳的testing输出文件。 他们毫无疑问地在那台机器上,在那个磁盘上,结果很奇怪。 奇怪的结果,我现在无法重现,尽pipe数小时的尝试。

我宣布这是不值得我的时间,我宣布这个问题closures。

我向那些追求我的人表示歉意,希望得到一个明确的答案。

对于具有恒定RPM的磁盘来说,这是非常典型的(几乎所有这些都是因为改变旋转速度会减慢寻道时间)。 当头靠近驱动器的中心时,线速度较低,当头靠近驱动器的边缘时,线速度较高。 大多数驱动器将外部磁道映射到更高的线性扇区号,大多数文件系统在线性扇区上工作。 所以当你继续使用文件系统时,它往往会变得更快。