Performance

dd實際報告的速度是多少?

  • June 7, 2015

我一直認為在做的時候:

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=director conv=fsync,否則核心會緩衝數據,因此dd認為一旦核心接受了最後一個數據就完成了,這可能是在它到達驅動器之前的幾秒鐘。對於少量數據,這可能會給吞吐量估計帶來重大錯誤。

引用自:https://unix.stackexchange.com/questions/208037