Solaris カーネルのチューンアップ・リファレンスマニュアル

ページング関連のチューニング可能パラメータ

Solaris 環境は、必要に応じてページングされる仮想メモリーシステムです。システムの稼働に伴ってページが必要になると、そのページがメモリーに読み込まれます。メモリーの占有率が一定のしきい値を超え、さらにメモリーの要求が続くと、ページングが発生します。ページングには、一定の変数で制御されるいくつかのレベルがあります。

一般的なページングアルゴリズムは次のとおりです。

システムはまた、ページアウト操作を、1 つの CPU の 4% 以内に限定しようとします。このアルゴリズムは、slowscanfastscan の間のメモリー量の一部を調べ、次の条件のどれかに当てはまると走査を終了します。

ページアウトが走査を終了してもメモリー不足が解消しない場合は、後で別の走査が 1/4 秒間スケジュールされます。


注意 - 注意 -

VM システムのすべてのチューニングパラメータを /etc/system から削除することをお勧めします。まずデフォルトの設定値で実行してから、これらのパラメータの調整が必要かどうかを判定してください。さらに、priority_paging を有効にしたり、cachefree を調整しないでください。これらはカーネルに残っていますが、現在では必要なものではありません。これらを変更すると、ページ走査が実行されたときにほとんどの場合パフォーマンスが低下します。


Solaris 7 5/99 リリースから、CPU とメモリーに対する動的再構成 (DR) がサポートされています。メモリーの追加や削除を伴う DR 操作があると、該当のパラメータが /etc/system に明示的に設定されていなければ、その値が再計算されます。/etc/system にパラメータが指定されている場合は、変数の値が制約に違反していない限りその値が使用されます。違反している場合は、値がリセットされます。

lotsfree

説明

システムページングを開始する最初のトリガーです。ページ数がこのしきい値に達すると、ページスキャナが立ち上がり、再利用するメモリーページを探します。

データ型

符号なし long

デフォルト

物理メモリーの 1/64 か 512K バイト (大きい方)

範囲

最小値は、512K バイトか物理メモリーの 1/64 の大きい方です。この値は、getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。

最大値は物理メモリーページの数です。この最大値は、物理メモリーの 30% 以内であるべきです。システムは、「検査」の項目で記述されていなければ、この範囲を強制しません。

単位

ページ

動的か

はい。ただし、メモリーに関して DR 操作が行われると、動的な変更は失われます。

検査

lotsfree が物理メモリーの総量より大きい場合、値はデフォルトにリセットされます。

暗黙的制約

cachefreelotsfree に等しいかそれより大きく、lotsfreedesfree より大きく、desfreeminfree より大きいという関係が常に維持されなければなりません。

どのような場合に変更するか

ページ要求が急激に増えるような場合には、メモリーアルゴリズムが要求に対応できないことがあります。この問題を回避する 1 つの方法は、メモリーの再利用を早くに開始することです。これは、ページングシステムにいくらか余裕を与えることになります。

経験則によると、このパラメータは、システムが 2 〜 3 秒で割り当てる必要がある量の 2 倍にします。このパラメータの適正値は負荷によって異なります。DBMS サーバーはおそらくデフォルトの設定値で問題なく機能しますが、ファイルシステム入出力を頻繁に行うシステムでは、このパラメータを調整する必要があります。

負荷が比較的安定し、メモリー総量が多いシステムでは、この値を下方に調整します。指定可能な最小値は 512K バイトで、この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。

コミットレベル

変更の可能性あり

desfree

説明

システムで常に空であることが望まれるメモリーの総量です。

データ型

符号なし整数

デフォルト

lotsfree / 2

範囲

最小値は 256K バイトか物理メモリーの 1/128 の大きい方です。この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。

最大値は物理メモリーのページ数です。この最大値は物理メモリーの 15% 以内であるべきです。システムは、「検査」の項目で記述されていなければ、この範囲を強制しません。

単位

ページ

動的か

はい。ただし、メモリーの追加や削除を伴う動的再構成が行われると、その時点でこの値は、/etc/system ファイルに指定された値か、新しい物理メモリーの値から計算された値にリセットされます。

検査

desfreelotsfree より大きい場合、desfreelotsfree/2 に設定されます。メッセージは表示されません。

暗黙的制約

cachefreelotsfree に等しいかそれより大きく、lotsfreedesfree より大きく、desfreeminfree より大きいという関係が常に維持されなければなりません。

副次的な影響

