dd が予想よりも高速です。

dd が予想よりも高速です。

dd if=/dev/zero of=tmp.dat bs=1M count=1024 status=progress500G HDDでコマンドを実行すると、次のような結果が表示されます。

833617920 bytes (834 MB, 795 MiB) copied, 1 s, 829 MB/s
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.41974 s, 756 MB/s

私が知る限り、SATAの機械式ドライブは約100MB/s程度であることがわかっていますが、これは偽物のようです(756MB/s!)。

これを確認するために、私は走ってsudo hdparm -t /dev/sda得た。

/dev/sda:
 Timing buffered disk reads: 350 MB in  3.01 seconds = 116.26 MB/sec

これがより合理的なようです(116MB/s)。

しかし、状況をさらに混乱させるために別のテストを実行しました。 (rm tmp.dat;dd if=/dev/zero of=tmp.dat bs=1M count=512 status=progress同じ仕事、データの半分のコピー)はるかに悪い結果が出ました。

512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 0.576224 s, 932 MB/s

機械式ドライブの読み取り/書き込み速度は毎秒ほぼギガバイトです! SATA + HDDにこのサイズのファイルをコピーするのに1秒(0.576秒)もかからないのはどのように可能ですか? ddレポートとhdparmレポートの間に違いがあるのはなぜですか?出力ファイルのサイズによって変わるのはなぜですか?

明らかにここに何かがありました。 *nixマスター様、教えてください

答え1

観察することを」汚い ページ数「これはほとんどの最新のオペレーティングシステムの機能です。ファイルが作成されると、カーネルは物理的にデータをすぐにディスクに書き込むことはできません。これにより、断片化を防ぐためにデータをよりインテリジェントにディスクに書き込むことができます。

この動作を無効にするには、をdd実行しますconv=fsync

関連情報