Go to main content
Oracle® Solaris 11.3 カーネルのチューンアップ・リファレンスマニュアル

印刷ビューの終了

更新: 2016 年 11 月
 
 

ページング関連パラメータ

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

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

  • メモリーの不足が認識されます。ページ走査スレッドが実行され、メモリーのチェックを開始します。この際、2 段階のアルゴリズムが使用されます。

    1. 使用されていないページを識別します。

    2. 一定の間隔後にもそのページが使用されていなければ、そのページを再利用の対象とみなします。

    ページが変更されていれば、ページアウトスレッドに対して、ページの入出力をスケジューリングするように要求されます。さらに、ページスキャナが引き続きメモリーを調べます。ページアウトは、そのページをページのバッキングストアに書き込み、空リストに置くようにします。ページスキャナがメモリーを走査するときに、ページの内容の区別はありません。ページは、データファイルからのものもあれば、実行可能ファイルのテキスト、データ、スタックからのものもあります。

  • システムのメモリーの使用が著しくなってくるに従い、このアルゴリズムは、再利用の候補とみなすページや、ページングアルゴリズムを実行する頻度に関する基準を強化します。(詳細は、fastscanおよびslowscanを参照してください。)使用可能なメモリーが lotsfree から minfree の範囲内になると、システムはページアウトスレッドが呼び出されるたびに走査するメモリー量を、slowscan で指定された値から fastscan で指定された値に直線的に増やします。システムは、desfree パラメータを使用して、リソースの使用や動作に関する決定回数を制御します。

システムはページアウト操作を 1 つの CPU の 4% 以内の使用に限定しようとします。メモリーへの負荷が大きくなると、それに比例してページアウト操作をサポートするために消費される CPU 時間が増加し、最大で 1 つの CPU の 80% が消費されます。このアルゴリズムは、slowscanfastscan の間のメモリー量を調べ、次の条件のどれかに当てはまると走査を終了します。

  • メモリー不足を解消するだけのページが見つかりました。

  • 予定のページ数を調べました。

  • 長すぎる時間が経過しました。

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

ページングサブシステムの構成メカニズムが変更されました。システムは fastscanslowscan、および handspreadpages の事前定義された値を使用せずに、ブート時にこれらのパラメータへ適切な値を割り当てます。/etc/system ファイル内のこれらのパラメータを設定すると、システムが最適でない数値を使用する場合があります。


Caution

注意  -  /etc/system ファイルから、VM システムのチューニングをすべて削除してください。まずデフォルトの設定値で実行してから、これらのパラメータの調整が必要かどうかを判定してください。また、cachefree および priority_paging を設定しないでください。


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

lotsfree

説明

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

データ型

符号なし long

デフォルト

物理メモリーの 1/64 または 512K バイトのどちらか大きい方

範囲

最小値は、512K バイトまたは物理メモリーの 1/64 のどちらか大きい方であり、getpagesize によって返されるページサイズに基づくページ数で表されます。詳細は、getpagesize(3C) のマニュアルページを参照してください。

最大値は物理メモリーのページ数です。この最大値は、物理メモリーの 30% 以内であるべきです。システムは、「検証」のセクションで記述している場合以外は、この範囲を強制しません。

単位

ページ

動的か

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

検証

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

暗黙的制約

lotsfreedesfree よりも大きく、desfree が minfree よりも大きいという関係が常に維持されるようにする必要があります。

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

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

経験則によると、このパラメータは、システムが 2 - 3 秒で割り当てる必要がある量の 2 倍にします。このパラメータの適正値は負荷によって異なります。DBMS サーバーはデフォルトの設定で支障がないはずです。しかし、ファイルシステムの入出力負荷が非常に大きい場合は、このパラメータを調整する必要性があるかもしれません。

負荷が比較的安定し、メモリー総量が多いシステムでは、この値を引き下げます。許容される最小値は 512K バイトであり、getpagesize によって返されるページサイズに基づくページ数で表されます。

コミットレベル

変更の可能性あり

desfree

説明

システム上で常時解放しておくべきメモリー容量を指定します。

データ型

符号なし整数

デフォルト

lotsfree / 2

範囲

最小値は、256K バイトまたは物理メモリーの 1/128 のどちらか大きい方であり、getpagesize によって返されるページサイズに基づくページ数で表されます。

最大値は物理メモリーのページ数です。この最大値は物理メモリーの 15% 以内であるべきです。システムは、「検証」のセクションで記述している場合以外は、この範囲を強制しません。

単位

ページ