この変数の値を増やすと、いくつかの副次的な影響が現われることがあります。この値がシステムの使用可能なメモリー量に近づくかそれを超えると、次のことが起ります。

  • 使用可能なメモリーが desfree を越えない限り、非同期の入出力要求が処理されません。したがって、desfree の値を増やすと、増やす前なら処理されたであろう要求が拒否されることがあります。

  • NFS バージョン 3 の非同期書き込みが、同期書き込みとして実行されます。

  • スワッパーが本来より早く立ち上がり、そのスワッパーの動作が、積極的な動作をする方向に傾きます。

  • システムに前もって読み込む実行可能ページの数が本来よりも少なくなることがあります。この副次的な影響の結果、アプリケーションの動作が本来よりも遅くなる可能性があります。

どのような場合に変更するか

負荷が比較的安定し、メモリー総量が多いシステムでは、この値を下方に調整します。指定可能な最小値は 256K バイトで、この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。

コミットレベル

変更の可能性あり

minfree

説明

許容できる最小限のメモリーレベル。メモリーがこの値を下回ると、システムは、ページアウト操作を正常に完了するか、複数のプロセスをメモリーから完全にスワップアウトするために必要な割り当てを行い、他の割り当て要求を拒否するかブロックします。

データ型

符号なし整数

デフォルト

desfree / 2

範囲

最小値は 128K バイトか物理メモリーの 1/256 の大きい方です。この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。

最大値は物理メモリーのページ数です。この最大値は物理メモリーの 7.5% 以内であるべきです。システムは、「検査」の項目で記述されていなければ、この範囲を強制しません。

単位

ページ

動的か

はい。ただし、メモリーの追加や削除を伴う動的再構成が行われると、その時点でこの値は、/etc/system ファイルに指定された値か、新しい物理メモリーの値から計算された値にリセットされます。

検査

minfreedesfree より大きい場合、minfreedesfree/2 に設定されます。メッセージは表示されません。

暗黙的制約

cachefreelotsfree に等しいかそれより大きく、lotsfreedesfree より大きく、desfreeminfree より大きいという関係が常に維持されなければなりません。

どのような場合に変更するか

一般にはデフォルト値で十分です。負荷が比較的安定し、メモリー総量が多いシステムでは、この値を下方に調整します。指定可能な最小値は 128K バイトで、この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。

コミットレベル

変更の可能性あり

throttlefree

説明

ブロック可能なメモリー割り当ての要求を、その要求を満足できるメモリーがある場合でも休眠状態に置くメモリーレベル。

データ型

符号なし整数

デフォルト

minfree

範囲

最小値は 128K バイトか物理メモリーの 1/256 の大きい方です。この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。

最大値は物理メモリーのページ数です。この最大値は物理メモリーの 4% 以内であるべきです。システムは、「検査」の項目で記述されていなければ、この範囲を強制しません。

単位

ページ

動的か

はい。ただし、メモリーの追加や削除を伴う動的再構成が行われると、その時点でこの値は、/etc/system ファイルに指定された値か、新しい物理メモリーの値から計算された値にリセットされます。

検査

throttlefreedesfree よりも大きい場合、throttlefreeminfree に設定されます。メッセージは表示されません。

暗黙的制約

cachefreelotsfree に等しいかそれより大きく、lotsfreedesfree より大きく、desfreeminfree より大きいという関係が常に維持されなければなりません。

どのような場合に変更するか

一般にはデフォルト値で十分です。負荷が比較的安定し、メモリー総量が多いシステムでは、この値を下方に調整します。指定可能な最小値は 128K バイトで、この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。

コミットレベル

変更の可能性あり

pageout_reserve

説明

ページアウトスレッドやスケジューラスレッドのために予約されるページ数。使用可能なメモリーがこの値を下回ると、ページアウトやスケジューラ以外のプロセスに対するブロックしない割り当ては拒否されます。ページアウトには専用の小さなメモリープールが必要です。ページアウトは、ページをバッキングストアに書き込む入出力に必要なデータ構造体をここから割り当てます。この変数は、メモリー不足が極めて深刻な場合でもページアウト操作を行えるように、Solaris 2.6 リリースから導入されました。

データ型

符号なし整数

デフォルト

throttlefree / 2

範囲

最小値は 64K バイトか物理メモリーの 1/512 の大きい方です。この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。

最大値は物理メモリーのページ数です。この最大値は物理メモリーの 2% 以内であるべきです。システムは、「検査」の項目で記述されていなければ、この範囲を強制しません。

単位

ページ

動的か

はい。ただし、メモリーの追加や削除を伴う動的再構成が行われると、その時点でこの値は、/etc/system ファイルに指定された値か、新しい物理メモリーの値から計算された値にリセットされます。

検査

