2009-05-14 27 views

答えて

17

これは実際にはかなり複雑な質問です.I/Oシステムの設定方法を理解する必要があります。引用している簡単な例(一定量のデータをディスク上の特定の場所に読み書きする)は、思ったほど現実的ではありません。ここでは、I/Oパフォーマンスに影響する可能性のある事項の概要を示します。

  1. ディスク速度
    ハードディスクの速度は通常、プラッタがドライブ内の周囲に回転しているどのくらいの速あなたに伝える回転速度(RPMまたは毎分回転数)、で表されます。典型的な値は54​​00から10,000rpmです。 Typical transfer ratesは1〜1.6GBit /秒で、最大125MB /秒の転送速度を維持できます。

    latencythroughputの間に違いがあることに注意してください。非常に小さいデータをドライブの別の場所に書き込む場合は、ドライブの待ち時間(seek timerotational delay、およびアクセス時間)に依存します。しかし、一度に大量のデータをストリーミングすると、おそらくスループットに依存しています。あなたのファイルシステムは、ファイルがディスク上でどのようにレイアウトされるかを決定し、以下のようなものを最適化しようとします。

    もう1つ考慮すべきことは、RAID構成の複数のドライブを使用して、より高速な転送速度を得ることができることです。 RAIDドライブのスループットは、選択したストライピング、ミラーリング、パリティの組み合わせによって異なります。すべての微妙な点については、Wikipedia articleをご覧ください。ここで説明するパラメータが多すぎます。彼らは、ディスク・ドライブと対話するとき現代OSの慎重スケジュールキャッシュ

  2. 。あなたのプログラムと物理ディスクの間にはいくつかのキャッシュ層があるかもしれませんので、アプリケーションプログラマとして見えるパフォーマンスは、OSがあなたのドライブの実際の性能よりもデータをどのように扱うかによります。ディスクからのデータをメモリに保持することができ、それがディスクに話したときにOSをスケジュールすることができるように

    ほとんどのOSの今日はbuffer cacheを使用しています。アプリケーションによって書かれたものは高速に見えるでしょう。なぜなら、それらはメモリに直接行くことができ、OSは何もするまでバッファをフラッシュするのを待つことができるからです。実際には、OSは非常にタイムリーな方法でフラッシュ書き込みを試みるため、停電によってすべてのデータが消去されることはありません。したがって、使用可能なバッファスペースがある一方、書き込みは高速に見えます。バッファキャッシュをいっぱいにした場合や、OSの空きメモリがほとんどない場合、OSがバッファを頻繁にフラッシュする必要があるため、I/Oパフォーマンスが低下することがあります。

    読み込み速度は、書き込み速度と同様に、データがキャッシュされている方法によって異なります。今日のほとんどのハードドライブは、持続的な転送速度を向上させるハードウェアキャッシュを備えています。同様に、OSはバッファキャッシュを使用して、アクセスしたファイルを保存します。これらのどちらも、ドライブからデータを取得するためのプリフェッチ戦略を必要に応じて使用することができます。キャッシングを使用すると、初期読み込みが遅くなる可能性がありますが、読み取るデータが既にどこかのキャッシュにある場合、後続の読み取り(特に同じものの読み取り)にかかる時間が短くなります。

  3. ファイルシステム
    は最後に、あなたのfilesystemを考慮することがあります。大きな書き込みはすべて同じ場所に行くわけではないので、転送時間を見積もる際に転送レートを考慮することはできません。ファイルが常にディスク上で連続しているとは限らず、ファイルシステムがどのようにレイアウトされるべきかを計算しなければならないため、ディスクの空き容量やディスクの種類によってパフォーマンスに大きな影響を及ぼします。

    読み取り/書き込み性能は上記のすべてのエフェクトの組み合わせに煮詰めるプラスあなたがドライブ上に置いたワークロードの特性になる

(データの大きさ、周波数の読み取りと書き込み、など)。ほとんどの場合と同様に、アプリケーション、実行するOS、特定のディスク構成を実験して、その実行方法を現実的に把握する必要があります。

+0

優秀な要約。私が追加する唯一のことは、通常の注意です。ほとんどの場合、このようなものを最適化しようとすべきではありません。あなたが非常に特定のアプリケーションを持っていない限り、あなたは正しいよりも間違っている可能性が高く、本当に賢い人々の多くは、OSを "正しいことをする"ように努めています。 –

+0

詳細な返答をお寄せいただきありがとうございます。私がシラバスの一部としてOSを勉強したのは、大学時代に戻ってきた:) –

3

短い答え:それは多く依存します。

アプリケーションレベルからは、一般的に書き込みが高速になります。 OSがデータを書き込むことを実際に要求するだけなので、OSはすぐにあなたに戻り、余裕でデータを書き込むことができます。読んで、あなたが望むデータでOSがあなたに戻ってくるのを待たなければなりません。

ファイルシステムは読み取りと書き込みの速度に劇的に影響します。書き込みにはより多くのハウスキーピングが必要ですが、ファイルへの追加が速くなる場合があります。

ほとんどのソリッドステートディスクは、読み込み時よりも書き込み時の方がはるかに低速です。

+0

また、RAIDアレイを使用している場合には、他にも多くの考慮事項があります。 –

1

バッファは、読み込みと書き込みの時間に大きな影響を与えます。バッファはオペレーティングシステムによってRAMに保持され、多くのドライブにはディスクコントローラの一部である内部バッファも含まれます。

これらの部分からの読み取りが非常に迅速に完了できるように、オペレーティングシステムがファイルの一部をRAMにキャッシュする可能性があると考えてください。さらに、オペレーティングシステムは、ディスクに書き込むのに十分な量があるまで、書き込みをRAMにキャッシュすることがあります。データをメモリの別の領域にコピーするだけで、 'write'関数の呼び出しが返されることがあります。

簡単に言えば、ビットをディスクに書き込む必要がある場合(フラッシュ操作などを使用して)、この操作は、少なくともディスクからの読み取りとキャッシュされていない読み取りの可能性があります。

関連する問題