将时间写入硬盘
Posted
技术标签:
【中文标题】将时间写入硬盘【英文标题】:Write time to hard drive 【发布时间】:2013-12-29 13:02:51 【问题描述】:我意识到这个数字会根据许多因素而改变,但一般来说,当我将数据写入硬盘驱动器(例如复制文件)时,需要多长时间才能将数据实际写入盘片Windows 说复制完成了?
谁能指出我正确的方向以发现有关此主题的更多信息?
【问题讨论】:
是什么让你认为 windows 说它在数据写入之前就已经完成了?只是好奇,我假设在硬盘驱动器发出信号完成之前,Windows 不会告诉你它已经完成。 @Tobberoth:错误的假设 你为什么想知道?换句话说,您将使用这些信息做什么?如果明年答案发生变化怎么办? 我正在编写对硬盘进行大量写入的软件。如果发生不良情况(例如断电),我正在尝试收集有关数据潜在状态的信息。对拼盘写入有一个大致的了解将帮助我更好地理解正在发生的事情,并有一些类型的数据可以呈现,无论它是多么普遍或多变。这些信息甚至可以从供应商处公开获得吗?我不太确定我应该搜索哪些字词。 【参考方案1】:如果您正在寻找一个硬数字,那几乎是不可知的。一般来说,数据开始到达磁盘盘片大约需要几十到几百毫秒,但在具有 RAID 和重复数据删除的大型服务器磁盘阵列中可能高达几秒钟.
事件的流程是这样的。
-
应用程序调用类似 fwrite() 的函数。
此调用由操作系统中的文件系统层处理,它必须确定要操作的特定磁盘扇区。
操作系统中的 SATA/IDE 驱动程序将与硬盘驱动器控制器硬件通信。在现代 PC 上,它通常使用 DMA 将数据馈送到磁盘。
数据位于硬盘 (RAM) 内的写入缓存中。
当物理盘片和磁头就位后,它将开始将缓存的内容传输到盘片上。
步骤 3-6 可能会重复多次,具体取决于要写入的数据量、要写入磁盘的位置。此外,通常还有必须更新的文件系统元数据(例如可用空间计数器),这将触发更多的磁盘写入。
在像 Windows 这样的通用操作系统中,由于任务调度、后台线程以及您的磁盘写入可能与几十个其他进程一起排队,因此从步骤 1 到 3 所花费的时间可能无法预测。我想说它通常在典型 PC 上大约 10-100 毫秒。如果您转到 Windows 资源监视器并单击磁盘选项卡,您可以了解平均磁盘队列长度。您可以使用性能监视器生成更精细控制的图表。
步骤 3-4 主要由磁盘控制器和磁盘接口(SATA、SAS 等)控制。在服务器世界中,您可以谈论带有 FC 或 iSCSI 网络交换机的 SAN,它们会产生自己的延迟。
第 5 步将由磁盘的物理性能控制。许多消费级 HDD 制造商不再公布平均寻道时间,但 10-20 毫秒很常见。
关于第 5 步的有趣细节:一些 HDD 谎称刷新其写入缓存以获得更好的基准测试分数。
第 6 步将取决于您的文件系统以及您正在写入的数据量。
【讨论】:
【参考方案2】:您是对的,在 Windows 指示数据写入完成与实际写入的最后一个数据之间可能存在延迟。需要考虑的事项是:
设备管理器、磁盘驱动器、属性、策略 - 用于禁用写入缓存的选项。
最好使用 Direct I/O,这样 Windows 就不会将其临时保存在文件缓存中。
如果您的程序写入数据,您可以记录已复制的内容。
如果您通过网络发送数据,您可能无法控制远程系统何时完成。
要查看发生了什么,您可以设置 Perfmon 日志记录。我的监控示例之一:
http://www.roylongbottom.org.uk/monitor1.htm#anchor2
【讨论】:
以上是关于将时间写入硬盘的主要内容,如果未能解决你的问题,请参考以下文章