私は最近 このビデオ を見ました、そしてその中で、著者はdd
コマンドを使用するときRAMディスクはHDD/SSDよりはるかに速いと説明しています。これが事実である理由を理解しています。しかし、私が理解していないのは、彼のサンプルコマンドdd if=/dev/zero of=test.iso bs=1M count=8000
16GBのRAM、12コアのRyzen 3600X CPU、最大5GB/sの書き込み速度のNVMe SSDを搭載したシステム。
RAMは常に高速になると思いますが、これは非常に遅いので、ここに何か他のものがあるはずです。彼がdd
コマンドを使用していた方法ですか?I dd
の内部を知らないが、これはシステムがパフォーマンスを制限している状況なのか、それともコマンドが誤って使用されたのか?
注:まったく同じコマンドを2回続けて実行した後、2回目の書き込みは1.4GB /秒ではるかに高速でしたが、これで混乱が解消されるわけではありません。
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-HDD:
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
を責めるつもりはありません。他にもボトルネックがあると思います。しかし、あなたの書き込み速度220 MiB/sは、NVME SSDには低すぎるようです。 (RAMへの書き込み速度を示しているだけで、バッファーのフラッシュは含まれていないため、2番目の結果である1.4GB/sは破棄できると思います。)
booted liveがいくつかの異なるnew linux distros/versionsの場合、NVMEドライブへの書き込み速度をテストできるかもしれません。新しいLinuxカーネルがハードウェア用のより高速なドライバーを備えている可能性があります。
ところで、NVMEドライブにはどのファイルシステムがありますか? Linuxは、Linuxファイルシステム(ext4など)で最適に動作します。
SSDなどのNANDフラッシュメディアには最小ブロック消去サイズがあります。つまり、小さいブロックサイズでそれらのデータをdd
した場合、SSDコントローラーはブロック内の位置に書き込むためにブロックを数回消去する必要があります。最小ブロック消去サイズが4Mの場合、1Mは、ブロックを必要以上に4回書き換える必要があることを意味します。 SSDは同じ4Mブロックを4回消去する必要があります。
同じdd
コマンドを2回目に実行したときに速度が大幅に向上するという事実は、find
コマンドを繰り返し実行した場合と同様に、カーネル、ドライバー、コントローラーによるキャッシュと内部最適化によって説明できます。
詳細については excellent answer @ greg-kennedyによる 最小消去ブロックサイズを見つけるためのスクリプト を参照してください。これは、最適化のためにdd
sブロックサイズ値として使用する必要がありますパフォーマンス。
場合によっては、デバイスの仕様でも、または/sys/class/mtd/mtdx/erasesize
、個々のデバイスによって異なります。