Solaris 環境は、必要に応じてページングされる仮想メモリーシステムです。システムの稼働に伴ってページが必要になると、そのページがメモリーに読み込まれます。メモリーの占有率が一定のしきい値を超え、さらにメモリーの要求が続くと、ページングが発生します。ページングには、一定の変数で制御されるいくつかのレベルがあります。
一般的なページングアルゴリズムは次のとおりです。
メモリーの不足が認識されます。 ページ走査スレッドが実行され、メモリーのチェックを開始します。この際、2 段階のアルゴリズムが使用されます。
使用されていないページを識別します。
一定の間隔後にもそのページが使用されていなければ、そのページを再利用の対象とみなします。
ページが変更されていると、そのページの入出力をスケジュールする要求をページアウトスレッドに出し、走査スレッドはメモリーの監視を続けます。ページアウトは、そのページをページのバッキングストアに書き込み、空リストに置くようにします。メモリーの走査では、ページの内容の区別はありません。ページは、データファイルからのものもあれば、実行可能ファイルのテキスト、データ、スタックからのものもあります。
システムのメモリーの使用が著しくなってくるに従い、このアルゴリズムは、再利用の候補とみなすページや、ページングアルゴリズムを実行する頻度に関する基準を強化します。詳細は、fastscanと slowscanを参照してください。使用可能なメモリーが lotsfree と minfree 間の範囲に入ると、システムは、ページアウトスレッドの各呼び出しで走査するメモリー総量を slowscan の値から fastscan の値に線形に増やします。システムは、desfree 変数を使用して、リソースの使用や動作に関する決定数を制御します。
システムはページアウト操作に 1 つの CPU の 4 % 以内の使用に限定しようとします。 メモリーへの負荷が大きくなると、それに比例してページアウト操作をサポートするために消費される CPU 時間が増加し、最大で 1 つの CPU の 80 % が消費されます。 このアルゴリズムは、slowscan と fastscan の間のメモリ量の一部を調べ、次の条件のどれかに当てはまると走査を終了します。
メモリー不足を解消するだけのページが見つかった。
予定のページ数を調べた。
長すぎる時間が経過した。
ページアウトが走査を終了してもメモリー不足が解消しない場合は、後で別の走査が 1/4 秒間スケジュールされます。
Solaris 9 リリースでは、ページングサブシステムの構成機構が変更されています。システムは fastscan、slowscan、および handspreadpages の事前定義された値を使用せずに、ブート時にこれらのパラメータへ適切な値を割り当てます。/etc/system ファイル内のこれらの変数を設定すると、システムが最適でない数値を使用する場合があります。
VM システムのすべてのチューニングパラメータを /etc/system から削除することをお勧めします。まずデフォルトの設定値で実行してから、これらのパラメータの調整が必要かどうかを判定してください。また、cachefree および priority_paging を設定しないでください。これらは Solaris 9 リリースでは削除されています。
Solaris 7 5/99 リリースから、CPU とメモリーに対する動的再構成 (DR) がサポートされています。メモリーの追加や削除を伴う DR 操作があると、該当のパラメータが /etc/system に明示的に設定されていなければ、その値が再計算されます。/etc/system にパラメータが指定されている場合は、変数の値が制約に違反していない限りその値が使用されます。違反している場合は、値がリセットされます。
システムページングを開始する最初のトリガーです。ページ数がこのしきい値に達すると、ページスキャナが立ち上がり、再利用するメモリーページを探します。
符号なし long
物理メモリーの 1/64 か 512K バイト (大きい方)
最小値は、512K バイトか物理メモリーの 1/64 の大きい方です。この値は、getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。
最大値は物理メモリーのページ数です。この最大値は、物理メモリーの 30% 以内であるべきです。システムは、「検査」の項目で記述されていなければ、この範囲を強制しません。
ページ
はい。ただしメモリーに関して DR 操作が行われると、動的な変更は失われます。
lotsfree が物理メモリーの総量より大きい場合、値はデフォルトにリセットされます。
lotsfree が desfree よりも大きく、desfree が minfree よりも大きいという関係が常に維持されるようにする必要があります。
ページ要求が急激に増えるような場合には、メモリーアルゴリズムが要求に対応できないことがあります。この問題を回避する 1 つの方法は、メモリーの再利用を早くに開始することです。これは、ページングシステムにいくらか余裕を与えることになります。
経験則によると、このパラメータは、システムが 2 〜 3 秒で割り当てる必要がある量の 2 倍にします。このパラメータの適正値は負荷によって異なります。DBMS サーバーはおそらくデフォルトの設定値で問題なく機能しますが、ファイルシステム入出力を頻繁に行うシステムでは、このパラメータを調整する必要があります。
負荷が比較的安定し、メモリー総量が多いシステムでは、この値を下方に調整します。指定可能な最小値は 512K バイトで、この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。
変更の可能性あり
符号なし整数
lotsfree / 2
最小値は 256K バイトか物理メモリーの 1/128 の大きい方です。この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。
最大値は物理メモリーのページ数です。この最大値は物理メモリーの 15% 以内であるべきです。システムは、「検査」の項目で記述されていなければ、この範囲を強制しません。
ページ
はい。ただしメモリーの追加や削除を伴う動的再構成が行われると、動的に変更した値は無効になります。その時点でこの値は、/etc/system ファイルに指定された値か、新しい物理メモリーの値から計算された値にリセットされます。
desfree が lotsfree より大きい場合、desfree は lotsfree/2 に設定されます。メッセージは表示されません。
lotsfree が desfree よりも大きく、desfree が minfree よりも大きいという関係が常に維持されるようにする必要があります。
この変数の値を増やすと、いくつかの副次的な影響が現われることがあります。この値がシステムの使用可能なメモリー量に近づくかそれを超えると、次のことが起ります。
使用可能なメモリーが desfree を越えない限り、非同期の入出力要求が処理されません。したがって、desfree の値を増やすと、増やす前なら処理されたであろう要求が拒否されることがあります。
NFS バージョン 3 の非同期書き込みが、同期書き込みとして実行されます。
スワッパーが本来より早く立ち上がり、そのスワッパーの動作が、積極的な動作をする方向に傾きます。
システムに前もって読み込む実行可能ページの数が本来よりも少なくなることがあります。この副次的な影響の結果、アプリケーションの動作が本来よりも遅くなる可能性があります。
負荷が比較的安定し、メモリー総量が多いシステムでは、この値を下方に調整します。指定可能な最小値は 256K バイトで、この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。
変更の可能性あり
許容できる最小限のメモリーレベル。メモリーがこの値を下回ると、システムは、ページアウト操作を正常に完了するか、複数のプロセスをメモリーから完全にスワップアウトするために必要な割り当てを行い、他の割り当て要求を拒否するかブロックします。
符号なし整数
desfree / 2
最小値は 128K バイトか物理メモリーの 1/256 の大きい方です。この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。
最大値は物理メモリーのページ数です。この最大値は物理メモリーの 7.5% 以内であるべきです。システムは、「検査」の項目で記述されていなければ、この範囲を強制しません。
ページ
はい。ただしメモリーの追加や削除を伴う動的再構成が行われると、動的に変更した値は無効になります。その時点でこの値は、/etc/system ファイルに指定された値か、新しい物理メモリーの値から計算された値にリセットされます。
minfree が desfree より大きい場合、minfree は desfree/2 に設定されます。メッセージは表示されません。
lotsfree が desfree よりも大きく、desfree が minfree よりも大きいという関係が常に維持されるようにする必要があります。
一般にはデフォルト値で十分です。負荷が比較的安定し、メモリー総量が多いシステムでは、この値を下方に調整します。指定可能な最小値は 128K バイトで、この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。
変更の可能性あり
符号なし整数
minfree
最小値は 128K バイトか物理メモリーの 1/256 の大きい方です。この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。
最大値は物理メモリーのページ数です。この最大値は物理メモリーの 4% 以内であるべきです。システムは、「検査」の項目で記述されていなければ、この範囲を強制しません。
ページ
はい。ただしメモリーの追加や削除を伴う動的再構成が行われると、動的に変更した値は無効になります。その時点でこの値は、/etc/system ファイルに指定された値か、新しい物理メモリーの値から計算された値にリセットされます。
throttlefree が desfree よりも大きい場合、throttlefree は minfree に設定されます。メッセージは表示されません。
lotsfree が desfree よりも大きく、desfree が minfree よりも大きいという関係が常に維持されるようにする必要があります。
一般にはデフォルト値で十分です。負荷が比較的安定し、メモリー総量が多いシステムでは、この値を下方に調整します。指定可能な最小値は 128K バイトで、この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。
変更の可能性あり
ページアウトスレッドやスケジューラスレッドのために予約されるページ数。使用可能なメモリーがこの値を下回ると、ページアウトやスケジューラ以外のプロセスに対するブロックしない割り当ては拒否されます。ページアウトには専用の小さなメモリープールが必要です。ページアウトは、ページをバッキングストアに書き込む入出力に必要なデータ構造体をここから割り当てます。この変数は、メモリー不足が極めて深刻な場合でもページアウト操作を行えるように、Solaris 2.6 リリースから導入されました。
符号なし整数
throttlefree / 2
最小値は 64K バイトか物理メモリーの 1/512 の大きい方です。この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。
最大値は物理メモリーのページ数です。この最大値は物理メモリーの 2% 以内であるべきです。システムは、「検査」の項目で記述されていなければ、この範囲を強制しません。
ページ
はい。ただしメモリーの追加や削除を伴う動的再構成が行われると、動的に変更した値は無効になります。その時点でこの値は、/etc/system ファイルに指定された値か、新しい物理メモリーの値から計算された値にリセットされます。
pageout_reserve が throttlefree / 2 より大きい場合、pageout_reserve は throttlefree / 2 に設定されます。メッセージは表示されません。
lotsfree が desfree よりも大きく、desfree が minfree よりも大きいという関係が常に維持されるようにする必要があります。
一般にはデフォルト値で十分です。負荷が比較的安定し、メモリー総量が多いシステムでは、この値を下方に調整します。指定可能な最小値は 64K バイトで、この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。
変更の可能性あり
ロックされていないことをシステムが要求するページ数を定義します。ページのロック要求によって使用可能なメモリーがこの値を下回る場合は、その要求は拒否されます。
符号なし long
tune_t_minarmem + 100 か、ブート時に使用可能なメモリーの4% + 4M バイト (大きい方)
システムが強制する最小値は tune_t_minarmem + 100。最大値はありません。
ページ
はい、ただしメモリーの追加や削除を伴う動的再構成が行われると、動的に変更した値は無効になります。その時点でこの値は、/etc/system ファイルに指定された値か、計算された値にリセットされます。
/etc/system ファイルで指定された値、またはデフォルトで計算された値が tune_t_minarmem + 100 よりも小さい場合、この値は tune_t_minarmem + 100 へリセットされます。
/etc/system ファイルからの値が増やされても、メッセージは表示されません。 ブート時とメモリーの追加または削除を伴なう動的再構成が行われた場合のみ実行されます。
メモリーのロック要求や、SHARE_MMU フラグを指定した共有メモリーセグメントへの接続が失敗したが、使用可能なメモリーが十分ありそうな場合。
大きすぎる値を設定すると、メモリーのロック要求 (mlock(3C)、mlockall(3C) および memcntl(2)) が不必要に失敗することがあります。
変更の可能性あり
詳細については pages_pp_maximum (Solaris 9 より前のリリース) を参照してください。
デッドロックを避けるために維持すべき最小限の使用可能な常駐 (スワップされない) メモリー。この値は、オペレーティングシステムのコアによって使用されるメモリー部分を予約するために使用されます。この方法で予約されたページは、OS が使用可能なメモリーの最大量を判定するときにはカウントに入れられません。
符号付き整数
25
1 から物理メモリー
ページ
いいえ
なし。値が大きいと、物理メモリーが無駄になります。
一般にはデフォルト値で十分です。システムがロックアップし、問題がメモリーが利用できないことに起因していることをデバッグ情報が示している場合は、この値を増やすことを検討してください。
変更の可能性あり
符号付き整数
64M バイトか物理メモリーの 1/2 (小さい方)
1 から物理メモリーの 1/2
ページ
はい。ただしメモリーの追加や削除を伴う動的再構成が行われると、動的に変更した値は無効になります。その時点でこの値は、/etc/system ファイルに指定された値か、新しい物理メモリーの値から計算された値にリセットされます。
最大値は、64M バイトと物理メモリーの 1/2 のうちで小さい方です。
メモリー不足のときにメモリーの走査を強化したい場合。特に、システムでメモリーの要求が急激に多くなることがある場合や、多数のファイル入出力が行われることがある場合。
変更の可能性あり
符号付き整数
物理メモリーの 1/20 (ページ数) か 100 (小さい方)
1 から fastscan / 2
ページ
はい。ただしメモリーの追加や削除を伴う動的再構成が行われると、動的に変更した値は無効になります。その時点でこの値は、/etc/system ファイルに指定された値か、新しい物理メモリーの値から計算された値にリセットされます。
slowscan が fastscan / 2 より大きい場合、slowscan は fastscan / 2 に設定されます。メッセージは表示されません。
メモリー不足のときにメモリーの走査を強化したい場合。特に、システムでメモリーの要求が急激に多くなるときがある場合。
変更の可能性あり
pageout で使用できる最小の CPU の割合 (%)。この変数は、ページスキャナで使用できる最大時間を判定するための開始点として使用されます。
符号付き整数
4
1 から 80
%
はい
なし
複数の CPU と多くのメモリーを備えたシステム (このようなシステムではメモリーの要求が急激に多くなるときがある) でこの値を増やすと、ページャがメモリーの検出に使用できる時間が増えます。
変更の可能性あり
Solaris 環境では、2 針クロックアルゴリズムを使用して、メモリーが少なくなったときにメモリー再利用の候補となるページを探します。最初の針はメモリーに使用されていないという印を付けていきます。次の針は、最初の針の少し後から、そのページに依然として使用されていないという印が付けられているかを調べます。使用されていなければ、そのページが再利用の対象になります。最初の針と次の針の間隔が handspreadpages です。
符号なし long
fastscan
1 からシステムの物理メモリーの最大ページ数
ページ
はい。このパラメータを変更する場合、カーネル変数 reset_hands もゼロ以外の値に設定する必要があります。handspreadpages の新しい値がいったん認識されると、reset_hands はゼロに設定されます。
物理メモリーの総量と handspreadpages の値のうちで小さい方に設定されます。
再利用される前にページがメモリー上に存在するかもしれない時間を増やしたい場合。この値を増やすと 2 つの段階の間の時間が長くなるため、ページが再利用されるまでの時間が増えます。
変更の可能性あり
入出力が終了したら、再利用に備えてページを保存する代わりに、それらのページをただちに解放することを示すシステムしきい値の一部です。このしきい値は lotsfree + pages_before_pager です。さらに、NFS 環境も、メモリーが不足するとこのしきい値を使用して非同期の活動を減らします。
符号付き整数
200
1 から物理メモリーのページ数
ページ
いいえ
なし
入出力の大半が、一度だけ読み取られたり書き込まれたりするだけで、再び参照されることがないページに対するものである場合。この変数を大きなメモリーの値に設定すると、ページは空リストに追加され続けます。
システムが突発的に深刻なメモリー不足に陥る可能性がある場合。この値を増やすと、メモリー不足に対する備えがそれだけ強化されます。
変更の可能性あり
ページングシステムがキューに入れることができるページ入出力要求の最大数。ページングシステムは、実際に使用する最大数を計算するために、この数字を 4 で割ります。これは、要求の数を制限する他に、プロセスのスワッピングを制御するためにも使用されます。
符号付き整数
40
1 から 1024
入出力
いいえ
なし
ページャからの入出力要求の最大数は、要求バッファのリストのサイズによって制限されます。現在のサイズは 256 です。
システムが突発的に深刻なメモリー不足に陥る可能性がある場合。この値を増やすと、複数のスワップデバイスが構成されているか、スワップデバイスがストライプデバイスである場合、メモリー不足の解消が早くなります。
変更の可能性あり