读写寻道时间之间的差异

读写寻道时间之间的差异

读取和写入请求的寻道时间有区别吗?

我尝试通过测量两个请求需要多长时间来测试寻道时间,一个请求在磁盘的开头,一个请求在磁盘的末尾附近(因此,它们应该在不同的磁柱中)。对于写入,与读取相比,完成请求序列需要更长的时间。是因为写入的寻道时间更长吗?还是因为其他因素,例如传输时间?

这里,我为大小数据附加了写入/读取延迟。可以看出,在较小的请求大小(传输时间应该很小,磁盘寻道时间对 io 时间的影响更大)中,写入延迟几乎是读取延迟的 300 倍。

每次读取写入大小比较

谢谢

答案1

这个问题有点宽泛,不太清楚。我对你提到的这个“fio”工具不太熟悉,快速浏览一下其网页 没有透露有关其工作原理的任何细节(即什么是否正在测量)。

  • 正如 duDE 所说,原则上,寻道时间(将 I/O 磁头从其所在磁柱移动到要执行 I/O 操作的磁柱所需的时间)应该与要在目标磁柱上执行的操作无关。我认为磁盘驱动程序通常会发出两个单独的命令(寻道然后读取,或寻道然后写入),因此磁盘甚至不知道 无论是寻求读取还是寻求写入。

但是,正如我在第一段中所说,我不知道“fio”测量的是什么。我不知道程序如何在没有内核探测器的情况下测量实际寻道时间。它可能在 API 级别测量 I/O 操作的时间。

  • 即使在硬件层面,写入操作也可能会自动跟随相同数据的读取,以验证正确性。
  • 在硬件层面,如果您有冗余存储(如 RAID),其中相同的数据保存在两个或多个独立驱动器上,通常一个驱动器上的 I/O 磁头会停留在低编号的磁柱(例如,0.25×MAXCYL),而另一个驱动器上的 I/O 磁头会停留在高编号的磁柱(例如,0.75×MAXCYL)。读取操作将转到磁头更靠近目标磁柱的驱动器,因此它最多需要寻道 0.25×MAXCYL,而写入操作将转到两个驱动器,因此它可能需要寻道最多 0.75×MAXCYL。
  • 在操作系统/文件系统级别,

    • 读取可能会或可能不会更新文件的访问时间。有些系统会完全禁用此功能。其他系统可能只设置一个标志(例如,在相关的内存驻留 inode 或等效物中)表示文件已被读取;磁盘驻留 inode 可能要过一段时间才会更新(异步)。
      • 很可能需要更新文件的修改时间。
      • 如果你是延伸文件(而不仅仅是覆盖数据靠近结束)
        • 需要更改文件大小(即在 inode 中),并且
        • 可能需要从空闲列表(或等效列表)中分配块,

      而且可能无法推迟这些活动。

  • 如果你使用旧文件进行测试,并且自创建文件以来已经对磁盘进行了碎片整理,但此后又扩展了文件(即使你没有扩展文件在这些测试中),可能文件的开头存储在连续的区域,而文件的结尾不是。但我能看到的唯一含义是访问文件的开头可能比访问结尾更快。我不明白这如何导致读取和写入之间的差异。

答案2

恕我直言,只有一个寻道时间

寻道时间是硬盘控制器定位特定存储数据所需的时间。其他延迟包括传输时间(数据速率)和旋转延迟(等待时间)。

当磁盘驱动器读取或写入任何内容时,磁盘的读写头需要移动到正确的位置。磁盘读写头的实际物理定位称为寻道。磁盘的读/写头从磁盘的一个部分移动到另一部分所需的时间称为寻道时间。

相关内容