他のパワフルなツールと同様に、仮想メモリによってコンピュータが簡単に大きく複雑なアプリケーションを処理できるようになりますが、犠牲になるものがあります。この場合、パフォーマンスのひとつです。仮想メモリのオペレーティングシステムでは仮想メモリをサポートできないオペレーティングシステムに比べて多くの動作を必要とします。つまり、同じアプリケーションが 100% メモリ常駐なら仮想メモリのあるオペレーティングシステムは仮想メモリをサポートしないオペレーティングシステムほどのパフォーマンスは期待できません。
しかし、あきらめてしまう必要はありません。仮想メモリの利点にはすばらしいものがあります。ほんの少しの作業で適切なパフォーマンスを得ることができます。行なうべきことは、仮想メモリサブシステムの大量使用により影響を受けるこれらシステムリソースを調べることです。
この章で学んできたことを少し振り返って極端に激しいページフォルトやスワッピング動作に使用されているシステムリソースがどれなのか考えてみます。
RAM — 使用可能な RAM が少なくなっていると考えるのが論理的です(そうでなければ、ページフォルトまたはスワップが発生する必要性がないはずです)。
ディスク — ディスク領域に影響がないかもしれないのに(大量のページングやスワッピングにより) I/O ハンド幅に影響している可能性があります。
CPU — CPU がメモリ管理をサポートするために必要な処理を行ない、ページングやスワッピングに必要な I/O 動作の設定を行なっているためサイクルを消費しています。
こうした負荷の相互関係により、リソース不足がいかに深刻なパフォーマンスの問題を招く可能性があるのか理解しやすくなります。
すべてシステムに RAM が少なすぎる、大量のページフォルト動作が起こっている、CPU またはディスク I/O の点で制限ぎりぎりでシステムが稼働しているということになります。この時点で、システムはスラッシング状態に陥ってしまい、必然的にパフォーマンスが低下します。
最適な状態では、仮想メモリのサポートによるオーバーヘッドは適切に設定されたシステムに対して最小限の追加負荷を示します。
RAM — すべてのワーキングセットに対してページフォルトを処理するのに十分な空きがRAM にあります [1]
ディスク — ページフォルトが限られているため、ディスク I/O バンド幅が受ける影響は最小限となります。
CPU — CPU サイクルの大半が、オペレーティングシステムのメモリ管理コードの実行ではなく、実際に実行しているアプリケーションに向けられています。
ここから、全般的に留意すべき点は仮想メモリによるパフォーマンスへの影響はそれが使用されている時にできるだけ最小限になっているということです。つまり、最適な仮想メモリサブシステムパフォーマンスの主たる決定的な要素は十分な RAM があるということになります。
次に(重要性は低いですが)留意すべき点は、ディスク I/O と CPU の処理能力が十分であるかということです。しかし、これらのリソースはシステムパフォーマンスが大量のページフォルトやスワッピングにより適切に degrade するのを助けるだけであることに留意してください。仮想メモリサブシステムのパフォーマンス向上には役に立ちません(しかし、全体的なシステムパフォーマンスにおける主要な役割を担っているのは確かです)。
[1] | 適度に活発なシステムは、新規に起動したアプリケーションとして起きたページフォルトをメモリに送るため、常にある程度のページフォルト動作が発生しています。 |