Linux
Windows上大量文件複製過去的速度很慢
我已經執行了以下測試,我使用此批次創建了一個包含 15'000 個 400 字節文件的文件夾:
@ECHO off SET times=15000 FOR /L %%i IN (1,1,%times%) DO ( fsutil file createnew filename%%i.txt 400 )
然後我使用以下命令在我的 Windows 電腦上複製過去:
robocopy LargeNumberOfFiles\ LargeNumberOfFiles2\
完成後,我可以看到傳輸速率為 915810 字節/秒,小於 1 MB/秒。我花了幾秒鐘來複製 7 MBytes 請注意,這非常慢。
我已經嘗試過使用單個文件為 50 MB 的文件夾,傳輸速率為 1219512195 字節/秒。(是的 GB/s)瞬時。
為什麼複製大量文件會佔用 Windows 文件系統上的大量時間資源?
請注意,我嘗試在具有 ext3 文件系統的虛擬機(vmware 播放器)中的同一台電腦上執行的 linux 系統上執行相同的操作。
我使用 cp 命令,複製是瞬時的!
另請注意以下事項:
- 沒有防毒軟體
- 我已經在多台 Windows 電腦(總是 ntfs)上測試了這種行為,我總是得到可比較的結果(傳輸速率低於 1MB/s,平均 7-8 秒複製 7 MBytes)
- 我已經在多個 linux ext3 系統上進行了測試,該副本始終是即時的(15000 個 400 字節的文件)
- 問題是要了解是什麼讓 Windows 文件系統複製大量文件的速度比 Linux 文件系統慢。
您的 15,000 個文件至少需要 60,000 次 HD 事務才能完成:
- 閱讀源文件
- 分配新的目標文件描述符
- 寫入目標文件
- 更新目標文件描述符
您可能也在使用不支持命令隊列的 SATA 驅動器(只是猜測),這意味著驅動器必須單獨完成所有 60,000 次操作。高端 SCSI 驅動器和陣列將通過在執行它們之前在相似位置排隊多個操作來提高性能。
您的單個文件副本至少需要 4 次(儘管可能更多,這取決於)操作;和以前一樣。如果讀取或寫入操作中存在文件碎片,則可能超過 4 個。
吞吐量不僅以每秒字節數為單位,還以 IOps(本質上是每秒操作數)為單位。您受到這兩者中的後者的限制。