pageout_reservethrottlefree / 2 より大きい場合、pageout_reservethrottlefree / 2 に設定されます。メッセージは表示されません。

暗黙的制約

cachefreelotsfree に等しいかそれより大きく、lotsfreedesfree より大きく、desfreeminfree より大きく、minfreethrottlefree に等しいかそれより大きいという関係が常に維持されなければなりません。

どのような場合に変更するか

一般にはデフォルト値で十分です。負荷が比較的安定し、メモリー総量が多いシステムでは、この値を下方に調整します。指定可能な最小値は 64K バイトで、この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。

コミットレベル

変更の可能性あり

cachefree

説明

Solaris 8 リリースで、ファイルシステムページのキャッシュ方法が変更されました。これらの変更には、優先度ページング機能が含まれています。


注 -

cachefreepriority_paging の両方の設定を /etc/system ファイルから削除してください。


キャッシュ方法の変更により、ファイルシステムの動作に伴って発生する仮想メモリーシステムへの負担がほとんど解消されます。統計によると、次のような新しい動作が見られます。

  • ページ再利用の数が多くなります。これは、入出力が終了すると、ページが明示的に空リストに追加されるためです。

  • 空きメモリーが増えます。これは、空きメモリーのカウントにファイルキャッシュの大部分が含まれるためです。

  • 走査率が大幅に減ります。

コミットレベル

廃止または互換性がなくなる可能性あり

変更履歴

詳細は、cachefree (Solaris 2.6 リリースおよび Solaris 7 リリース)」を参照してください。

priority_paging

説明

この変数に基づき lotsfree の 2 倍の値が cachefree に設定されます。

Solaris 8 リリースで、ファイルシステムページのキャッシュ方法が変更されました。これらの変更には、優先度ページング機能が含まれます。


注 -

cachefreepriority_paging の設定を /etc/system ファイルから削除してください。


コミットレベル

廃止または互換性がなくなる可能性あり

変更履歴

詳細は、priority_paging (Solaris 2.6 リリースおよび Solaris 7 リリース)」を参照してください。

pages_pp_maximum

説明

ロックされていないことをシステムが要求するページ数を定義します。ページのロック要求によって使用可能なメモリーがこの値を下回る場合は、その要求は拒否されます。

データ型

符号なし long

デフォルト

200、tune_t_minarmem + 100、[ブート時に使用可能なメモリーの 10%] 、のうちで最も大きいもの

範囲

デフォルト値から物理メモリーの 20% 以内。システムは、「検査」の項目で記述されていなければ、この範囲を強制しません。

単位

ページ

動的か

はい。ただし、メモリーの追加や削除を伴う動的再構成が行われると、その時点でこの値は、/etc/system ファイルに指定された値か、計算された値にリセットされます。

検査

200、tune_t_minarmem + 100、[使用可能なメモリーの 10%]、/etc/system からの値の中で最も大きいもの。/etc/system からの値が増やされても、メッセージは表示されません。ブート時にのみ行われます。

どのような場合に変更するか

メモリーのロック要求や、SHARE_MMU フラグを指定した共有メモリーセグメントへの接続が失敗したが、使用可能なメモリーが十分ありそうな場合。32G バイトシステムで、メモリーの 10% を空き状態に維持することは過剰である場合があります。

値が大きすぎると、メモリーロック要求が不必要に失敗する可能性があります。

コミットレベル

変更の可能性あり

tune_t_minarmem

説明

デッドロックを避けるために維持すべき最小限の使用可能な常駐 (スワップされない) メモリー。この値は、オペレーティングシステムのコアによって使用されるメモリー部分を予約するために使用されます。この方法で予約されたページは、OS が使用可能なメモリーの最大量を判定するときにはカウントに入れられません。

データ型

符号付き整数

デフォルト

25

範囲

1 から物理メモリー

単位

ページ

動的か

いいえ

検査

なし。値が大きいと、物理メモリーが無駄になります。

どのような場合に変更するか

一般にはデフォルト値で十分です。システムがロックアップし、問題がメモリーが利用できないことに起因していることをデバッグ情報が示している場合は、この値を増やすことを検討してください。

コミットレベル

変更の可能性あり

fastscan

説明

メモリーが最も逼迫しているときにシステムが 1 秒間に調べるページの最大数

データ型

符号付き整数

デフォルト

64M バイトか物理メモリーの 1/2 (小さい方)

範囲

1 から物理メモリーの 1/2

単位

ページ

動的か

はい。ただし、メモリーの追加や削除を伴う動的再構成が行われると、その時点でこの値は、/etc/system ファイルに指定された値か、新しい物理メモリーの値から計算された値にリセットされます。

