この節では、スワップ空間の概念と、Solaris 1.x (SunOS 4.x) と Solaris 2.x (SunOS 5.x) のスワップ要件の違いについて説明します。すでに Solaris 2.x のスワップ機構に慣れている方は、「スワップ空間の計画」の節に進んでください。
管理者は、次の事柄を決定する上で Solaris 2.x の機能を理解しておく必要があります。
スワップ空間の要件
tmpfs ファイルシステムとの関係
スワップ空間に関連するエラーメッセージからの復元
Solaris 2.x システムソフトウェアは、ファイルシステムではなく一時記憶域に一部のディスクスライスを使用します。これらのスライスを「 スワップ」スライスと呼びます。スワップスライスは、システムの物理メモリー不足のために現在のプロセスを処理することができないときに、仮想メモリー記憶域として使用されます。
Solaris 2.x の仮想メモリーシステムは、ディスク上のファイルの物理コピーをメモリー内の仮想アドレスに対応付けます。これらのマッピングに関するデータが入った物理メモリーページは、ファイルシステム内の通常ファイルまたはスワップ空間から読み直されます。ユーザーにはメモリーをバックアップしているファイル名はわからないため、スワップ空間から読み直されたメモリーは「anonymous メモリー」として参照されます。
Solaris 1.x の anonymous メモリーページは、システムのスワップ空間プールからランダムに割り当てられた名前を使用して対応付けられます。これらのメモリーページの用途は次のとおりです。
書き込み時コピー処理中に作成されるデータの専用コピー
プロセスとスタックのセグメント
TMPFS ファイルシステム記憶域の資源
Solaris 1.x anonymous メモリーを実装する場合、次の制限があります。
アプリケーションで使用されない場合にも、anonymous メモリーのマッピング用に必ず物理記憶域 (ディスク上にとられたバックアップ用のスワップ空間) を確保しなければならない。
たとえば、大量のデータセグメントを持つアプリケーションは、各ページが物理記憶域にデータが書き出されない場合でも、大量のスワップ空間を使用して構成しなければならない。
バックアップとなる記憶域はランダムに選択され、変更できないので、anonymous メモリーページを物理記憶域に関連付けるための方法には制限があり、柔軟性に欠ける。
Solaris 2.x ソフトウェア環境には、「仮想スワップ空間」という概念が導入されています。これは、anonymous メモリーページとこれらのページを実際にバックアップする物理記憶域 (またはディスク上にとられたバックアップ用のスワップ空間) の間に位置する層です。システムの仮想スワップ空間は、すべての物理 (ディスク上にとられたバックアップ用のスワップ空間) スワップ空間と現在使用可能な物理メモリーの一部の合計に等しくなります。
仮想スワップ空間の長所は次のとおりです。
仮想スワップ空間が物理 (ディスク) 記憶域に対応していなくてもかまわないので、大きな物理スワップ空間を確保する必要がなくなる。
SWAPFS という疑似ファイルシステムが、anonymous メモリーページのアドレスを提供する。SWAPFS はメモリーページの割り当てを制御するので、ページに対する処理を柔軟に決定できる。たとえば、ディスク上にとられたバックアップ用のスワップ記憶域のページ要件を変更できる。
Solaris 2.x 環境では、TMPFS ファイルシステムは /etc/vfstab ファイル内のエントリによって自動的に稼働されます。TMPFS ファイルシステムは、ファイルとそれに関連付けられた情報をディスクではなくメモリー (/tmp ディレクトリ内) に格納するので、これらのファイルへのアクセスが高速になります。このため、コンパイラや DBMS 製品のように /tmp の使用量の大きいアプリケーションの場合は、性能が大幅に改善されます。
TMPFS ファイルシステムは、システムのスワップ資源から /tmp ディレクトリ内の領域を割り当てます。つまり、/tmp 内の領域を使い果たすと、スワップ空間も使い果たしたことになります。したがって、アプリケーションの /tmp の使用量が大きい場合に、スワップ空間の使用状況を監視しなければ、システムがスワップ空間を使い果たす可能性があります。
TMPFS を使用したいがスワップ資源が限られている場合は、次の方法を使用してください。
サイズオプション (-o size) を指定して TMPFS ファイルシステムをマウントし、スワップ資源 TMPFS をどの程度使用できるかを制御する。
スワップ空間が足りなくなった場合は、コンパイラを TMPDIR
環境変数を使用して、より大きな一時ディレクトリを指すことができる。
コンパイラの TMPDIR
変数を使用すると、コンパイラが /tmp を使用するかどうかだけが制御される。他のプログラムによる /tmp の使用には影響しない。