この章では、ほとんどの Solaris のカーネルのチューニング可能パラメータについて記述しています。
チューニング可能パラメータ |
参照箇所 |
---|---|
NFS チューニング可能パラメータ | |
TCP/IP チューニング可能パラメータ | |
ネットワークキャッシュとアクセラレータ (NCA) のチューニング可能パラメータ |
この節では、物理メモリーやスタックサイズに関する一般的なカーネルパラメータについて説明します。
符号なし long
そのシステムで使用できる物理メモリーのページ数。これには、コアカーネルとそのデータが格納されているメモリーは含まれません。
1 からシステムの物理メモリーの総量まで
ページ
いいえ
なし
より少ない物理メモリーで実行したときの影響を調べたい場合。このパラメータに対しては、コアカーネルやそのデータ、その他のさまざまなデータ構造体 (起動処理の初期に割り当て) などのメモリーは考慮されません。したがって、physmem の値は、より小さなメモリー量を表わすよう、想定したページ数より小さくすべきです。
変更の可能性あり
カーネルスレッドが作成されるときに、呼び出しルーチンが使用するサイズを明示的に指定しない場合に使用される、スタックのサイズのデフォルト値。
整数
32 ビットの SPARC や x86 ベースのプラットフォームでは 8192
64 ビットの sun4u プラットフォームでは 16,384
0 から 262,144
バイト。ただし、getpagesize(3C) から返される値の倍数。
はい。変数の変更後、作成されるスレッドに影響があります。
8192 以上 262,144 (256 × 1024) 以下で、かつシステムページサイズの倍数でなければなりません。これらの条件が満たされないと、次のメッセージが表示されます。
Illegal stack size, Using N |
N の値は、上述のデフォルト値です。
スタック容量が足りないためにシステムがパニックになる場合。この問題を解決する最もよい方法は、システムが容量を使い果たす原因を明らかにし、それを修正することです。デフォルトのスタックサイズを増やすと、ほとんどすべてのカーネルスレッドのスタックが大きくなるため、カーネルのメモリー使用量が増加します。増加した容量は一般には使用されず、無駄になります。さらに、カーネルの使用量が増えると、同じメモリープールを使用する他のリソースの容量が少なくなるため、システムの作業を行う能力が低下するおそれがあります。副次的な影響には、カーネルが作成できるスレッドの数が少なくなるということがあります。したがって、この方法は、根本的な原因が解消されるまでの一時的な回避策として使用すべきです。
変更の可能性あり
キューに入れることができる、syseventd デーモンへの配送を待つシステムイベントの最大数。 システムイベントキューのサイズがこの制限に達すると、他のシステムイベントをキューに入れることはできません。
整数
2000
0 から MAXINT
システムイベント
はい
ddi_log_sysevent(9F) と sysevent_post_event(3SYSEVENT) を介してシステムイベントが生成されるたびに sysevent フレームワークはこの値をチェックします。
システムイベントのログ、生成、または送信が失敗したことをエラーログメッセージが示す場合。
変更の可能性あり
利用できるページング可能なカーネルのメモリー量を指定します。このメモリーは主にカーネルスレッドのスタックに使用されます。この値を増やすと、スレッドの数を増やさないのであれば個々のスレッドでより大きなスタックが使用でき、あるいはより多くのスレッドを使用できるようになります。このパラメータは、64 ビットカーネルが動作しているシステムのみで設定できます。64 ビットカーネルが動作しているシステムは、デフォルトで、24K バイトのスタックサイズを使用します。
符号なし long
64 ビットカーネルでは 2G バイト
32 ビットカーネルでは 512M バイト
64 ビットカーネルでは 512M バイトから 24G バイト
32 ビットカーネルでは 512M バイト
8K バイトのページ
いいえ
値が最小値と最大値 (64 ビットシステムの場合は 512M バイトと 24G バイト) と比較され、この範囲にない場合、2G バイトにリセットされ、それを表すメッセージが表示されます。
キャッシュの作成で実際に使用されるサイズは、制約チェックの後で segkpsize に指定されている値か、物理メモリーの 50% のうち、小さい方です。
システムで多数のプロセスをサポートする場合は、このステップが必要です (他のステップも必要)。物理メモリーが 1G バイト以上あると想定すると、デフォルトサイズの 2G バイトで、87,000 以上のカーネルスレッドに対し 24K バイトのスタックを作成できます。64 ビットカーネルのスタックサイズは、プロセスが 32 ビットプロセスでも 64 ビットプロセスでも同じです。これより大きな数が必要な場合は、物理メモリーが十分にあれば segkpsize を増やすことができます。
変更の可能性あり
詳細についてはsegkpsize (Solaris 9 12/02 リリース)を参照してください。
この節では、fsflush とそれに関連するチューニング可能パラメータについて説明します。
システムデーモン fsflush は定期的に実行され、主に次の 3 つのことを行います。
fsflush は、呼び出されるたびに次のことを行います。
一定の時間を経過したダーティーなファイルシステムページをディスクにフラッシュします。
メモリーの一部を調べ、変更されているページをそれぞれのバッキングストアに書き込みます。ページは、変更されており、かつ次の条件のどれにも該当しない場合に書き込まれます。
カーネルページである
空いている
ロックされている
スワップデバイスに関連付けられている
現在入出力操作に使用されている
この結果、書き込み権に基づいて mmap され、かつ実際に変更されているファイルのページがフラッシュされます。
ページはバッキングストアにフラッシュされますが、それを使用しているプロセスとの接続は保たれます。フラッシュしておくと、システムのメモリーが不足したときのページの再利用が簡単になります。これは、フラッシュ後にそのページが変更されていなければ、ページを回収する前にそのページをバッキングストアに書き出す必要がなくなり、遅延を避けられるからです。
ファイルシステムのメタデータをディスクに書き込みます。この書き込みは n 回目の呼び出しごとに行われます。n はさまざまな構成変数から計算されます。詳細は、tune_t_fsflushrと チューニング可能パラメータ情報の記載箇所を参照してください。
呼び出しをどのような頻度で行うかや、メモリー走査を実行するかどうか、ファイルシステムデータのフラッシュを行うかどうか、そしてそのフラッシュをどのような頻度で行うかは、構成可能です。
ほとんどのシステムでは、fsflush によって、メモリーの走査と、ファイルシステムメタデータの同期化を行うのが一般的です。システムの使用状況によっては、メモリーの走査はほとんど意味がなかったり、CPU 時間を使用しすぎることがあります。
符号付き整数
5
1 から MAXINT
秒
いいえ
値がゼロ以下の場合は、値は 5 に再設定され、警告メッセージが出力されます。このチェックが行われるのはブート時だけです。
下記の autoup を参照してください。
変更の可能性あり
個々の呼び出しでダーティーページに関して検査するメモリー量と、ファイルシステム同期操作の頻度を、tune_t_flushr とともに制御します。
さらに、autoup の値は、空リストからバッファを書き出すかどうかの制御にも使用されます。B_DELWRI フラグが付いているバッファ (変更されているファイルコンテンツページ) は、空リストに置かれている時間が autoup 秒を超えると書き出されます。autoup の値を増やすと、バッファがメモリーに置かれている時間が長くなります。
符号付き整数
30
1 から MAXINT
秒
いいえ
autoup がゼロ以下の場合は、30 に再設定され、警告メッセージが出力されます。このチェックが行われるのはブート時だけです。
autoup は tune_t_fsflushr の整数倍でなければなりません。最小でも autoup は tune_t_fsflushr の 6 倍以上でなければなりません。 そうでないと、fsflush が呼び出されるたびに余計なメモリーが走査されます。
dopageflush がゼロでない場合にメモリーをチェックするためには、(全体のシステムページ数 × tune_t_fsflushr) が autoup 以上でなければなりません。
autoup や tune_t_fsflushr の変更が必要になる状況はいくつかあります。
大きなメモリーをもつシステム — この場合には、autoup を増やすと、fsflush の個々の呼び出しで走査されるメモリー量が少なくなります。
メモリーの要求量が最小限のシステム — autoup と tune_t_fsflushr を両方とも増やすと、走査の回数が減ります。autoup 対 tune_t_fsflushr の現在の比率を維持するには autoup も増やす必要があります。
一時ファイルの数が多いシステム (メールサーバーやソフトウェアビルドマシンなど) — 多数のファイルが作成されて削除された時、fsflush によって、これらのファイルのデータページがディスクに不必要に書き込まれるおそれがあります。
変更の可能性あり
fsflush の呼び出しで、変更されたページをメモリーから探すかどうかを制御します。fsflush の個々の呼び出しでは、システムのメモリーページ数が調べられます (動的再構成の操作によりメモリーページの数が変わっていることがある)。個々の呼び出しでは、(全体のページ数 × tune_t_fsflushr) / autoup ページが走査されます。
符号付き整数
1 (有効)
0 (無効)、1 (有効)
切り替え (オン/オフ)
はい
なし
システムページスキャナの実行がまれな場合 (vmstat 出力の sr 欄に値 0 が示される)。
変更の可能性あり
fsflush 呼び出しでファイルシステムメタデータの同期化を行うかどうかを制御します。同期化は、fsflush の N 回目の呼び出しごとに行われます。ここで N は (autoup / tune_t_fsflushr) です。これは整数の割り算であるため、tune_t_fsflushr が autoup より大きいと、コードが反復カウンタが N 以上であるかどうかをチェックするので、同期化は fsflush が呼び出されるたびに行われます。N は fsflush を実行するときに 1 度だけ計算されることに注意してください。その後で tune_t_fsflushr や autoup を変更しても、同期化操作の頻度に影響はありません。
符号付き整数
1 (有効)
0 (無効)、1 (有効)
切り替え (オン/オフ)
はい
なし
一定期間にファイルが頻繁に変更されるため、フラッシュによる負荷がシステムの動作に悪影響を与える場合。システムがリブートされる際に消えたり状態の一貫性がどうなっても構わないファイルは、 TMPFS ファイルシステム (/tmp など) に置いた方がいいでしょう。Solaris 7 以降のリリースが動作しているシステムでは、mount の -noatime オプションを使用することによって、i ノードトラフィックを減らすことができます。このオプションを使うと、ファイルがアクセスされた時に i ノードの更新が行われません。
リアルタイム処理を行うシステムでは、このオプションを無効にし、アプリケーションによってファイルの同期化を明示的に行い、一貫性を保つことを望むこともあるでしょう。
変更の可能性あり
システムで使用されるプロセスの数や個々のユーザーが作成できるプロセスの数を制御する変数がいくつかあります。基本となる変数は maxusers です。この変数は、max_nprocs や maxuprc に割り当てられる値の基になります。
maxusers は、当初、システムがサポートできるログインユーザーの数を定義するものでした。カーネルの生成時には、さまざまなテーブルのサイズがこの設定値に基づいて決められていました。しかし、現在の Solaris リリースでは、サイズの決定は主にシステムのメモリー総量に基づいて行われます。そのため、今までの maxusers の使い方は、大部分が変更になっています。ただし、次のサブシステムの数は maxusers に基づいています。
システムで使用できるプロセスの最大数
システムに保持される割り当て構造体の数
ディレクトリ名ルックアップキャッシュ (DNLC) のサイズ
符号付き整数
M バイト単位のメモリー総量か 2048 (小さい方)
/etc/system ファイルに設定されていない場合は、物理メモリーに基づいて、1 から 2048。
/etc/system ファイルに設定されている場合は、1 から 4096。
ユーザー
いいえ。この変数に依存する変数を計算した後に maxusers が再び参照されることはありません。
なし
システムによって計算されたデフォルトのユーザープロセス数が小さすぎる場合。このような状況は、システムコンソールに表示される次のメッセージでわかります。
out of processes |
デフォルトのプロセス数が大きすぎる場合は、次のようにします。
多量のメモリーがあり、動作しているプロセスの数が比較的少ないデータベースサーバーでは、maxusers のデフォルト値を少なくすることによってシステムメモリーを節約できます。
多量のメモリーがあり、動作しているプロセスがほとんどないファイルサーバーでは、この値を減らすことができます。ただし、DNLC のサイズを明示的に設定する必要があります (ncsizeを参照)。
多量のメモリーがあり、動作しているプロセスがほとんどない計算サーバーでは、この値を減らすことができます。
変更の可能性あり
詳細については maxusers (Solaris 7 リリース) を参照してください。
UID が root (0) のプロセス (fsflush など) のためにプロセステーブルに予約するシステムプロセススロットの数を指定します。たとえば fsflush とします。
符号付き整数
5
5 から MAXINT
プロセス
いいえ。最初のパラメータ計算の後は使用されません。
Solaris 8 および Solaris 9 のリリースでは、どのような /etc/system 設定でも有効です。
変更の可能性あり
たとえば、システムの UID 0 (root) のプロセスの数を、通常の値から 10 大きくした場合を考えてみてください。この設定をしないとユーザーレベルのプロセスを作れないような状況でも、この設定を行うことによって root でシェルを起動するために必要な余裕が生まれます。
このパラメータは、取り得る最大のプロセス ID の値を指定します。これは Solaris 8 以降のリリースで有効です。
pidmax は maxpid 変数の値を設定します。したがって、maxpid がいったん設定されると、pidmax は無視されます。maxpid は、カーネルの別のところで、最大のプロセス ID を判別したり、制約のチェックを行うために使用されます。
/etc/system ファイルに maxpid エントリを追加して設定しようとしても、効果はありません。
符号付き整数
30,000
266 から 999,999
プロセス
いいえ。pidmax の値を設定するためにブート時だけ使用されます。
値が reserved_procs の値や 999,999 と比較されます。値が reserved_procs より小さいか 999,999 より大きいと、値は 999,999 に設定されます。
max_nprocs に対して範囲の検査が行われ、max_nprocs は常にこの値以下に保たれます。
このパラメータの変更は、1 つのシステムで 30,000 を越えるプロセスを可能にするために必要となる手順の 1 つです。
変更の可能性あり
システム上に作成できるプロセスの最大数。これには、システムプロセスとユーザープロセスが含まれます。/etc/system に指定する任意の値が maxuprc の計算に使用されます。
さらに、この値は、他のシステムデータ構造体のサイズを決める際にも使用されます。この変数が使用される他のデータ構造体は次のとおりです。
ディレクトリ名ルックアップキャッシュのサイズを決めるとき (ncsize が指定されていない場合)
UFS のディスク割り当て構造体を割り当てるとき (ndquot が指定されていない場合)
構成されたシステム V セマフォによって使用されるメモリーの総量がシステム限度を超えていないか確認するとき
sun4m および x86 プラットフォーム向けのハードウェアアドレス変換のリソースを構成するとき
符号付き整数
10 + (16 x maxusers )
266 から maxpid の値
いいえ
maxpid と比較し、それよりも大きい場合は、maxpid に設定されます。x86 プラットフォームでは、さらにプラットフォーム固有の値と比較されます。max_nprocs は、max_nprocs、maxpid、プラットフォーム値のうち最も小さい値に設定されます。両プラットフォームとも、プラットフォーム値として 65,534 を使用します。
このパラメータの変更は、1 つのシステムで 30,000 を越えるプロセスを可能にするために必要となる手順の 1 つです。
変更の可能性あり
詳細については max_nprocs (Solaris 8 より前のリリース) を参照してください。
符号付き整数
max_nprocs - reserved_procs
1 から max_nprocs - reserved_procs
プロセス
いいえ
max_nprocs - reserved_procs と比較され、小さい方に設定されます。
1 ユーザーが作成できるプロセスの数を強く制限するために、デフォルト値より小さい値を指定したい場合 (システムが作成できるプロセスの数が多くても)。この限度を超えると、次の警告メッセージがコンソールかメッセージファイルに出力されます。
out of per-user processes for uid N |
変更の可能性あり
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 です。
システムが突発的に深刻なメモリー不足に陥る可能性がある場合。この値を増やすと、複数のスワップデバイスが構成されているか、スワップデバイスがストライプデバイスである場合、メモリー不足の解消が早くなります。
変更の可能性あり
Solaris 環境のスワッピングは、swapfs 擬似ファイルシステムによって行われます。スワップデバイスの空間と物理メモリーを合わせたものが、匿名メモリーのバッキングストアを維持するために利用可能な空間プールとして扱われます。システムは、バッキングストアとして最初にディスクデバイスから空間を割り当てようとし、その次に物理メモリーを使用します。swapfs がバッキングストアとしてシステムメモリーを使用しなければならない場合は、swapfs によるメモリーの使いすぎによってシステムがデッドロックに陥ることがないように制約が課せられます。
符号なし long
4M バイトか物理メモリーの 1/16 (小さい方)
最小値は 4M バイトか物理メモリーの 1/16 の小さい方です。この値は getpagesize(3C) から返されるページサイズに基づくページ数で表わされます。
最大値は物理メモリーのページ数です。最大値は、物理メモリーの 10% 以内であるべきです。システムは、「検査」の項目で記述されていなければ、この範囲を強制しません。
ページ
いいえ
なし
変更は一般には必要ありません。ソフトウェアプロバイダからの推奨があったり、スワップ空間が取得できないためにシステムプロセスが終了してしまう場合だけ変更します。しかし、それより良い解決策は、物理メモリーかスワップデバイスをシステムに追加することです。
変更の可能性あり
システムのその他の部分のために空き状態に保つことが望ましい物理メモリーの量。プロセスのスワップ空間としてメモリーを予約しようするときに、それによって使用可能なメモリーがこの値を下回るおそれがあるとシステムが判断する場合、この要求は拒否されます。この方法で予約されたページは、カーネルやユーザーレベルプロセスによってロックダウンされた割り当てに対してのみ使用できます。
符号なし long
2M バイトか物理メモリーの 1/8 (大きい方)
1 から物理メモリーのページ数
ページ
いいえ
なし
システムに使用可能なメモリーがあるのにスワップ空間が得られないためにプロセスが失敗する場合
変更の可能性あり
スタックを実行不能と印付けすることを可能にします。これは、バッファオーバーフロー攻撃を困難にする上で有効です。
64 ビットカーネルが動作している Solaris システムは、デフォルトで、すべての 64 ビットアプリケーションのスタックを実行不能にします。64 ビットカーネルおよび 32 ビットカーネルが動作するシステムで 32 ビットアプリケーションのスタックを実行不能にするには、この変数の設定が必要です。
この変数は Solaris 2.6、Solaris 7、Solaris 8、または Solaris 9 が動作しているすべてのシステムに存在しますが、sun4u、sun4m アーキテクチャでのみ有効です。
符号付き整数
0 (無効)
0 (無効)、1 (有効)
切り替え (オン/オフ)
はい。ただし、すでに実行中のプロセスに対しては無効です。値が設定された後に起動されたプロセスに対してのみ有効です。
なし
アプリケーションが、mprotect(2) を使用してスタックを実行可能にすることなくスタックに実行可能コードを意図的に置いている場合を除き、この変数は常に有効にすべきです。
変更の可能性あり
詳細については noexec_user_stack (Solaris 2.6、Solaris 7、Solaris 8 リリース) を参照してください。
Solaris カーネルメモリーアロケータは、カーネル内の各エンティティに使用するメモリーの断片を配分します。アロケータは、そのクライアントが使用するさまざまなサイズのキャッシュを作成します。一方、クライアントは、特定サイズの構造体の割り当てのためなど、クライアントが使用するキャッシュの作成をアロケータに要求できます。アロケータが管理する各キャッシュに関する統計は、kstat -c kmem_cache コマンドで表示できます。
メモリーが壊されたために、システムがパニックになることがまれにあります。カーネルメモリーアロケータは、アロケータについての情報を収集するとともに、バッファに対してさまざまな整合性チェックを行うデバッグインタフェースをサポートします。整合性チェックは、エラーが実際に起こった場所の近くでエラーを検出するのに役立ちます。収集された情報は、サポート担当者がパニックの原因を特定する上で追加のデータを提供してくれます。
フラグを使用すると、システム操作で余分なオーバーヘッドと余分なメモリーの使用が発生します。したがって、フラグの使用は、メモリーの損傷が疑われるときだけに限るべきです。
Solaris カーネルメモリーアロケータには、Solaris 環境の内部的開発サイクル中に頻繁に使用されたさまざまなデバッグやテストのオプションがあります。Solaris 2.5 より前のリリースでは、これらのオプションを、リリースされた Solaris バージョンで使用することはできませんでした。しかし、Solaris 2.5リリース からは、これらのオプションのサブセットが利用でき、kmem_flags 変数で制御されます。kmem_flags 変数を設定するには、kadb をブートし、その後カーネルを開始する前にこの変数を設定しました。カーネルメモリーアロケータのインスタンス化と /etc/system ファイルの解析のタイミングの問題のため、これらのフラグは Solaris 8 より前のリリースでは /etc/system ファイルに設定できませんでした。
以下に、サポートされる 5 つのフラグの設定について説明します。
表 2–1 kmem_flags の設定値
フラグ |
設定 |
説明 |
---|---|---|
AUDIT |
0x1 |
アロケータは、自身の活動の最近の履歴が入ったログを維持します。ログされる項目の数は、CONTENTS も設定されているかどうかによって異なります。ログのサイズは固定であるため、空間が足りなくなると、古いレコードから順に再使用されます。 |
TEST |
0x2 |
アロケータは解放されたメモリーにパターンを書き込み、そのバッファを次に割り当てるときに、そのパターンが変更されていないことをチェックします。バッファの一部が変更されている場合は、そのバッファを前に割り当て、開放したエンティティがそのメモリーを使用した可能性が強いことがわかります。上書きが検知されると、システムがパニックになります。 |
REDZONE |
0x4 |
アロケータは要求されたバッファの終りに余分のメモリーを割り当て、そのメモリーに特殊なパターンを挿入します。そして、バッファが解放されたら、パターンをチェックして、データがバッファの終りより後ろに書き込まれていないか調べます。上書きが検知されると、カーネルがパニックになります。 |
CONTENTS |
0x8 |
アロケータは、バッファが解放されると、バッファの内容を 256 バイトまでログします。同時に AUDIT も設定する必要があります。 これらのフラグの数値は、論理和をとる (OR) ことができ、Solaris 8 リリースでは /etc/system ファイルで設定し、それより前のリリースでは kadb をブートして、カーネルを開始する前にこれらのフラグを設定します。 |
LITE |
0x100 |
バッファの割り当てや解放で最小限の妥当性検査を行います。このフラグが有効になっていると、アロケータは、レッドゾーンが書き込まれていないことや、解放されたバッファが再び解放されていないこと、解放されるバッファのサイズが割り当てられたものと同じであることをチェックします。このフラグは、Solaris 7 3/99 リリースから使用できるようになりました。このフラグは他のフラグと併用しないでください。 |
符号付き整数
0 (無効)
0 (無効)、1 〜 15、256 (0x100)
はい。実行時の変更は、新しいカーネルメモリーキャッシュだけに有効です。システムの初期設定後に新しいキャッシュを作成することはまれです。
なし
メモリーの損傷が疑われる場合
変更の可能性あり
符号付き整数
0 (メッセージを表示しない)
以下の値が有用です。
0x80000000 - [un] loading... メッセージを出力します。 モジュールがロードされるたびに、次のようなメッセージがコンソールと /var/adm/messages ファイルに出力されます。
Nov 5 16:12:28 sys genunix: [ID 943528 kern.notice] load 'sched/TS_DPTBL' id 9 loaded @ 0x10126438/ 0x10438dd8 size 132/2064 Nov 5 16:12:28 sys genunix: [ID 131579 kern.notice] installing TS_DPTBL, module id 9. |
0x40000000 - 詳細なエラーメッセージを出力します。モジュールがロードされるたびに、次のようなメッセージがコンソールと /var/adm/messages ファイルに出力されます。
Nov 5 16:16:50 sys krtld: [ID 284770 kern.notice] kobj_open: can't open /platform/SUNW,Ultra-1/kernel/ sched/TS_DPTBL Nov 5 16:16:50 sys krtld: [ID 284770 kern.notice] kobj_open: can't open /platform/sun4u/kernel/sched/TS_DPTBL Nov 5 16:16:50 sys krtld: [ID 797908 kern.notice] kobj_open: '/kernel/sch... Nov 5 16:16:50 sys krtld: [ID 605504 kern.notice] descr = 0x2a Nov 5 16:16:50 sys krtld: [ID 642728 kern.notice] kobj_read_file: size=34, Nov 5 16:16:50 sys krtld: [ID 217760 kern.notice] offset=0 Nov 5 16:16:50 sys krtld: [ID 136382 kern.notice] kobj_read: req 8192 bytes, Nov 5 16:16:50 sys krtld: [ID 295989 kern.notice] got 4224 Nov 5 16:16:50 sys krtld: [ID 426732 kern.notice] read 1080 bytes Nov 5 16:16:50 sys krtld: [ID 720464 kern.notice] copying 34 bytes Nov 5 16:16:50 sys krtld: [ID 234587 kern.notice] count = 34 [33 lines elided] Nov 5 16:16:50 sys genunix: [ID 943528 kern.notice] load 'sched/TS_DPTBL' id 9 loaded @ 0x10126438/ 0x10438dd8 size 132/2064 Nov 5 16:16:50 sys genunix: [ID 131579 kern.notice] installing TS_DPTBL, module id 9. Nov 5 16:16:50 sys genunix: [ID 324367 kern.notice] init 'sched/TS_DPTBL' id 9 loaded @ 0x10126438/ 0x10438dd8 size 132/2064 |
0x20000000 - より詳細なメッセージを出力します。「detailed error message」フラグがシステムのブート時に出力する以上の情報は出力されませんが、モジュールがアンロードされるときに、モジュールの解放に関する追加の情報が出力されます。
これらの値は足し合わせて指定できます。
はい
なし
期待通りにモジュールがロードされない場合や、モジュールのロード中にシステムがハングしている疑いがある場合。「print detailed messages」を設定すると、多数のメッセージがコンソールに書き込まれるため、システムのブートがかなり遅くなることに留意してください。
変更の可能性あり
物理入出力要求の最大サイズ。要求がこのサイズより大きいと、ドライバはこの要求を maxphys サイズの断片に分割します。個々のファイルシステムは独立して制限値を持つことが可能で、実際に独立した制限値を持ちます。
符号付き整数
126,976 (sun4m)、131,072 (sun4u)、57,344 (x86)。ワイド転送をサポートする sd ドライバは 1,048,576 を使用します。ssd ドライバはデフォルトで 1,048,576 を使用します。
マシン固有のページサイズから MAXINT
バイト
はい。しかし、多くのファイルシステムでは、ファイルシステムがマウントされるときに、この値がマウントポイントごとのデータ構造体に設定されます。ドライバによっては、デバイスがドライバ固有のデータ構造体に設定されるときに、この値が設定されます。
なし
raw デバイスに対する入出力を大きな断片で行う場合。OLTP 操作を伴う DBMS では小さいサイズの入出力が頻繁に行われることに留意してください。その場合、maxphys を変更しても性能の向上は望めません。
UFS ファイルシステムに対して、64K バイトを超える大量のデータの読み取りや書き込みを一度に行う入出力を行う場合。ファイルシステムは、連続性が増すように最適化すべきです。たとえば、シリンダグループのサイズを大きくし、シリンダグループ当たりの i ノードの数を減らす、などです。UFS では、転送する最大の入出力サイズは 1M バイトに制限されます。
変更の可能性あり
符号付き整数
65,536
1 から MAXINT
ファイル記述子
いいえ
なし
1 プロセス当たりの最大オープンファイル数が十分でない場合。ただし、システムには他の制限もあるため、ファイル記述子の数を増やすことが必ずしも有用とは限らないことに留意してください。
標準入出力を使用する 32 ビットプログラムでは、256 ファイル記述子に制限されます。標準入出力を使用する 64 ビットプログラムでは、20 億の記述子まで使用できます。
select(3C) では、デフォルトで、fd_set によって 1024 記述子に限定されます。ただし、Solaris 7 リリース以降では、32 ビットアプリケーションコードをより大きな fd_set サイズ (65,536 以下) で再コンパイルできます。64 ビットアプリケーションの fd_set サイズは 65,536 で、変更することはできません。
システム全体に対してこれを変更する別の方法として plimit(1) コマンドがあります。plimit を使用して親となるプロセスの限度を変更すると、すべての子プロセスがその限度を継承します。これは inetd などのデーモンに便利です。
変更の可能性あり
詳細については rlim_fd_max (Solaris 8 リリース) を参照してください。
1 つのプロセスがオープンできるファイル記述子数の「弱い」限度。プロセスは、自身のファイル記述子数限度を、rlim_fd_max で定義される「強い」限度の範囲内で調整できます。それには、setrlimit() 呼び出しを使用するか、プロセスを実行するシェルで limit コマンドを実行します。「強い」限度の範囲内で値を調整する場合には、スーパーユーザー特権は必要ありません。
符号付き整数
256
1 から MAXINT
ファイル記述子
いいえ
rlim_fd_max と比較され、rlim_fd_cur の方が大きい場合は、rlim_fd_cur は rlim_fd_max にリセットされます。
1 プロセス当たりのデフォルトのオープンファイル数が十分でない場合。この値を増やす意味は、プログラムで setrlimit(2) を使用して自身で使用できる最大ファイル記述子数を増やす必要がなくなる点にあります。
変更の可能性あり
詳細については rlim_fd_cur (Solaris 7 およびそれ以前のリリース) を参照してください。
ディレクトリ名ルックアップキャッシュ (DNLC) のエントリ数。このパラメータは、UFS や NFS が、解決されたパス名の要素をキャッシュするときに使用します。
Solaris 8 6/00 リリースから、DNLC には、ネガティブルックアップ情報もキャッシュされます。つまり、名前がキャッシュにない場合は、その名前がキャッシュされます。
符号付き整数
4 × (v.v_proc + maxusers) + 320
0 から MAXINT
DNLC のエントリ
いいえ
なし。値を増やすと、ファイルシステムのアンマウントに必要な時間が増えます。これは、アンマウントプロセスでそのファイルシステムのエントリをキャッシュから削除する必要があるためです。
Solaris 8 6/00 より前のリリースでは、キャッシュが小さすぎるかどうかを判定するのは困難でした。しかし、kstat -n ncstats から返されるエントリ数を調べることにより、これを推定することが可能になりました。システムの負荷やファイルアクセスのパターンに較べこの値が大きいように思われる場合は、DNLC のサイズに原因があるかもしれません。
Solaris 8 6/00 リリース以降では、kstat -n dnlcstats を使用して、DNLC が小さすぎるために DNLC からエントリが削除されたことを知ることができます。pick_heuristic と pick_last の合計は、キャッシュが小さすぎるために再利用されたエントリ (そうでなければ有効であったはずのエントリ) の数を表します。
ncsize の値が大きすぎると、システムに直接的な影響があることに留意してください。システムは、ncsize の値に基づいて DNLC の一連のデータ構造体を割り当てるからです。32 ビットカーネルが動作しているシステムは ncsize に 36 バイトの構造体を、64 ビットカーネルが動作しているシステムは ncsize に 64 バイトの構造体をそれぞれ割り当てます。さらに、ufs_inode や nfs:nfs_rnode が明示的に設定されていない場合は、この値が UFS や NFS にも影響を与えます。
変更の可能性あり
chown(2) システム呼び出しの POSIX 挙動が有効かどうかを示します。POSIX 挙動は次のとおりです。
プロセスは、UID 0 で動作していない限りファイルの所有者を変更できない。
プロセスは、UID 0 で動作していない限り、ファイルのグループ所有権を、現在メンバーになっていないグループに変更することはできない。
符号付き整数
1 (POSIX 挙動が使用されている)
0 = POSIX 挙動が有効ではない、1 = POSIX 挙動が使用されている
切り替え (オン/オフ)
はい
なし
POSIX 挙動が適切でない場合。POSIX 挙動をオフにすると、さまざまなセキュリティホールの可能性が出てくる点に留意してください。さらに、ユーザーがファイルの所有権を別のユーザーに変更する可能性も生じます。その場合は、新たに所有者になったユーザーかシステム管理者の介入なしにはそのファイルの所有権を元に戻せません。
廃止または互換性がなくなる可能性あり
符号なし整数
1 (有効)
0 (無効)、1 (有効)
はい。しかし、このチューニング可能パラメータを動的に変更してはいけません。これが無効になっていれば有効に、有効になっていれば無効にすることはできますが、このパラメータを有効にし、無効にし、再び有効にすると、ディレクトリキャッシュが最新の状態を表さないことがあります。
なし
ディレクトリキャッシュ機能に既知の問題はありませんが、何らかの問題が発生した場合は、dnlc_dir_enable を 0 に設定してキャッシュを無効にしてください。
変更の可能性あり
符号なし整数
40
0 から MAXUINT (無制限)
エントリ
はい。いつでも変更できます。
なし
小さいディレクトリのキャッシュにおいてパフォーマンスに問題がある場合は、dnlc_dir_min_size を増やします。個々のファイルシステムに、キャッシングディレクトリの独自の範囲限度があることもある点に留意してください。たとえば、UFS ではディレクトリの最小は ufs_min_dir_cache バイトです (1 エントリ当たり 16 バイトとして、およそ 1024 エントリ)。
変更の可能性あり
符号なし整数
MAXUINT (無制限)
0 から MAXUINT
はい。いつでも変更できます。
なし
大きなディレクトリにおいてパフォーマンスに問題がある場合は、dnlc_dir_max_size を減らします。
変更の可能性あり
入出力バッファのキャッシュに使用するメモリー量の最大値。バッファは、ファイルシステムのメタデータ (スーパーブロック、i ノード、間接ブロック、ディレクトリ) の書き込みに使用されます。バッファは、その量が bufhwm に達するまで必要に応じて割り当てられます。bufhwm に達すると、バッファを再利用して要求を満たします。
歴史的経緯により、このパラメータには ufs: 接頭辞は必要ありません。
符号付き整数
物理メモリーの 2%
80K バイトから物理メモリーの 20%
K バイト
いいえ。この値は、ハッシュバケットサイズの計算に使用された後、データ構造体に格納されます。このデータ構造体は、バッファの割り当てや解放に応じて、そのフィールドの値を調整します。動作しているシステムのロック手順に従わずにこの値を調整すると、正しくない動作を招くおそれがあります。
bufhwm が 80K バイトより小さいか、bufhwm が、物理メモリーの 20% もしくは現在のカーネルヒープ値の 2 倍のうち小さい方より大きい場合、bufhwm は、物理メモリーの 20% か現在のカーネルヒープ値の 2 倍のうち小さい方にリセットされます。その場合は、次のメッセージがシステムコンソールと /var/adm/messages ファイルに出力されます。
"binit: bufhwm out of range (value attempted). Using N." |
「value attempted」は、 /etc/system で指定された値または kadb -d による値を表します。N は使用可能なシステムメモリーに基づいてシステムが計算した値です。
バッファは必要が生じた時にのみ割り当てられるため、デフォルト設定によるオーバーヘッドは、考えられる最大のバッファ数を処理するために必要になる制御構造体が割り当てられることです。これらの構造体は、32 ビットカーネルでは想定されるバッファ当たり 52 バイト、64 ビットカーネルでは想定されるバッファ当たり 104 バイトを消費します。512M バイトの 64 ビットカーネルでは、この構造体は 104*10144 バイト (約 1M バイト) を消費します。ヘッダーの割り当てでは、バッファサイズは 1K バイトであると想定します。ただし、ほとんどの場合、バッファサイズはこれより大きいのが普通です。
バッファプール内でまだ割り当てられていないメモリー量を知るには、カーネルデバッガを使用して、カーネルの bfreelist 構造体を調べます。この構造体の bufsize フィールドが、残っている可能性があるメモリーのバイト数です。mdb を使用して buf マクロでこのフィールドを表示するには、次のようにします。
# mdb -k Loading modules: [ unix krtld genunix ip nfs ipc ] > bfreelist$<buf bfreelist: [ elided ] bfreelist + 0x78: bufsize [ elided ] 75734016 |
6G バイトのメモリーを持つこのシステムの bufhwm は 122277 です。要求される実際のバッファサイズは一般に 1K バイトより大きいため、使用されるヘッダー構造体の数を直接知ることはできません。ただし、一部の領域は、このシステムに割り当てられた制御構造体からうまく回収されることがあります。
512M バイトシステム上でこの構造体が、10144K バイトのうち 4K バイトだけがまだ割り当てられていないことを示したとします。また、kstat -n biostats で biostats の kstat を調べると、このシステムでは、buffer_cache_hits と buffer_cache_lookups の割合も適切であることが分かったとします。これらの情報は、このシステムのデフォルト設定であることを示します。
変更の可能性あり
UFS ファイルシステムに割り当てるべき割り当て (quota) 構造体の数。このパラメータは、1 つまたは複数の UFS ファイルで割り当てが有効になっているときだけ適用されます。歴史的経緯により、ufs: 接頭辞は必要ありません。
符号付き整数
((maxusers × 40) / 4) + max_nprocs
0 から MAXINT
割り当て構造体
いいえ
なし。値が大きすぎると、システムがハングします。
デフォルトの割り当て構造体数では十分でない場合。このような状況は、コンソールやメッセージログに出力される次のメッセージから判別できます。
dquot table full |
変更の可能性あり
メモリーに保持する i ノードの数。i ノードは、ファイルシステム単位ではなく、全体としてキャッシュされます (UFS の場合)。
この場合のキーとなる変数は ufs_ninode です。このパラメータを使用して、i ノードキャッシュの処理に関係する 2 つのキーとなる境界値が計算されます。高位境界値は ufs_ninode / 2、下位境界値は ufs_ninode / 4 で計算されます。
システムが i ノードの処理を終わると、次のどちらかが起こる可能性があります。
i ノードによって参照されるファイルがもはやシステムにないため、その i ノードが削除される。i ノードが削除されると、その空間は i ノードキャッシュに戻され、別の i ノード (ディスクから読み込まれるか、新規ファイル用に作成されるもの) 用に使用されます。
ファイルは存在するが、実行プロセスに参照されていない。i ノードは遊休キューに入れられます。参照されていたページはメモリーに残ります。
i ノードを遊休化する場合、カーネルはこの遊休化処理を一定の時期まで先送りします。ファイルシステムがロギングファイルシステムの場合も、カーネルは i ノードの削除を先送りします。これを行うのは 2 つのカーネルスレッドです。それぞれのスレッドが一方のキューを処理します。
先送りされていた処理が終わると、システムはその i ノードを削除キューか遊休キューに入れます。それぞれのキューには、そのキューを処理できるスレッドがあります。i ノードがキューに入れられると、キューの占有率が下位境界値と比較され、占有率が下位境界値を超えていると、そのキューに関連するスレッドが起こされます。起こされるとスレッドはキューを調べ、i ノードに結びつけられたページがあればディスクに書き出し、i ノードを解放します。スレッドは、起こされた時にキューにあった i ノードの 50% を削除すると停止します。
遊休スレッドの処理が負荷に追いつかない場合は、2 つめの機構が使用されます。システムは、vnode を見つける必要があると、ufs_vget ルーチンを実行します。vget は「最初に」遊休キューの長さを調べます。長さが高位境界値を超えていると、遊休キューから 2 つの i ノード取り出し、遊休化します (ページをフラッシュし、i ノードを解放する)。vget は、自身が使用する i ノードを取得する「前に」これを行います。
システムは、コア内にページがない i ノードを遊休リストの先頭に置き、ページがある i ノードを遊休リストの終わりに置くことによって最適化を図ります。しかし、リストの順序に関し、それ以外の処理は行いません。i ノードは常に遊休キューの先頭から削除されます。
i ノード全体がキューから削除されるのは、同期 (sync)、アンマウント、または再マウントが行われるときだけです。
歴史的経緯により、このパラメータには ufs: 接頭辞は必要ありません。
符号付き整数
ncsize
0 から MAXINT
i ノード
はい
ufs_ninode が 0 以下の場合、この値は ncsize に設定されます。
デフォルトの i ノード数では足りない場合。kstat -n inode_cache で報告される maxsize reached フィールドが kstat の maxsize フィールドより大きい場合は、ufs_ninode の値が小さすぎる可能性があります。ただし、先に述べた i ノードの遊休化が過度に発生するのも問題です。
このような状況を知るには、kstat -n inode_cache を使用して inode_cache kstat を調べます。thread idles はバックグラウンドスレッドが遊休化した i ノード数を、vget idles は i ノードを使用する前の要求プロセスによる遊休数をそれぞれ表しています。
変更の可能性あり
ufs_WRITES がゼロ以外の場合、ファイルに書き込むべき未処理のバイト数が調べられます。次に、ufs_HW を参照し、書き込みを行うべきか、未処理のバイト数が ufs_LW になるまで書き込みを延期すべきかが判定されます。未処理のバイト数のトータルはファイルごとに管理されるため、あるファイルの未処理のバイト数が限度を超えても、それが他のファイルに影響を与えることはありません。
符号付き整数
1 (有効)
0 (無効)、1 (有効)
切り替え (オン/オフ)
はい
なし
UFS の書き込みスロットル (抑制) を全体的にオフにしたい場合。十分な入出力能力がない場合は、このパラメータを無効にすると、ディスクに対するサービスキューが長くなるおそれがあります。
変更の可能性あり
ufs_HW は 1 つのファイルに対する未処理のバイト数の境界値です。未処理のバイト数がこの値を上回り、ufs_WRITES が設定されていると、書き込みは延期されます。書き込みの延期は、書き込みを行うスレッドを、条件変数で眠らせることで行われます。
ufs_LW は 1 つのファイルに対する未処理のバイト数の境界値です。これを下回ると、他の処理が休眠状態となっている原因の条件変数が切り替えられます。書き込みが終了し、バイト数が ufs_LW を下回ると、条件変数が切り替わり、それによってその変数で待機しているすべてのスレッドが立ち上がり、それぞれの書き込みを行おうとします。
符号付き整数
ufs_LW の場合は 8 x 1024 x 1024、ufs_HW の場合は 16 x 1024 x 1024
0 から MAXINT
バイト
はい
なし
ufs_LW と ufs_HW は、ufs_WRITES がゼロでないときだけ意味があります。たとえば ufs_LW と ufs_HW が近すぎると複数のスレッドが立ち上がってもいずれも書き込みを実行できないことがあったり、あるいは ufs_LW と ufs_HW が離れすぎていると複数のスレッドが必要以上に待たされることがあるなどの不要な問題を避けるために、ufs_HW と ufs_LW は共に変更する必要があります。
ファイルシステムがストライプ化ボリュームから構成されている場合は、これらの値の変更を検討します。使用可能な合計帯域幅が ufs_HW の現在の値を簡単に超える可能性があります。残念ながら、この値はファイルシステムごとに設定されるものではありません。
ufs_throttles が普通の値ではない場合。現在、ufs_throttles はカーネルデバッガでのみアクセスできます。
変更の可能性あり
符号なし long
1 ページまたは物理メモリーの 4% (どちらか大きい方)。
1 ページのバイト数 (UltraSPARCTM システムの場合は 8192、その他のシステムの場合は 4096) から、TMPFS が最初に使用されたときに存在するカーネルメモリーの 25%
バイト
はい
なし
次のメッセージがコンソールやメッセージファイルに出力される場合には、値を増やします。
tmp_memalloc: tmpfs over memory limit |
TMPFS のデータ構造体に使用されている現在のメモリー量は、tmp_kmemspace フィールドに保持されています。これは、カーネルデバッガで調べることができます。
変更の可能性あり
符号付き long
256
0 からスワップ空間サイズの最大値
ページ
はい
なし
TMPFS が大量に使用されるシステムで適度なスワップ空間を維持するために、この値を増やすことができます。次のメッセージがコンソールやシステムメッセージファイルに出力された場合は、使用量がこの限度に達したことを示しています。
fs-name: File system full, swap space limit exceeded |
変更の可能性あり
詳細については tmpfs:tmpfs_minfree を参照してください。
仮想端末 (pty) は、Solaris において主に 2 つの目的で使用されます。
telnet、rlogin、または rsh コマンドを使用したリモートログインをサポートする。
X ウィンドウシステムがコマンドインタープリタウィンドウを作成するときに使用するインタフェースを提供する。
デスクトップワークステーション用の仮想端末の数はデフォルトで十分なため、チューニングの対象はリモートログイン用の pty の数になります。
Solaris の以前のバージョンでは、pty の数を明示的にシステムに構成する手順を行う必要がありました。しかし、Solaris 8 リリースからは、新しい機構により、ほとんどの場合、このチューニングを行う必要はありません。pty 数のデフォルト値はシステムのメモリー量に基づいて計算されるようになったので、デフォルト値を増やしたり、減らしたりする必要があるのは、このデフォルト値を変更する場合だけです。
構成処理では、次の 3 つの関連する変数が使用されます。
pt_cnt - pty 数のデフォルトの最大値
pt_pctofmem - pty サポート構造体専用に使用できるカーネルメモリーの割合 (%)
pt_max_pty - pty 数の「強い」制限の最大値
pt_cnt のデフォルト値はゼロで、pt_max_pty が設定されていない限り、システムは pct_pctofmem に指定されたメモリー量に基づいてログインを制限します。pt_cnt がゼロでない場合は、この制限内で pty が割り当てられます。この制限に達すると、システムは pt_max_pty を参照します。pt_max_pty がゼロでなければ、pt_cnt と比較され、pt_cnt が pt_max_pty より小さければ、pty 割り当てが認められます。pt_max_pty がゼロの場合は、pt_cnt が、pt_pctofmem に基づいてサポートされる pty の数と比較されます。pt_cnt がこの数より小さければ、pty 割り当てが認められます。pt_pctofmem に基づいた制限値が有効となるのは、pt_cnt と ptms_ptymax のデフォルト値が両方ともゼロの場合だけであることに留意してください。
pty の「強い」制限値を、pt_pctofmem から計算される最大値と異なるものにするには、/etc/system の pt_cnt と ptms_ptymax に希望する pty 数を設定します。この場合、ptms_pctofmem の設定は関連しません。
システムメモリーの特定の割合を pty サポートのためだけに割り当て、明示的な限度の管理をオペレーティングシステムに任せる場合は、次のようにします。
/etc/system の pt_cnt と ptms_ptymax を設定しない。
/etc/system の pt_pctofmem に希望する割合 (%) を設定する。たとえば、10% を割り当てる場合、pt_pctofmem=10。
このメモリーは、pty のサポートに使用されるまで実際に割り当てられません。しかし、メモリーがいったん割り当てられると、解放されません。
利用できる /dev/pts エントリの数は、システムで使用可能な物理メモリー量によって決まる上限までの間で動的に決められます。pt_cnt は、システムがサポートできるログイン数の最小値を決める 3 つの変数のうちの 1 つです。システムがサポートできる /dev/pts デバイスのデフォルトの最大数は、ブート時に、指定されたシステムメモリーの割合 (次の pt_pctofmem を参照) に適合する pty 構造体の数を計算することによって決められます。pt_cnt がゼロの場合、システムはこの最大数まで割り当てます。pt_cnt がゼロでない場合は、システムは pt_cnt かデフォルトの最大数のうち大きい方まで割り当てます。
符号なし整数
0
0 から maxpid
ログイン / ウィンドウ
いいえ
なし
システムにリモートからログインできるユーザーの数を明示的にコントロールしたい場合
変更の可能性あり
詳細については pt_cnt (Solaris 7 およびそれ以前のリリース) を参照してください。
/dev/pts エントリをサポートするためにデータ構造体が消費できる物理メモリーの最大の割合 (%)。64 ビットカーネルのシステムでは /dev/pts エントリ当たり 176 バイトを消費します。32 ビットカーネルのシステムでは /dev/pts エントリ当たり 112 バイトを消費します。
符号なし整数
5
0 から 100
%
いいえ
なし
システムにログインできるユーザーの数を制限するか増やしたい場合。ゼロを指定すると、リモートユーザーがシステムにログインすることはできません。
変更の可能性あり
符号なし整数
0 (システムが定義した最大数を使用する)
0 から MAXUINT
ログイン / ウィンドウ
はい
なし
pt_cnt 以上でなければなりません。ただし、割り当てられた pty の数が pt_cnt の値を超えるまで、この値はチェックされません。
システムが、構成値に基づいてより多くのログインをサポートできる場合であっても、サポートするログイン数の絶対的な上限を設定したい場合。
変更の可能性あり
符号付き整数
9
9 から 16
モジュール
はい
なし
ソフトウェアベンダーの指定がある場合。STREAM が許可されているプッシュカウントを超えても、メッセージは出されません。プッシュを試みたプログラムに EINVAL という値が返されます。
変更の可能性あり
1 回のシステム呼び出しで STREAM に渡してメッセージのデータ部分に入れることができるバイト数の最大値。このサイズを超える write(2) はすべて、複数のメッセージに分割されます。
符号付き整数
65,536
0 から 262,144
バイト
はい
なし
putmsg(2) 呼び出しが ERANGE を返す場合
変更の可能性あり
符号付き整数
1024
0 から MAXINT
バイト
はい
なし
ソフトウェアベンダーの指定がある場合。putmsg(2) 呼び出しがこの限度を超えようとすると、ERANGE が返されます。
変更の可能性あり
System V メッセージキューは、カーネルが作成したキューを使用してメッセージを交換する、メッセージ転送インタフェースを提供します。Solaris 環境では、メッセージをキューに入れたりキューを解除したりするためのインタフェースが提供されます。メッセージは、自身の型を持つことができます。キューに入れる場合、メッセージはキューの終わりに置かれます。キューを解除する場合は、指定された型の最初のメッセージがキューから削除されます。型が指定されていない場合は、最初のメッセージが削除されます。
このモジュールは最初の参照で動的にロードされます。サブシステムに提供されるパラメータはそのときに検査されます。/etc/system ファイルのエントリには msgsys: 接頭辞が含まれていなければなりません。
この機能は POSIX 1003.1b メッセージキューの機能とは異なります。
Solaris 8 リリースで、この機能のパラメータが一部変更されました。msgsys:msginfo_msgssz、msgsys:msginfo_msgmap、 msgsys:msginfo_msgseg パラメータは廃止になりました。これらの変数は、エラーメッセージを避けるためにそのまま残されています。これらのパラメータの値は無視されます。
一度に処理できるメッセージの最大数は完全に msgsys:msginfo_msgtql で定義されるようになりました。この変数で指定された値に基づいたメッセージヘッダーの配列が割り当てられ、空リストとして初期設定されます。メッセージの送信が必要になると、この空リストが調べられ、使用できるヘッダーがあれば、メッセージデータを処理するためにバッファがカーネルメモリーから割り当てられます。次に、データがバッファにコピーされ、メッセージが宛先のキューに入れられます。メッセージが読み取られると、バッファーは解放され、ヘッダーが空リストに置かれます。
Solaris の以前のバージョンでは、メッセージ数の制限は、msgsys:msginfo_msgtql を設定するか、メッセージバッファプールに割り当てられるメモリーセグメントの数とセグメントのサイズを制限することによって行われていました。モジュールは、最初にロードされるときに、メッセージの管理に必要な数のデータ構造体を割り当てます。これらの構造体に割り当てられた空間の合計は、使用可能なカーネルメモリーの 25% を超えることはできません。合計がこの値を超えると、ロードは失敗し、次のメッセージが表示されます。
msgsys: can't load module, too much memory requested |
Solaris の以前のバージョンとは異なり、メッセージバッファプールはセットアップの中には割り当てらませんし、25% のメモリー検査でも考慮されなくなりました。
符号なし long
2048
0 から物理メモリーの総量
バイト
いいえ。msginfo 構造体の msgmax フィールドにロードされます。
なし
msgsnd(2) 呼び出しが EINVAL エラーを返す場合、またはソフトウェアベンダーが推奨する場合
変更の可能性あり
符号なし long
4096
0 から物理メモリーの総量
バイト
いいえ。msginfo 構造体の msgmnb フィールドにロードされます。
なし
msgsnd(2) 呼び出しがブロックするか EAGAIN エラーを返す場合、またはソフトウェアベンダーが推奨する場合
変更の可能性あり
符号付き整数
50
0 から MAXINT
いいえ。msginfo 構造体の msgmni フィールドにロードされます。
なし
msgget(2) 呼び出しが ENOSPC エラーを返す場合、またはソフトウェアベンダーが推奨する場合
変更の可能性あり
作成できるメッセージの最大数。msgsnd(2) 呼び出しでこの限度を超える要求が行われた場合は、メッセージヘッダーが使用可能になるまで要求は延期されます。あるいは、その要求で IPC_NOWAIT フラグがオンに設定されていると、要求はエラー EGAIN で失敗します。
符号付き整数
40
0 から MAXINT
いいえ。msginfo 構造体の msgtql フィールドにロードされます。
なし
msgsnd(2) 呼び出しがブロックするか EGAIN エラーを返す場合、またはソフトウェアベンダーが推奨する場合
変更の可能性あり
System V セマフォは Solaris 環境で計数型セマフォを提供します。System V セマフォでは、セマフォの標準的な設定/解放操作の他に、必要に応じて増分や減分を行う値を持つことができます (たとえば、使用可能なリソースの数を表すなど)。セマフォ群に対して同時に操作を行う機能や、プロセスが終了すると、そのプロセスの最後の操作をシステムが取り消す機能も提供されます。
セマフォは組で作成されます。
このモジュールは最初の参照で動的にロードされます。この時点で、サブシステムに渡されたパラメータが検査され、セマフォを含むすべてのデータ構造体が作成されます。したがって、実行時にパラメータの値を変更することはできません。値を増やすと、データ破壊の可能性があるからです。/etc/system ファイルのエントリは semsys: 接頭辞を含んでいなければなりません。
この機能は、POSIX 1003.1b セマフォ機能とは異なります。
符号付き整数
10
1 から 65,535
いいえ
SEMA_INDEX_MAX (現在は 65,535) と比較し、それより大きい場合は、SEMA_INDEX_MAX の値にリセットされます。警告メッセージがコンソールかシステムメッセージファイル (またはその両方) に書き込まれます。
デフォルトの組数では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。現在の設定値を越えるセットを作成しようとしても、エラーメッセージは表示されません。semget(2) 呼び出しからアプリケーションにリターンコード ENOSPC が返されます。
変更の可能性あり
符号付き整数
60
1 から MAXINT
いいえ
セマフォとそれらに関係するデータ構造体によって消費され得る空間の量が、モジュールが最初にロードされるときに使用可能なカーネルメモリーの 25% と比較されます。使用される容量がこのメモリーのしきい値より大きい場合、モジュールはロードを拒否し、セマフォ機能は利用できません。
デフォルトのセマフォ数では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。設定された値を越える数のセマフォを作成しようとしても、エラーメッセージは表示されません。semget(2) 呼び出しからアプリケーションにリターンコード ENOSPC が返されます。
変更の可能性あり
符号なし short
32,767
1 から 65,535
いいえ
なし
デフォルト値では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。この最大値を越えても、エラーメッセージは表示されません。semop(2) 呼び出しからアプリケーションにリターンコード ERANGE が返されます。
変更の可能性あり
符号付き整数
25
1 から MAXINT
いいえ
セマフォとそれらに関係するデータ構造体によって消費され得る空間の量が、モジュールが最初にロードされるときに使用可能なカーネルメモリーの 25% と比較されます。使用される容量がこのメモリーのしきい値より大きい場合、モジュールはロードを拒否し、セマフォ機能は利用できません。
デフォルト値では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。設定された値を越える数のセマフォを組として作成しようとしても、エラーメッセージは表示されません。semget(2) 呼び出しからアプリケーションにリターンコード EINVAL が返されます。
変更の可能性あり
1 回の semop(2) 呼び出しで実行できる System V セマフォ操作数の最大値。このパラメータは、semop(2) システム呼び出しで使用する sops 配列内の sembufs の数を規定します。
符号付き整数
10
1 から MAXINT
いいえ
セマフォとそれらに関係するデータ構造体によって消費され得る空間の量が、モジュールが最初にロードされるときに使用可能なカーネルメモリーの 25% と比較されます。使用される容量がこのメモリーのしきい値より大きい場合、モジュールはロードを拒否し、セマフォ機能は利用できません。
デフォルト値では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。1 回の semop(2) 呼び出しで許可されている値を越える回数のセマフォ操作を実行しようとしても、エラーメッセージは表示されません。semop(2) 呼び出しからアプリケーションにリターンコード E2BIG が返されます。
変更の可能性あり
符号付き整数
30
1 から MAXINT
いいえ
セマフォとそれらに関係するデータ構造体によって消費され得る空間の量が、モジュールが最初にロードされるときに使用可能なカーネルメモリーの 25% と比較されます。使用される容量がこのメモリーのしきい値より大きい場合、モジュールはロードを拒否し、セマフォ機能は利用できません。
デフォルト値では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。設定された値を越える回数の取り消し操作を実行しようとしても、エラーメッセージは表示されません。システムが取り消し構造体を使い果たすと、semop(2) 呼び出しからアプリケーションに戻り値 ENOSPC が返されます。
変更の可能性あり
詳細については semsys:seminfo_semmnu を参照してください。
符号付き整数
10
1 から MAXINT
いいえ
セマフォとそれらに関係するデータ構造体によって消費され得る空間の量が、モジュールが最初にロードされるときに使用可能なカーネルメモリーの 25% と比較されます。使用される容量がこのメモリーのしきい値より大きい場合、モジュールはロードを拒否し、セマフォ機能は利用できません。
デフォルト値では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。設定された値を越える回数の取り消し操作を実行しようとしても、エラーメッセージは表示されません。semop(2) 呼び出しからアプリケーションにリターンコード EINVAL が返されます。
変更の可能性あり
符号なし short
16,384
1 から 65,535
いいえ
なし
デフォルト値では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。設定された値を越える回数の取り消し操作を実行しようとしても、エラーメッセージは表示されません。semop(2) 呼び出しからアプリケーションにリターンコード EINVAL が返されます。
変更の可能性あり
System V 共有メモリーでは、プロセスによるセグメントの作成が可能です。連携するプロセスがそのメモリーセグメントに接続し (セグメントに対するアクセス権が必要)、セグメントに含まれるデータにアクセスできます。この機能はロード可能モジュールとして実装されます。/etc/system ファイルのエントリは shmsys: 接頭辞を含んでいる必要があります。 Solaris 7 リリースから、keyserv デーモンは System V 共有メモリーを使用するようになりました。
DBMS ベンダーは、パフォーマンスを高めるために、ISM (intimate shared memory) と呼ばれる特殊な共有メモリーを使用しています。共有メモリーセグメントを ISM セグメントにすると、そのセグメントのメモリーがロックされます。これにより、必要な入出力経路が短縮され、メモリーの使用効率が向上します。これは、セグメントを記述するカーネルリソースが、セグメントに ISM モードで接続するすべてのプロセスによって共有されるからです。
このモジュールは最初の参照で動的にロードされます。サブシステムに提供されるパラメータはこのときに検査されます。
この機能は POSIX 1003.1b 共有メモリー機能とは異なります。
作成できる System V 共有メモリーセグメントの最大サイズ。このパラメータは、アプリケーションが要求されたメモリーセグメントを作成するために必要な物理リソースが実際にあるか調べる前に検査される上限値です。
サイズが 0 の共有メモリーセグメントや、指定した値より大きいサイズの共有メモリーセグメントを作成しようとすると、 EINVAL エラーとなります。
このパラメータは、共有メモリーセグメントのサイズとしてオペレーティングシステムが受け付けることができる最大の値だけを指定します。セグメントを作成できるかどうかは、システム上で使用可能なスワップ空間の量に完全に依存します。32 ビットプロセスの場合は、接続されるセグメントのためにプロセスのアドレス空間に十分な容量があるかどうかも影響します。
符号なし long
8,388,608
32 ビットシステムでは 0 から MAXUINT32、64 ビットシステムでは 0 から MAXUINT64
バイト
いいえ。shminfo 構造体の shmmax フィールドにロードされます。
なし
デフォルト値では足りない場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。ただし、共有メモリーセグメントのサイズを制限する必要がある場合以外は、このパラメータに利用できる最大値を設定しても副次的影響はありません。
変更の可能性あり
詳細については、shmsys:shminfo_shmmax (Solaris 9 12/02)を参照してください。
符号付き整数
100
0 から MAXINT
いいえ。shminfo 構造体の shmmni フィールドにロードされます。
System V 共有メモリーに関係するデータ構造体が最大数存在する場合に消費され得る空間量を、モジュールをロードしたときに使用可能なカーネルメモリーの 25% と比較します。消費されるメモリーが大きすぎると、モジュールをロードする試みは失敗します。
システムの限度が小さすぎる場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。
変更の可能性あり
符号なし long
最初の ISM セグメントが作成されるときに使用可能なシステムメモリーの 5%
物理メモリーの 0 から 50%
ページ
はい
なし。値が小さすぎると、メモリーが ISM セグメントに消費される時に、システムがハングしたりパフォーマンスが大幅に低下することがあります。
大量のメモリーがあるデータベースシステムで ISM を使用する場合、このパラメータを下げると効果があることがあります。ISM セグメントが使用されない場合には、このパラメータの効果はありません。大量のメモリーを備えたマシンでは、ほとんどの場合、最大値 128M バイト (0x4000) で十分です。
変更の可能性あり
プロセスが最後に実行していた CPU に対するすべての親和性を失ったものとみなされるまでの、クロック刻みの数。この期間が過ぎると、すべての CPU はスレッドスケジューリングの候補と見なされます。このパラメータは、タイムシェアリングクラスのスレッドに対してのみ意味を持ちます。リアルタイムスレッドは、最初の使用可能な CPU に対してスケジュールされます。
符号付き整数
3
0 から MAXINT
はい
なし
キャッシュが大きい場合、極めて重要なプロセスがシステムで動作している場合や、データアクセスパターン以外の原因により、一連のプロセスで過度のキャッシュミスが発生していると思われる場合。パラメータを変更する前に、Solaris 2.6 以降に利用可能になったプロセッサセット (psrset(1M)) 機能、またはプロセッサ結合 (pbind(1M)) を使用することを検討してください。
変更の可能性あり
この変数を有効にすると、Solaris 環境でシステムクロックレートとして、デフォルト値 100 の代わりに 1000 が使用されます。
符号付き整数
0
0 (無効)、1 (有効)
いいえ。新しいシステムタイミング変数はブート時に設定されます。ブート後は、このパラメータは参照されません。
なし
10 ミリ秒未満、1 ミリ秒以上の分解能を持つタイムアウトが必要な場合
変更の可能性あり
符号付き整数
32
0 から MAXINT
いいえ。値を増やすと、システムクラッシュを起こす可能性があります。
なし
システムのデフォルトのタイマー数では不十分な場合。timer_create() 呼び出しの実行時に、EGAIN エラーがアプリケーションに返されます。
変更の可能性あり
Solaris 2.6 リリースから、UltraSPARC (sun4u) プラットフォームでさまざまなページ配置ポリシーを使用する機能が導入されました。ページ配置ポリシーは、L2 キャッシュの使用が最適化されるように物理ページアドレスを割り当てようとするものです。デフォルトアルゴリズムとしてどのアルゴリズムが選択されたとしても、特定のアプリケーション群にとって、そのアルゴリズムが別のアルゴリズムよりも適していない可能性があります。この変数は、システムのすべてのプロセスに適用される配置アルゴリズムを変更します。
メモリーは、L2 キャッシュのサイズに基づいて区画に分割されます。マップされていないページでページフォルトが最初に起こると、ページ配置コードは 1 つの区画から 1 つのページを割り当てます。選択されるページは、次の 3 つのアルゴリズムのどれが使用されているかによって異なります。
ページ彩色 - ページが選択される区画は、仮想アドレスのさまざまなビットに基づいて決められます。Solaris 8 リリースでは、これがデフォルトのアルゴリズムです。このアルゴリズムを使用するには、consistent_coloring をゼロに設定します。このアルゴリズムでは、プロセス別の履歴はありません。
仮想アドレス=物理アドレス - プログラム内の連続するページに、連続する区画からページを選択します。このアルゴリズムを使用するには、consistent_coloring に 1 を設定します。このアルゴリズムでは、プロセス別の履歴はありません。
区画飛び越し - プログラム内の連続するページに、通常、1 つおきの区画からページを割り当てます。ただし、このアルゴリズムは、ときには 2 つ以上の区画を飛び越すこともあります。このアルゴリズムを使用するには、consistent_coloring に 2 を設定します。各プロセスは、無作為に選択された区画から開始し、割り当てられた最後の区画のプロセスごとの記録が保管されます。
はい
なし。値が 2 より大きいと、「WARNING: AS_2_BIN: bad consistent coloring value」メッセージがいくつかコンソールに表示され、その後すぐにシステムがハングします。復旧には、電源を再投入する必要があります。
システムの主な作業負荷が、長い時間動作するハイパフォ-マンスコンピューティング (HPC) アプリケーションである場合。この値を変更すると、パフォーマンスが向上することがあります。ファイルサーバーやデータベースサーバー、それに多数のアクティブプロセスが動作するシステム (たとえばコンパイルやタイムシェアリングサーバーなど) では、この値を変更しても効果はありません。
変更の可能性あり
RAID 1 ボリューム (ミラー) の再同期に使用するバッファサイズを、512 バイト単位のブロック数で設定します。設定する値を大きくすると、再同期の速度が速くなります。
整数
デフォルトの値は 128 で、これは小規模なシステムに適切な値です。大規模なシステムでは、ミラー再同期速度を早くするため、より高い値を設定可能です。
128 から 2048
ブロック (512バイト)
いいえ
なし
Solaris ボリュームマネージャーの RAID 1 ボリューム (ミラー) を使用していて、ミラー再同期の速度を上げたい場合。システム性能全体に対し十分なメモリーがある場合は、この値を増加させても他の性能上の問題は発生しません。
ミラー再同期の速度を上げる場合は、充分な性能となるまで、このパラメータの値を (128 ブロックずつ) 増加させてください。かなり大きなシステムや比較的新しいシステムでは、この値を 2048 とするのが適当と考えられます。 旧式のシステムでこの値を高く設定するとシステムがハングアップする場合があります。
変更の可能性あり