検査

最大値は、64M バイトと物理メモリーの 1/2 のうちで小さい方です。

どのような場合に変更するか

メモリー不足のときにメモリーの走査を強化したい場合。特に、システムでメモリーの要求が急激に多くなることがある場合や、多数のファイル入出力が行われることがある場合。

コミットレベル

変更の可能性あり

slowscan

説明

メモリーを再利用するためにシステムが 1 秒間に調べるページの最小数

データ型

符号付き整数

デフォルト

物理メモリーの 1/20 (ページ数) か 100 (小さい方)

範囲

1 から fastscan / 2

単位

ページ

動的か

はい。ただし、メモリーの追加や削除を伴う動的再構成が行われると、その時点でこの値は、/etc/system ファイルに指定された値か、新しい物理メモリーの値から計算された値にリセットされます。

検査

slowscanfastscan / 2 より大きい場合、slowscanfastscan / 2 に設定されます。メッセージは表示されません。

どのような場合に変更するか

メモリー不足のときにメモリーの走査を強化したい場合。特に、システムでメモリーの要求が急激に多くなるときがある場合。

コミットレベル

変更の可能性あり

min_percent_cpu

説明

pageout で使用できる最小の CPU の割合 (%)。この変数は、ページスキャナで使用できる最大時間を判定するための開始点として使用されます。

データ型

符号付き整数

デフォルト

4

範囲

1 から 80

単位

%

動的か

はい

検査

なし

どのような場合に変更するか

複数の CPU と多くのメモリーを備えたシステム (このようなシステムではメモリーの要求が急激に多くなるときがある) でこの値を増やすと、ページャーがメモリーの検出に使用できる時間が増えます。

コミットレベル

変更の可能性あり

handspreadpages

説明

Solaris 環境では、2 針クロックアルゴリズムを使用して、メモリーが少なくなったときにメモリー再利用の候補となるページを探します。最初の針はメモリーに使用されていないという印を付けていきます。次の針は、最初の針の少し後から、そのページに依然として使用されていないという印が付けられているかを調べます。使用されていなければ、そのページが再利用の対象になります。最初の針と次の針の間隔が handspreadpages です。

データ型

符号なし long

デフォルト

fastscan

範囲

1 からシステムの物理メモリーの最大ページ数

単位

ページ

動的か

はい。このパラメータを変更する場合、カーネル変数 reset_hands もゼロ以外の値に設定する必要があります。handspreadpages の新しい値がいったん認識されると、reset_hands はゼロに設定されます。

検査

物理メモリーの総量と handspreadpages の値のうちで小さい方に設定されます。

どのような場合に変更するか

再利用される前にページがメモリー上に存在するかもしれない時間を増やしたい場合。この値を増やすと 2 つの段階の間の時間が長くなるため、ページが再利用されるまでの時間が増えます。

コミットレベル

変更の可能性あり

pages_before_pager

説明

入出力が終了したら、再利用に備えてページを保存する代わりに、それらのページをただちに解放することを示すシステムしきい値の一部です。このしきい値は lotsfree + pages_before_pager です。さらに、NFS 環境も、メモリーが不足するとこのしきい値を使用して非同期の活動を減らします。

データ型

符号付き整数

デフォルト

200

範囲

1 から物理メモリーの総量

単位

ページ

動的か

いいえ

検査

なし

どのような場合に変更するか

入出力の大半が、一度だけ読み取られたり書き込まれたりするだけで、再び参照されることがないページに対するものである場合。この変数を大きなメモリーの値に設定すると、ページは空リストに追加され続けます。

システムが突発的に深刻なメモリー不足に陥る可能性がある場合。この値を増やすと、メモリー不足に対する備えがそれだけ強化されます。

コミットレベル

変更の可能性あり

maxpgio

説明

ページングシステムがキューに入れることができるページ入出力要求の最大数。ページングシステムは、実際に使用する最大数を計算するために、この数字を 4 で割ります。これは、要求の数を制限する他に、プロセスのスワッピングを制御するためにも使用されます。

データ型

符号付き整数

デフォルト

40

範囲

1 から 1024

単位

入出力

動的か

いいえ

検査

なし

暗黙的制約

ページャからの入出力要求の最大数は、要求バッファのリストのサイズによって制限されます。現在のサイズは 256 です。

どのような場合に変更するか

システムが突発的に深刻なメモリー不足に陥る可能性がある場合。この値を増やすと、複数のスワップデバイスが構成されているか、スワップデバイスがストライプデバイスである場合、メモリー不足の解消が早くなります。

コミットレベル

変更の可能性あり