動的か

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

検証

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

暗黙的制約

lotsfreedesfree よりも大きく、desfree が minfree よりも大きいという関係が常に維持されるようにする必要があります。

副次的な影響

このパラメータの値を増やすと、いくつかの副次的な影響が現われることがあります。新しい値がシステム上で使用できるメモリー容量に近いかそれを超えると、次の現象が生じることがあります。

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

  • NFS の非同期書き込みが、同期書き込みとして実行されます。

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

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

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

負荷が比較的安定し、メモリー総量が多いシステムでは、この値を引き下げます。許容される最小値は 256K バイトであり、getpagesize によって返されるページサイズに基づくページ数で表されます。

コミットレベル

変更の可能性あり

minfree

説明

許容される最低メモリーレベルを指定します。メモリーがこの値を下回ると、システムはページアウト動作の完了に必要な割り当て、またはプロセスのスワップ完了に必要な割り当てに重点を置いて、メモリーを割り当てます。それ以外の割り当て要求は拒否されたりブロックされたりします。

データ型

符号なし整数

デフォルト

desfree / 2

範囲

最小値は、128K バイトまたは物理メモリーの 1/256 のどちらか大きい方であり、getpagesize によって返されるページサイズに基づくページ数で表されます。

最大値は物理メモリーのページ数です。この最大値は物理メモリーの 7.5% 以内であるべきです。システムは、「検証」のセクションで記述している場合以外は、この範囲を強制しません。

単位

ページ

動的か

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

検証

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

暗黙的制約

lotsfreedesfree よりも大きく、desfree が minfree よりも大きいという関係が常に維持されるようにする必要があります。

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

一般にはデフォルト値で十分です。負荷が比較的安定し、メモリー総量が多いシステムでは、この値を引き下げます。許容される最小値は 128K バイトであり、getpagesize によって返されるページサイズに基づくページ数で表されます。

コミットレベル

変更の可能性あり

throttlefree

説明

要求を満たせるだけのメモリーがある場合でも、メモリー割り当て要求ブロッキングをスリープ状態にするメモリー レベルを指定します。

データ型

符号なし整数

デフォルト

minfree

範囲

最小値は、128K バイトまたは物理メモリーの 1/256 のどちらか大きい方であり、getpagesize によって返されるページサイズに基づくページ数で表されます。

最大値は物理メモリーのページ数です。この最大値は物理メモリーの 4% 以内であるべきです。システムは、「検証」のセクションで記述している場合以外は、この範囲を強制しません。

単位

ページ

動的か

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

検証

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

暗黙的制約

lotsfreedesfree よりも大きく、desfree が minfree よりも大きいという関係が常に維持されるようにする必要があります。

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

一般にはデフォルト値で十分です。負荷が比較的安定し、メモリー総量が多いシステムでは、この値を引き下げます。許容される最小値は 128K バイトであり、getpagesize によって返されるページサイズに基づくページ数で表されます。詳細は、getpagesize(3C) のマニュアルページを参照してください。

コミットレベル

変更の可能性あり

pageout_reserve

説明

ページアウトスレッドまたはスケジューラスレッドが独占使用できるように確保するページ数を指定します。使用可能なメモリーがこの値を下回ると、ページアウトやスケジューラ以外のプロセスに対するブロックしない割り当ては拒否されます。ページアウトには専用の小さなメモリープールが必要です。ページアウトは、ページをバッキングストアに書き込む入出力に必要なデータ構造体をここから割り当てます。

データ型

符号なし整数

デフォルト

throttlefree / 2

範囲

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

最大値は物理メモリーのページ数です。この最大値は物理メモリーの 2% 以内であるべきです。システムは、「検証」のセクションで記述している場合以外は、この範囲を強制しません。

単位

ページ

動的か

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

検証

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

暗黙的制約

lotsfreedesfree よりも大きく、desfree が minfree よりも大きいという関係が常に維持されるようにする必要があります。

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

一般にはデフォルト値で十分です。負荷が比較的安定し、メモリー総量が多いシステムでは、この値を引き下げます。許容される最小値は 64K バイトであり、getpagesize によって返されるページサイズに基づくページ数で表されます。

コミットレベル

変更の可能性あり

pages_pp_maximum

説明

ロック解除されていなければならないページ数を指定します。ページのロック要求によって使用可能なメモリーがこの値を下回る場合は、その要求は拒否されます。

データ型

符号なし 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 フラグを指定した共有メモリーセグメントへの接続が失敗したが、使用可能なメモリーが十分ありそうな場合。

