web-dev-qa-db-ja.com

順次書き込みとランダム書き込みの違い

次の場合のシーケンシャル書き込みとランダム書き込みの違いは何ですか?-1)ディスクベースのシステム2)SSD [フラッシュデバイス]ベースのシステム

アプリケーションが何かを書き込み、情報/データをディスク上で変更する必要がある場合、シーケンシャル書き込みとランダム書き込みのどちらであるかをどのようにして知ることができますか。書き込みは単にバッファリングされ、バッファをフラッシュするときにディスクに適用されます。

私が間違っている場合は修正してください。

35
Kaizen

人々がsequentialvsrandomのファイルへの書き込みについて話すとき、彼らは一般的に中間シークなしの書き込みを区別しています( "シーケンシャル」)、vs。シークライトシークライトシークライトなどのパターン(「ランダム」)。

この区別は、各ディスクシークに約10ミリ秒かかる従来のディスクベースのシステムでは非常に重要です。同じディスクにデータを順次書き込むには、MBあたり約30msかかります。したがって、ディスクに100MBのデータを連続して書き込むと、約3秒かかります。ただし、1MBのランダム書き込みを100回行うと、合計4秒かかります(実際の書き込みには3秒、すべてのシークには10ms * 100 == 1秒)。

ランダム書き込みが小さくなるごとに、ディスクシークに対するペナルティがますます増えます。ランダムな1バイトの書き込みを1億回ランダムに実行する極端な場合、実際のすべての書き込みに対して3秒の差はありますが、11.57日やりたいことの価値!したがって、書き込みが連続的であるかランダムであるかが、タスクを完了するのにかかる時間に実際に影響する可能性があることは明らかです。

フラッシュの状況は少し異なります。フラッシュを使用すると、移動する必要がある物理ディスクヘッドがありません。 (これは、10msのシークコストが従来のディスクから発生する場所です)。ただし、フラッシュデバイスはページサイズが大きくなる傾向があります(最小の「典型的な」ページサイズは wikipedia に従って約512バイトで、4Kのページサイズも一般的です)。したがって、少数のバイトを書き込んでいる場合、ページ全体を読み出し、書き込み中のバイトを変更してからページ全体を書き戻す必要があるという点で、フラッシュには依然としてオーバーヘッドがあります。頭の上のフラッシュの特徴的な数字がわかりません。ただし、大まかな原則として、フラッシュでは、各書き込みのサイズがデバイスのページサイズに一般的に匹敵する場合、ランダム書き込みとシーケンシャル書き込みのパフォーマンスの違いはあまり見られません。各書き込みがデバイスのページサイズに比べて小さい場合、ランダム書き込みを行うときにオーバーヘッドが発生します。

さて、上記のすべてについて、アプリケーション層では多くがあなたから隠されているのは事実です。カーネル、ディスク/フラッシュコントローラなどには、「シーケンシャル」書き込みの途中で非自明なシークを挿入する可能性のあるレイヤーがあります。しかし、ほとんどの場合、アプリケーション層でシーケンシャルに見える(シークなし、多くの連続I/O)書き込みはシーケンシャル書き込みパフォーマンスを持ち、アプリケーション層でランダムに「見える」書き込みは(一般的に悪い)ランダム書き込みパフォーマンス。

85
Will Robinson