Performance
dd實際報告的速度是多少?
我一直認為在做的時候:
dd if=/dev/sdx of=/dev/sdy
命令完成後顯示的報告,例如:
79304319+0 records in 79304319+0 records out 40603811328 bytes (41 GB) copied, 459.645 s, 88.3 MB/s
包含與以下之間最慢的速度相對應的速度:
- 輸入的讀取速度,
- 輸出的寫入速度,
- 讀和寫之間發生了什麼,
也就是說,如果我將數據從讀取速度為 5 MB/s 的 USB 驅動器複製到 SSD,
dd
實際上將報告 5 MB/s,與 SSD 的速度無關。在實踐中,我正在複製一個連接到 USB 2 的磁碟(檢查了兩次,手冊說它是 USB 2.0,甚至精確到 480 Mbps 的連接速度),並註意到
dd
報告的速度從 65 到 88 MB/s 不等,這高於USB 2.0的最大速度 60 MB/s。那裡發生了什麼?
是不是
dd
讀速度和寫速度相加顯示的速度(也就是說實際速度大約是40MB/s,這樣更有意義)?附加資訊:我正在製作一個硬碟的副本,它呈現出越來越多的壞扇區,以便擁有一個我可以試驗的複製。複製整個磁碟後,報告的速度確實比預期的要高:
3902854784+0 records in 3902854784+0 records out 1998261649408 bytes (2.0 TB) copied, 26040.5 s, 76.7 MB/s
假設該命令僅在前幾個(2 到 3)GB 中重複。我檢查並重新檢查,複製的磁碟是正確的,並且主機板不支持 USB 3(並且沒有額外的用於 USB 3 的 PCI-e 卡)。
hdparm
的結果更奇怪:$ hdparm -tT /dev/md0 /dev/md0: Timing cached reads: 13498 MB in 2.00 seconds = 6755.77 MB/sec Timing buffered disk reads: 486 MB in 3.00 seconds = 161.77 MB/sec $ hdparm -tT /dev/md0 /dev/md0: Timing cached reads: 15058 MB in 2.00 seconds = 7536.75 MB/sec Timing buffered disk reads: 418 MB in 3.01 seconds = 138.91 MB/sec $ hdparm -tT /dev/md0 /dev/md0: Timing cached reads: 15038 MB in 2.00 seconds = 7527.54 MB/sec Timing buffered disk reads: 386 MB in 3.01 seconds = 128.38 MB/sec
通常
dd
顯示整個傳輸所花費的時間,速度是“數據量除以所花費的時間”。基本上它和你應該得到的一樣time dd ...
,沒有魔法。40603811328 bytes (41 GB) copied, 459.645 s, 88.3 MB/s 40603811328 / 459.645 / 1000 / 1000 = 88.3373
也許您在某個時候取消了 dd 並重新啟動它,因此大部分數據已經被記憶體,因此記憶體會影響您的統計數據?您可以嘗試
hdparm -tT /dev/disk
粗略估計實際驅動速度。對於USB2來說,速度確實讓人懷疑,希望你沒有誤用錯誤的設備。
除非您指定
oflag=direct
orconv=fsync
,否則核心會緩衝數據,因此dd
認為一旦核心接受了最後一個數據就完成了,這可能是在它到達驅動器之前的幾秒鐘。對於少量數據,這可能會給吞吐量估計帶來重大錯誤。