ddが報告した実際の速度はいくらですか?

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

次の間の最も遅い速度に対応する速度を含みます。

  • 入力読み取り速度、
  • 出力書き込み速度、
  • 読みと書き込みの間に何が起こるのか、

つまり、読み取り速度が5MB / sのUSBドライブからSSDにデータをコピーすると、ddSSD速度に関係なく実際に5MB / sが報告されます。

実際にUSB 2に接続されているディスクをコピーしていましたが(2回確認し、マニュアルには接続速度が480MbpsのUSB 2.0と記載されています)、報告された速度がdd65MB/sから88MB/sに増加したことがわかりました。などより高い最大速度60MB/sUSB 2.0の場合。

そこで何が起こったの?

読み取り速度と書き込み速度を加算して速度を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

答え1

oflag=directまたは、指定しない限り、conv=fsyncカーネルはデータをバッファリングするため、カーネルが最後のデータをdd受け入れるとすぐに(データがドライブに到達する数秒前になる可能性があります)、カーネルはデータが完了したと見なします。データ量が少ないと、スループット推定に重大なエラーが発生する可能性があります。

答え2

一般に、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の場合、速度は本当に疑わしいです。間違ったデバイスを誤用しないでください。

関連情報