2013-12-11 113 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