2013-12-11 112 views
1

我知道这个数字会根据很多因素而改变,但一般来说,当我将数据写入硬盘驱动器(例如复制文件)时,需要多长时间才能使数据实际存在在Windows说复制完成后写到盘子​​上?写入硬盘驱动器的时间

任何人都可以指出我在正确的方向发现更多关于这个话题?

+0

什么让你觉得窗户说,数据被写入之前已完成?只是好奇,我会假设Windows并没有告诉你它已经完成,直到硬盘发出完成信号。 – Tobberoth

+0

@Tobberoth:错误的假设 –

+0

你为什么想知道?换句话说,你会使用这些信息来做什么?如果明年的答案发生了变化呢? –

回答

1

如果您正在寻找一个硬数字,这是非常不可知的。通常,到开始到达磁盘盘片的数据的数量级别从几十到几百毫秒,但在具有RAID和重复数据删除的大型服务器磁盘阵列中可以高达几秒钟。

事件的流程就像这样。

  1. 应用程序调用像fwrite()这样的函数。
  2. 此调用由操作系统中的文件系统层处理,该操作系统必须找出要操作的特定磁盘扇区。
  3. 操作系统中的SATA/IDE驱动程序将与硬盘驱动器控制器硬件进行通信。在现代PC上,它通常使用DMA将数据提供给磁盘。
  4. 数据位于硬盘(RAM)内的写入缓存中。
  5. 当物理盘片和磁头已经到位时,它会开始将缓存内容传送到盘片上。
  6. 步骤3-6可能会重复执行几次,具体取决于要写入多少数据,它将在哪个磁盘上写入。此外,通常必须更新文件系统元数据(例如,空闲空间计数器),这将触发更多写入磁盘。

由于任务调度,后台线程以及您的磁盘写入可能在几十个其他进程中排队,所以步骤1-3所需的时间在Windows等通用操作系统中可能无法预知。我认为它通常在典型的PC上大约为10-100毫秒。如果您转到Windows资源监视器并单击“磁盘”选项卡,则可以了解平均磁盘队列长度。您可以使用性能监视器来生成更精细的控制图。

步骤3-4主要由磁盘控制器和磁盘接口(SATA,SAS等)控制。在服务器领域,您可以谈论使用FC或iSCSI网络交换机的SAN,这会强制延迟。

第5步将受磁盘物理性能的控制。许多消费级硬盘制造商不再发布平均寻道时间,但10-20毫秒是常见的。

关于第5步的有趣的细节:一些硬盘驱动器说谎刷新他们的写缓存,以获得更好的基准分数。

第6步将取决于你的文件系统和你写的数据量。

1

你说得对,Windows之间可能存在延迟,表示数据写入已完成,而最后的数据实际写入。需要考虑的事项有:

  1. 设备管理器,磁盘驱动器,属性,策略 - 用于禁用写入缓存的选项。

  2. 你可能会更好使用直接I/O,以便Windows暂时不将其保存在文件缓存。

  3. 如果你的程序写入的数据,你可以记录哪些已经被复制。

  4. 如果您通过网络发送数据时,你可能没有当远程系统已完成的控制。

  5. 要看看发生了什么,你可以设置性能监视器记录。我的一个监测的例子:

http://www.roylongbottom.org.uk/monitor1.htm#anchor2