大きすぎる値が原因で、メモリーのロック要求 (mlockmlockall、および memcntl) が不必要に失敗する場合があります。詳細は、mlock(3C)mlockall(3C)、および memcntl(2) のマニュアルページを参照してください。

コミットレベル

変更の可能性あり

tune_t_minarmem

説明

デッドロックを回避するために維持しなければならない、利用可能な最小常駐 (スワップ不能) メモリーを指定します。この値は、OS のコアによって使用されるメモリー部分を予約するために使用されます。この方法で制限されたページは、OS が使用可能なメモリーの最大量を判定するときには計算に入れられません。

データ型

符号付き整数

デフォルト

25

範囲

1 から物理メモリー

単位

ページ

動的か

いいえ

検証

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

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

一般にはデフォルト値で十分です。システムがロックされ、使用できるメモリーがないことがデバッグ情報からわかった場合は、デフォルト値を増やすことを検討してください。

コミットレベル

変更の可能性あり

fastscan

説明

メモリー要求が大きいときにシステムが調べる、最大ページ数 / 秒を指定します。

データ型

符号付き整数

デフォルト

fastscan のデフォルト値は次のいずれかの方法で設定されます。

  • /etc/system ファイルに設定された fastscan 値が使用されます。

  • /etc/system ファイルに設定された maxfastscan 値が使用されます。

  • /etc/system ファイルに fastscanmaxfastscan も設定されていない場合は、システムのブート時に、fastscan が 64M バイトに設定されます。数分間のシステムのブート後、fastscan 値が、スキャナが CPU の 10% を使用して 1 秒間で走査できるページの数に設定されます。

これらのすべての状況で、派生した値がシステムのメモリーの半分を超えた場合、fastscan 値はシステムのメモリーの半分の値に制限されます。

範囲

64M バイトからシステムの物理メモリーの半分

単位

ページ

動的か

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

検証

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

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

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

コミットレベル

変更の可能性あり

slowscan

説明

メモリーの再要求時にシステムが調べる、最小ページ数 / 秒を指定します。

データ型

符号付き整数

デフォルト

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

範囲

1 から fastscan / 2

単位

ページ

動的か

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

検証

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

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

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

コミットレベル

変更の可能性あり

min_percent_cpu

説明

pageout が最低限消費できる CPU の割合を指定します。このパラメータは、ページスキャナで使用できる最大時間を判定するための開始点として使用されます。

データ型

符号付き整数

デフォルト

4

範囲

1 から 80

単位

%

動的か

はい

検証

なし

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

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

コミットレベル

変更の可能性あり

handspreadpages

説明

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

データ型

符号なし long

デフォルト

fastscan

範囲

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

単位

ページ

動的か

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

検証

値は物理メモリー容量と handspreadpages value のどちらか小さい方に設定されます。

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

ページが再利用されるまで置いておく時間を長くする場合。この値を増やすと 2 つの段階の間の時間が長くなるため、ページが再利用されるまでの時間が増えます。

コミットレベル

変更の可能性あり

pages_before_pager

説明

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

データ型

符号付き整数

デフォルト

200

範囲

1 から物理メモリーのページ数

単位

ページ

動的か

いいえ

検証

なし

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

入出力の大半が 1 回限りのページの読み取りまたは書き込みであり、二度と参照されない場合、このパラメータを変更することができるかもしれません。この変数を大きなメモリーの値に設定すると、ページは空リストに追加され続けます。

システムが繰り返し強いメモリー要求を受ける場合も、このパラメータを変更することがあります。より大きな値は、この要求に対するより大きな緩衝剤となります。

コミットレベル

変更の可能性あり

maxpgio

説明

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

データ型

符号付き整数

デフォルト

400

範囲

最小値は 1 です。最大値はシステムアーキテクチャーによって決まります。主に、コントローラやディスクの数、そしてディスクのスワップサイズなどの入出力サブシステムによります。

単位

入出力

動的か

いいえ

検証

なし

暗黙的制約

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

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

このパラメータはメモリーのページアウトを早くするために増やします。複数のスワップデバイスが構成されているか、またはスワップデバイスがストライプ化デバイスである場合、この値を増やすとメモリー不足の解消が早くなることがあります。既存の入出力サブシステムは、追加される入出力の負荷に対処できる必要があります。また、スワップパーティションとアプリケーションファイルが同じディスク上にある場合、スワップ入出力の増加はアプリケーションの入出力のパフォーマンスを低下させることがあります。

コミットレベル

変更の可能性あり