システム上で実行中のプログラムに、使用可能な容量よりも大きな物理メモリーが必要になると、性能が低下します。この問題が発生すると、オペレーティングシステムはページングとスワッピングを開始し、ディスクと CPU のオーバーヘッドを増加させます。
ページングでは、最近参照されていないページが使用可能なメモリーページの空きリストに移動されます。カーネルのほとんどの部分はメインメモリーに常駐しており、ページングできません。
スワッピングは、ページングデーモンがメモリーの需要に追いつけなくなると発生します。スワッパは、休眠中または停止した軽量プロセス (LWP) をスワップアウトしようとします。休眠中または停止した LWP がなければ、スワッパは実行可能プロセスをスワップアウトします。そして優先順位に基づいて LWP をスワップバックします。スワッパは実行可能なプロセスをメモリーに戻します。ページのページングとスワッピングが発生すると、ディスクと CPU のオーバーヘッドが増加します。
スワップ空間は、実際にはスワッピングに使用されるファイルシステムです。スワップ空間のサイズは、アプリケーションの要件に基づいて設定する必要があります。購入先にアプリケーションの要件を問い合わせてください。
表 62-5 は、Solaris 2.x のインストールプログラムで、デフォルトのスワップ空間のサイズ設定に使用する計算式を示しています。スワップ空間のサイズを設定する方法がわからない場合は、これらのデフォルトのスワップサイズから始めるとよいでしょう。
表 62-5 デフォルトのスワップサイズ
物理メモリーのサイズ |
デフォルトのスワップサイズ |
---|---|
16 〜 64M バイト |
32M バイト |
64 〜 128M バイト |
64M バイト |
128 〜 512M バイト |
128M バイト |
512M バイトを超える場合 |
256M バイト |
スワップ空間の管理については、第 30 章「スワップ空間の追加構成の手順」を参照してください。
read システムコールと write システムコール用のバッファーキャッシュは、カーネルアドレス空間内で一定の範囲の仮想アドレスを使用します。1 ページ分のデータがカーネルのアドレス空間に対応づけられ、プロセスが要求したデータ量がプロセスのアドレス空間に物理的にコピーされます。次に、ページはカーネル内で対応づけを解除されます。物理ページは、ページデーモンによって開放されるまでメモリー内に残ります。
これは、少数の入出力集中型プロセスによってメインメモリーが独占されたり、他のプロセスが排除される可能性があることを意味します。メインメモリーの独占を防ぐには、スクリプト内で並列に、または at コマンドを使用して、入出力集中型のプロセスの実行負荷を調整します。プログラマは、mmap(2) と madvise(3) を使用して、プログラムが使用していないときに必ずメモリーを開放するように設定できます。