RAWデバイスでは書き込みが遅いですが、ファイルシステム(USBキー)では書き込みが速いのはなぜですか?

RAWデバイスでは書き込みが遅いですが、ファイルシステム(USBキー)では書き込みが速いのはなぜですか?

USBキーがあります(PQI U822V-極端速度32G)Linuxでfast'n'dirtyをベンチマークしようとしています。書き込み帯域幅をテストしています。

dd生パーティションに

セクタ2048で始まるパーティションを作成し、4GBの順次書き込みを実行しました。

dd if=/dev/zero of=/dev/sdb1 bs=1M count=4096

私の速度は約22MB / sです。

ddまた、上記のようないくつかの(4)並列実行を試みましたが、count=1024オプションseek=を使用してドライブの他の領域に書き込みました。結果は同じです。

ddファイルシステムで

ただし、次のように or を使用してパーティションをフォーマットし、大容量sdb1ファイルをそのパーティションにコピーする(実際または):ext4NTFS/dev/zero

time dd if=/dev/zero of=/media/USBKEY/file.bin bs=1M count=4096 ; time sync

メーカーが広告したように>66MB/sを達成しました。もちろんsyncコピー以降の持続時間も考えています。

なぜそんなに大きなパフォーマンスの違いがありますか?

答え1

今また見たらハードドライブではなくUSBキー(フラッシュドライブ)と言われましたね。フラッシュメモリは大きな塊としてのみ消去でき、個々のセクタは最初にそのセクタ(およびそのセクタを含むブロック全体)を消去しないと書き込むことはできません。ソフトウェアはいつでもディスクに必要な内容を書き込めるようにしたいので、削除を透過的に処理するための変換ロジックがディスクにあります。これを行う方法は、書き込みパフォーマンスに大きな影響を与える可能性があります。多くのデバイスは順次書き込みをうまく処理しますが、ランダム書き込みには不十分なアルゴリズムをほとんどのディスクに使用します。ディスクの先頭に近い領域は、通常、事前フォーマットされたFATファイルシステムでFATによって使用され、この領域はランダムに書き込まれることが多いため、この領域に異なるアルゴリズムを使用します。これは順次記録するのは遅いですが、ランダム書き込みは悪くありません。 。

だから私は今、私がコメントとして追加した初期の推測が正しいと確信しています。ファイルシステムに書き込むときにディスクの残りの部分のパフォーマンスを見て、オフセット0でddを実行すると、太った領域に書き込むことができます。数百MBの追加ターゲットを探している場合は、速度が大幅に向上します。

答え2

測定値はカーネルアーキテクチャで説明できます。ファイルシステムアクセスを使用すると、カーネルの可能性と、カーネルが実行できるすべてのバッファと最適化のロックが解除されます。特に、バッファはベンチマークを高速化します(カーネルは100%a_A_syncronousです)。デバイスファイルのddは、その一部またはほとんどを使用しません。

答え3

hdparmキャッシュを有効または無効にしてドライブのパフォーマンスをベンチマークしてみてください。

$ sudo hdparm -tT /dev/sda1

/dev/sda1:
 Timing cached reads:   6314 MB in  2.00 seconds = 3157.61 MB/sec
 Timing buffered disk reads: 244 MB in  3.04 seconds =  80.26 MB/sec

答え4

これは書き込みの最適化によって発生します。スパースファイルファイルシステムから。

dd if=/dev/zeroRAWデバイスでこれを行うと、実際にディスクにゼロブロックが書き込まれます。

ただし、ファイルに書き込むと、ファイルシステムはデータの書き込みを無視し、メタデータのみを保存します。これにより、ディスクに書き込まれるブロックはほとんどありません。ファイルは内部に何もない大きな穴として見ることができます。

この方法でパフォーマンスをテストするには、次を使用します。/dev/urandom入力ファイルとして(dd if=/dev/urandom)。これにより、ファイルシステムはディスクにランダムなデータを書き込むことができます。

関連情報