web-dev-qa-db-ja.com

高いディスクI / Oがシステムの応答性/パフォーマンスを低下させるのはなぜですか?

高いディスクI/Oがシステムの処理速度を大幅に低下させた理由を私はよく理解していません。スローダウンはハード/オプティカルドライブのデータに依存するプロセスのみに影響を与えると予想しているので、私には奇妙ですが、スローダウンはRAMにロードされたものにも影響します。ここではiowaitを参照しています。

なぜプロセッサは他の作業をする代わりに待機するのですか?誰もがこの制限を説明できますか?なぜそれがLinuxカーネルで解決されていないのですか?この問題がないカーネルはありますか?

[note]このパフォーマンス領域では ある程度の進歩 がありました。 1つは、後のカーネル(私の場合は2.6.37)の方が応答性が高いことです。

19
tshepang

オペレーティングシステムは 仮想メモリ を使用するため、物理メモリよりも多くのメモリを使用できますRAM使用可能。カーネルが物理メモリをより適切に使用すると判断した場合メモリページの場合、そのコンテンツはディスク上のストレージ用に「ページアウト」される可能性があります。ページアウト中にそのような仮想メモリページにアクセスすると、ページフォールト、ディスクからRAMに戻されます。

RAMレイテンシはナノ秒で測定されます。1ミリ秒= 100万ナノ秒!)

メモリは、ユーザープロセスだけでなく、ファイルシステムキャッシュなどのカーネルによっても使用されます。ファイルシステムの動作中、カーネルは最近使用されたデータをキャッシュします。同じデータが間もなく再び使用される可能性が高いと想定されているため、キャッシングによりI/Oパフォーマンスが向上するはずです。

ファイルシステムキャッシュに使用されている物理メモリはプロセスに使用できないため、ファイルシステムのアクティビティ中に、より多くのプロセスメモリがページアウトされ、ページフォールトが増加します。また、メモリページをディスクとの間で移動するために使用できるディスクI/O帯域幅が少なくなります。その結果、プロセスが停止する可能性があります。

9
Wim Coenen

私が理解している限り、IOwaitとは、プロセッサではなくプロセスがIOが利用可能になるのを待っていることを意味します。プロセッサはハードドライブよりもはるかに高速になり、より多くのコードがより速く終了します。その後、ディスクを読み取る必要があります。ドライブが十分に速く実行できる速度よりも多く読み取る必要がある場合、プロセッサの待機状態になります。ディスクへの読み取り/書き込みを行うユーザーの決定方法は、ブロックによって決定されますスケジューラ、ほとんどの場合CFQを使用しています。CFQを使用していて、システム全体の応答時間を短縮するためにプロセスが必要な場合IOシステムの応答性を向上させるために、ionice -c3 <processid>。これは、他に何も必要としない場合にのみ、このプロセスにIOを与えるようにシステムに指示します。

これ はまだ興味深く、iowaitの問題をよりよく説明しています。

5
xenoterracide