NVMe SSDでddがなぜそんなに遅いのですか?

NVMe SSDでddがなぜそんなに遅いのですか?

最近見ました。この動画ここで、著者は、ddコマンドを使用するときにRAMディスクがHDD / SSDよりはるかに高速であることを説明します。私はこれがなぜそうなのか理解しています。しかし、私が理解していないのは、dd if=/dev/zero of=test.iso bs=1M count=800016GB RAM、12コアRyzen 3600X CPU、および定格NVMe SSDを搭載したシステムで彼のサンプルコマンドを実行すると、書き込み速度が220MB / sで書き込み速度が速い理由です。 5GB/sと。

RAMがいつも早いということは分かりますが、遅すぎるようで、何か違うことが起きているようです。これが彼がコマンドを使用する方法ですかdd?内部の内容はわかりませんが、ddシステムのパフォーマンスが制限されている場合ですか、それともコマンドが誤って使用されていますか?

注:まったく同じコマンドを2回目の連続で実行した後、2回目の書き込みは1.4GB / sに速くなりましたが、混乱は解消されません。

答え1

SSDなどのNANDフラッシュメディアには、最小ブロック消去サイズがあります。つまり、ddより小さいブロックサイズを使用してデータを保存する場合、SSDコントローラはブロック内の位置を書き込むためにブロックを複数回消去する必要があります。最小ブロック削除サイズが4Mの場合、1Mはブロックを4回以上書き換える必要があることを意味します。 SSDは同じ4Mブロックを4回クリアする必要があります。

dd2番目に同じコマンドを実行すると速度が速くなるという事実は、コマンドが繰り返されたときに表示されるのと同様に、カーネル、ドライバ、およびコントローラのキャッシュおよび内部最適化によって説明できますfind

私の言葉は良い答え詳細と@greg-kennedy最小削除ブロックサイズを見つけるスクリプトdd、最高のパフォーマンスを得るには、ブロックサイズ値として使用する必要があります。

/sys/class/mtd/mtdx/erasesize場合によっては、個々のデバイスに応じてデバイスの仕様または読み取りによって見つけることができます。

答え2

NVMEドライブ、SATA-SSD、およびSATA HDDを搭載したかなり古いワークステーション(Lenovo Thinkstation C30)でいくつかのテストを行いました。

次のコマンドを実行しました(各デバイスへの書き込みにかかるリアルタイム時間を測定するためにバッファからフラッシュすることを含む)。

NVMEドライブ:

sudodus@bionic64 /mnt/sd1 $ time ( sudo dd if=/dev/zero of=test.img bs=1M count=8000 status=progress ; sync )
7480541184 byte (7,5 GB, 7,0 GiB) kopierade, 4 s, 1,9 GB/s
8000+0 poster in
8000+0 poster ut
8388608000 byte (8,4 GB, 7,8 GiB) kopierade, 4,86151 s, 1,7 GB/s

real    0m9,243s
user    0m0,014s
sys 0m3,921s

SATA SSD:

sudodus@bionic64 /tmp $ time ( sudo dd if=/dev/zero of=test.img bs=1M count=8000 status=progress ; sync )
8384413696 byte (8,4 GB, 7,8 GiB) kopierade, 11 s, 762 MB/s
8000+0 poster in
8000+0 poster ut
8388608000 byte (8,4 GB, 7,8 GiB) kopierade, 11,0025 s, 762 MB/s

real    0m25,841s
user    0m0,023s
sys 0m3,894s

SATAハードドライブ:

sudodus@bionic64 /media/multimed-2/test/test0/temp $ time ( sudo dd if=/dev/zero of=test.img bs=1M count=8000 status=progress ; sync )
8296333312 byte (8,3 GB, 7,7 GiB) kopierade, 18 s, 461 MB/s
8000+0 poster in
8000+0 poster ut
8388608000 byte (8,4 GB, 7,8 GiB) kopierade, 18,3536 s, 457 MB/s

real    0m50,050s
user    0m0,024s
sys 0m3,566s

速度計算:

$ bc
...
scale=0
8000/9.243
865
8000/25.841
309
8000/50.050
159

実際の書き込み速度の要約(MiB / s)

NVME: 865
SSD:  309
HDD:  159

したがって、結論は、NVMEとSSDドライブの書き込み速度が理論速度よりはるかに低いということです。デバイス自体だけでなく、速度を制限するさまざまなボトルネックがある可能性があると結論付ける必要があります。

私は責めませんdd。他のボトルネックがあると思います。しかし、私の考えでは、220MiB / sの書き込み速度はNVME SSDと比較して遅すぎます。 (2番目の結果である1.4GB / sはRAM書き込み速度のみを表示し、フラッシュバッファは表示しないので無視しても問題ありません。)

次の場合は、NVMEドライブの書き込み速度をテストできます。生放送が始まりましたさまざまなものから新しいLinuxディストリビューション/バージョン。新しいLinuxカーネルは、ハードウェアに高速なドライバを提供できます。

しかし、NVMEドライブにはどのようなファイルシステムがありますか? Linux は ext4 などの Linux ファイルシステムで最適です。

答え3

oflag=directを追加しないと、dd書き込みはバッファリングされ、スループットは現実的ではありません。

関連情報