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

第 2 章 Solaris カーネルのチューニング可能パラメータ

この章では、ほとんどの Solaris のカーネルのチューニング可能パラメータについて記述しています。NFS のチューニング可能パラメータについては第 4 章「TCP/IP チューニング可能パラメータ」を参照してください。TCP/IP のチューニング可能パラメータについては、第 3 章「NFS チューニング可能パラメータ」を参照してください。

一般的なパラメータ

この節では、物理メモリーやスタックサイズに関する一般的なカーネルパラメータについて説明します。

physmem

説明

OS とファームウェアを除いたメモリーの物理ページ数に関するシステムの値を変更します。

データ型

符号なし long

デフォルト

そのシステムで使用できる物理メモリーのページ数。これには、コアカーネルとそのデータが格納されているメモリーは含まれません。

範囲

1 からシステムの物理メモリーの総量まで

単位

ページ

動的か

いいえ

検査

なし

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

より少ない物理メモリーで実行したときの影響を調べたい場合。このパラメータに対しては、コアカーネルやそのデータ、その他のさまざまなデータ構造体 (起動処理の初期に割り当て) などのメモリーは考慮されません。したがって、physmem の値は、より小さなメモリー量を表わすよう、想定したページ数より小さくすべきです。

コミットレベル

変更の可能性あり

lwp_default_stksize

説明

カーネルスレッドが作成されるときに、呼び出しルーチンが使用するサイズを明示的に指定しない場合に使用される、スタックのサイズのデフォルト値。

データ型

整数

デフォルト

32 ビットの SPARC や IA ベースのプラットフォームでは 8192

64 ビットの sun4u プラットフォームでは 16,384

範囲

0 から 262,144

単位

バイト。ただし、getpagesize(3C) から返される値の倍数。

動的か

はい。変数の変更後、作成されるスレッドに影響があります。

検査

8192 以上 262,144 (256 × 1024) 以下で、かつシステムページサイズの倍数でなければなりません。これらの条件が満たされないと、次のメッセージが表示されます。


Illegal stack size, Using N

N の値は、上述のデフォルト値です。

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

スタック容量が足りないためにシステムがパニックになる場合。この問題を解決する最もよい方法は、システムが容量を使い果たす原因を明らかにし、それを修正することです。デフォルトのスタックサイズを増やすと、ほとんどすべてのカーネルスレッドのスタックが大きくなるため、カーネルのメモリー使用量が増加します。増加した容量は一般には使用されず、無駄になります。さらに、カーネルの使用量が増えると、同じメモリープールを使用する他のリソースの容量が少なくなるため、システムの作業を行う能力が低下するおそれがあります。副次的な影響には、カーネルが作成できるスレッドの数が少なくなるということがあります。したがって、この方法は、根本的な原因が解消されるまでの一時的な回避策として使用すべきです。

コミットレベル

変更の可能性あり

logevent_max_q_sz

説明

キューに入れることができる、syseventd デーモンへの配送を待つシステムイベントの最大数。システムイベントキューのサイズがこの制限に達すると、他のシステムイベントをキューに入れることはできません。

データ型

整数

デフォルト

2000

範囲

0 から MAXINT

単位

システムイベント

動的か

可能

検査

ddi_log_sysevent(9)sysevent_post_event(3) を介してシステムイベントが生成されるたびに sysevent フレームワークはこの値をチェックします。

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

システムイベントのログ、生成、または送信が失敗したことをエラーログメッセージが示す場合。

コミットレベル

変更の可能性あり

前のリリースからの変更

詳細は、logevent_max_q_szを参照してください。

fsflush とそれに関連するチューニング可能パラメータ

この節では、fsflush とそれに関連するチューニング可能パラメータについて説明します。

fsflush

システムデーモン fsflush は定期的に実行され、主に次の 3 つのことを行います。

呼び出しをどのような頻度で行うかや、メモリー走査を実行するかどうか、ファイルシステムデータのフラッシュを行うかどうか、そしてそのフラッシュをどのような頻度で行うかは、構成可能です。

ほとんどのシステムでは、fsflush によって、メモリーの走査と、ファイルシステムメタデータの同期化を行うのが一般的です。システムの使用状況によっては、メモリーの走査はほとんど意味がなかったり、CPU 時間を使用しすぎることがあります。

tune_t_fsflushr

説明

fsflush を呼び出す間隔を秒単位で指定します。

データ型

符号付き整数

デフォルト

5

範囲

1 から MAXINT

単位

動的か

いいえ

検査

値がゼロ以下の場合は、値は 5 に再設定され、警告メッセージが出力されます。このチェックが行われるのはブート時だけです。

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

下記の autoup を参照してください。

コミットレベル

変更の可能性あり

autoup

説明

個々の呼び出しでダーティーページに関して検査するメモリー量と、ファイルシステム同期操作の頻度を、tune_t_flushr とともに制御します。

さらに、autoup の値は、空リストからバッファを書き出すかどうかの制御にも使用されます。B_DELWRI フラグが付いているバッファ (変更されているファイルコンテンツページ) は、空リストに置かれている時間が autoup 秒を超えると書き出されます。autoup の値を増やすと、バッファがメモリーに置かれている時間が長くなります。

データ型

符号付き整数

デフォルト

30

範囲

1 から MAXINT

単位

動的か

いいえ

検査

autoup がゼロ以下の場合は、30 に再設定され、警告メッセージが出力されます。このチェックが行われるのはブート時だけです。

暗黙的制約

autouptune_t_fsflushr の整数倍でなければなりません。最小でも autouptune_t_fsflushr の 6 倍以上でなければなりません。そうでないと、fsflush が呼び出されるたびに余計なメモリーが走査されます。

dopageflush がゼロでない場合にメモリーをチェックするためには、(全体のシステムページ数 × tune_t_fsflushr) が autoup 以上でなければなりません。

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

autouptune_t_fsflushr の変更が必要になる状況はいくつかあります。

  • 大きなメモリーをもつシステム — この場合には、autoup を増やすと、fsflush の個々の呼び出しで走査されるメモリー量が少なくなります。

  • メモリーの要求量が最小限のシステム — autouptune_t_fsflushr を両方とも増やすと、走査の回数が減ります。autouptune_t_fsflushr の現在の比率を維持するには autoup も増やす必要があります。

  • 一時ファイルの数が多いシステム (メールサーバーやソフトウェアビルドマシンなど) — 多数のファイルが作成されて削除された時、fsflush によって、これらのファイルのデータページがディスクに不必要に書き込まれるおそれがあります。

コミットレベル

変更の可能性あり

dopageflush

説明

fsflush の呼び出しで、変更されたページをメモリーから探すかどうかを制御します。fsflush の個々の呼び出しでは、システムのメモリーページ数が調べられます (動的再構成の操作によりメモリーページの数が変わっていることがある)。個々の呼び出しでは、(全体のページ数 × tune_t_fsflushr) / autoup ページが走査されます。

データ型

符号付き整数

デフォルト

1 (有効)

範囲

0 (無効)、1 (有効)

単位

切り替え (オン/オフ)

動的か

はい

検査

なし

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

システムページスキャナの実行がまれな場合 (vmstat 出力の sr 欄に値 0 が示される)。

コミットレベル

変更の可能性あり

doiflush

説明

fsflush 呼び出しでファイルシステムメタデータの同期化を行うかどうかを制御します。同期化は、fsflushN 回目の呼び出しごとに行われます。ここで N(autoup / tune_t_fsflushr) です。これは整数の割り算であるため、tune_t_fsflushrautoup より大きいと、コードが反復カウンタが N 以上であるかどうかをチェックするので、同期化は fsflush が呼び出されるたびに行われます。Nfsflush を実行するときに 1 度だけ計算されることに注意してください。その後で tune_t_fsflushrautoup を変更しても、同期化操作の頻度に影響はありません。

データ型

符号付き整数

デフォルト

1 (有効)

範囲

0 (無効)、1 (有効)

単位

切り替え (オン/オフ)

動的か

はい

検査

なし

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

一定期間にファイルが頻繁に変更されるため、フラッシュによる負荷がシステムの動作に悪影響を与える場合。システムがリブートされる際に消えたり状態の一貫性がどうなっても構わないファイルは、TMPFS ファイルシステム (/tmp など) に置いた方がいいでしょう。Solaris 7 や Solaris 8 リリースが動作しているシステムでは、mount-noatime オプションを使用することによって、i ノードトラフィックを減らすことができます。このオプションを使うと、ファイルがアクセスされた時に i ノードの更新が行われません。

リアルタイム処理を行うシステムでは、このオプションを無効にし、アプリケーションによってファイルの同期化を明示的に行い、一貫性を保つことを望むこともあるでしょう。

コミットレベル

変更の可能性あり

プロセスのサイズのチューニング可能パラメータ

システムで使用されるプロセスの数や個々のユーザーが作成できるプロセスの数を制御する変数がいくつかあります。基本となる変数は maxusers です。この変数は、max_nprocsmaxuprc に割り当てられる値の基になります。

maxusers

説明

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 リリース)を参照してください。

前のリリースからの変更

詳細は、maxusersを参照してください。

reserved_procs

説明

UID が root (0) のプロセス (fsflush など) のためにプロセステーブルに予約するシステムプロセススロットの数を指定します。

データ型

符号付き整数

デフォルト

5

範囲

5 から MAXINT

単位

プロセス

動的か

いいえ。最初のパラメータ計算の後は使用されません。

検査

Solaris 8 リリースでは、どのような /etc/system 設定でも有効です。

コミットレベル

変更の可能性あり

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

たとえば、システムの UID 0 (root) のプロセスの数を、通常の値から 10 大きくした場合を考えてみてください。この設定をしないとユーザーレベルのプロセスを作れないような状況でも、この設定を行うことによって root でシェルを起動するために必要な余裕が生まれます。

pidmax

説明

このパラメータは、取り得る最大のプロセス ID の値を指定します。これは Solaris 8 以降のリリースで有効です。

pidmaxmaxpid 変数の値を設定します。したがって、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 つです。

コミットレベル

変更の可能性あり

max_nprocs

説明

システム上に作成できるプロセスの最大数。これには、システムプロセスとユーザープロセスが含まれます。/etc/system に指定する任意の値が maxuprc の計算に使用されます。

さらに、この値は、他のシステムデータ構造体のサイズを決める際にも使用されます。この変数が使用される他のデータ構造体は次のとおりです。

  • ディレクトリ名ルックアップキャッシュのサイズを決めるとき (ncsize が指定されていない場合)

  • UFS のディスク割り当て構造体を割り当てるとき (ndquot が指定されていない場合)

  • 構成されたシステム V セマフォによって使用されるメモリーの総量がシステム限度を超えていないか確認するとき

  • sun4m および Intel プラットフォーム向けのハードウェアアドレス変換のリソースを構成するとき

データ型

符号付き整数

デフォルト

10 + (16 × maxusers)

範囲

266 から maxpid の値

動的か

いいえ

検査

maxpid と比較し、それよりも大きい場合は、maxpid に設定されます。Intel プラットフォームでは、さらにプラットフォーム固有の値と比較されます。max_nprocs は、max_nprocsmaxpid、プラットフォーム値のうち最も小さい値に設定されます。両プラットフォームとも、プラットフォーム値として 65,534 を使用します。

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

このパラメータの変更は、1 つのシステムで 30,000 を越えるプロセスを可能にするために必要となる手順の 1 つです。

コミットレベル

変更の可能性あり

変更履歴

詳細は、max_nprocs (Solaris 8 より前のリリース)を参照してください。

maxuprc

説明

1 ユーザーが 1 つのシステム上に作成できるプロセスの最大数

データ型

符号付き整数

デフォルト

max_nprocs - reserved_procs

範囲

1 から max_nprocs - reserved_procs

単位

プロセス

動的か

いいえ

検査

max_nprocs - reserved_procs と比較され、小さい方に設定されます。

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

1 ユーザーが作成できるプロセスの数を強く制限するために、デフォルト値より小さい値を指定したい場合 (システムが作成できるプロセスの数が多くても)。この限度を超えると、次の警告メッセージがコンソールかメッセージファイルに出力されます。


out of per-user processes for uid N

コミットレベル

変更の可能性あり

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

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 です。

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

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

コミットレベル

変更の可能性あり

スワッピング関連の変数

Solaris 環境のスワッピングは、swapfs 擬似ファイルシステムによって行われます。スワップデバイスの空間と物理メモリーを合わせたものが、匿名メモリーのバッキングストアを維持するために利用可能な空間プールとして扱われます。システムは、バッキングストアとして最初にディスクデバイスから空間を割り当てようとし、その次に物理メモリーを使用します。swapfs がバッキングストアとしてシステムメモリーを使用しなければならない場合は、swapfs によるメモリーの使いすぎによってシステムがデッドロックに陥ることがないように制約が課せられます。

swapfs_reserve

説明

システム (UID = 0) プロセスによる使用のために予約するシステムメモリー量です。

データ型

符号なし long

デフォルト

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

範囲

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

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

単位

ページ

動的か

いいえ

検査

なし

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

変更は一般には必要ありません。ソフトウェアプロバイダからの推奨があったり、スワップ空間が取得できないためにシステムプロセスが終了してしまう場合だけ変更します。しかし、それより良い解決策は、物理メモリーかスワップデバイスをシステムに追加することです。

コミットレベル

変更の可能性あり

swapfs_minfree

説明

システムのその他の部分のために空き状態に保つことが望ましい物理メモリーの量。プロセスのスワップ空間としてメモリーを予約しようするときに、それによって使用可能なメモリーがこの値を下回るおそれがあるとシステムが判断する場合、この要求は拒否されます。この方法で予約されたページは、カーネルやユーザーレベルプロセスによってロックダウンされた割り当てに対してのみ使用できます。

データ型

符号なし long

デフォルト

2M バイトか物理メモリーの 1/8 (大きい方)

範囲

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

単位

ページ

動的か

いいえ

検査

なし

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

システムに使用可能なメモリーがあるのにスワップ空間が得られないためにプロセスが失敗する場合

コミットレベル

変更の可能性あり

一般的なカーネル変数

noexec_user_stack

説明

スタックを実行不能と印付けすることを可能にします。これは、バッファオーバーフロー攻撃を困難にする上で有効です。

64 ビットカーネルが動作している Solaris システムは、デフォルトで、すべての 64 ビットアプリケーションのスタックを実行不能にします。64 ビットカーネルおよび 32 ビットカーネルが動作するシステムで 32 ビットアプリケーションのスタックを実行不能にするには、この変数の設定が必要です。


注 –

この変数は Solaris 2.6、7、または 8 が動作しているすべてのシステムに存在しますが、sun4u、sun4m、sun4d アーキテクチャでのみ有効です。


データ型

符号付き整数

デフォルト

0 (無効)

範囲

0 (無効)、1 (有効)

単位

切り替え (オン/オフ)

動的か

はい。ただし、すでに実行中のプロセスに対しては無効です。値が設定された後に起動されたプロセスに対してのみ有効です。

検査

なし

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

アプリケーションが、mprotect(2) を使用してスタックを実行可能にすることなくスタックに実行可能コードを意図的に置いている場合を除き、この変数は常に有効にすべきです。

コミットレベル

変更の可能性あり

変更履歴

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

カーネルメモリーアロケータ

Solaris カーネルメモリーアロケータは、カーネル内の各エンティティに使用するメモリーの断片を配分します。アロケータは、そのクライアントが使用するさまざまなサイズのキャッシュを作成します。一方、クライアントは、特定サイズの構造体の割り当てのためなど、クライアントが使用するキャッシュの作成をアロケータに要求できます。アロケータが管理する各キャッシュに関する統計は、kstat -c kmem_cache コマンドで表示できます。特殊化されたキャッシュを参照するには、crash(1M) コマンドで kmastat 演算子を使用します。

メモリーが壊されたために、システムがパニックになることがまれにあります。カーネルメモリーアロケータは、アロケータについての情報を収集するとともに、バッファに対してさまざまな整合性チェックを行うデバッグインタフェースをサポートします。整合性チェックは、エラーが実際に起こった場所の近くでエラーを検出するのに役立ちます。収集された情報は、サポート担当者がパニックの原因を特定する上で追加のデータを提供してくれます。

フラグを使用すると、システム操作で余分なオーバーヘッドと余分なメモリーの使用が発生します。したがって、フラグの使用は、メモリーの損傷が疑われるときだけに限るべきです。

kmem_flags

説明

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)

動的か

はい。実行時の変更は、新しいカーネルメモリーキャッシュだけに有効です。システムの初期設定後に新しいキャッシュを作成することはまれです。

検査

なし

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

メモリーの損傷が疑われる場合

コミットレベル

変更の可能性あり

一般的なドライバ

moddebug

説明

モジュールロードプロセスのさまざまなステップに関するメッセージの表示を制御する変数です。

データ型

符号付き整数

デフォルト

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

説明

物理入出力要求の最大サイズ。要求がこのサイズより大きいと、ドライバはこの要求を maxphys サイズの断片に分割します。個々のファイルシステムは独立して制限値を持つことが可能で、実際に独立した制限値を持ちます。

データ型

符号付き整数

デフォルト

126,976 (sun4m)、131,072 (sun4u)、57,344 (Intel)。ワイド転送をサポートする sd ドライバは 1,048,576 を使用します。ssd ドライバはデフォルトで 1,048,576 を使用します。

範囲

マシン固有のページサイズから MAXINT

単位

バイト

動的か

はい。しかし、多くのファイルシステムでは、ファイルシステムがマウントされるときに、この値がマウントポイントごとのデータ構造体に設定されます。ドライバによっては、デバイスがドライバ固有のデータ構造体に設定されるときに、この値が設定されます。

検査

なし

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

raw デバイスに対する入出力を大きな断片で行う場合。OLTP 操作を伴う DBMS では小さいサイズの入出力が頻繁に行われることに留意してください。その場合、maxphys を変更しても性能の向上は望めません。

UFS ファイルシステムに対して、64K バイトを超える大量のデータの読み取りや書き込みを一度に行う入出力を行う場合。ファイルシステムは、連続性が増すように最適化すべきです。たとえば、シリンダグループのサイズを大きくし、シリンダグループ当たりの i ノードの数を減らす、などです。UFS では、転送する最大の入出力サイズは 1M バイトに制限されます。

コミットレベル

変更の可能性あり

rlim_fd_max

説明

1 つのプロセスがオープンできるファイル記述子の「強い」限度。この制限を変更するには、スーパーユーザー特権が必要です。

データ型

符号付き整数

デフォルト

1024

範囲

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_cur

説明

1 つのプロセスがオープンできるファイル記述子数の「弱い」限度。プロセスは、自身のファイル記述子数限度を、rlim_fd_max で定義される「強い」限度の範囲内で調整できます。それには、setrlimit() 呼び出しを使用するか、プロセスを実行するシェルで limit コマンドを実行します。「強い」限度の範囲内で値を調整する場合には、スーパーユーザー特権は必要ありません。

データ型

符号付き整数

デフォルト

256

範囲

1 から MAXINT

単位

ファイル記述子

動的か

いいえ

検査

rlim_fd_max と比較され、rlim_fd_cur の方が大きい場合は、rlim_fd_currlim_fd_max にリセットされます。

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

1 プロセス当たりのデフォルトのオープンファイル数が十分でない場合。この値を増やす意味は、プログラムで setrlimit(2) を使用して自身で利用できる最大ファイル記述子数を増やす必要がなくなる点にあります。

コミットレベル

変更の可能性あり

変更履歴

詳細は、rlim_fd_cur (Solaris 7 リリースおよびそれより前のリリース)を参照してください。

一般的なファイルシステム

ncsize

説明

ディレクトリ名ルックアップキャッシュ (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_heuristicpick_last の合計は、キャッシュが小さすぎるために再利用されたエントリ (そうでなければ有効であったはずのエントリ) の数を表します。

ncsize の値が大きすぎると、システムに直接的な影響があることに留意してください。システムは、ncsize の値に基づいて DNLC の一連のデータ構造体を割り当てるからです。32 ビットカーネルが動作しているシステムは ncsize に 36 バイトの構造体を、64 ビットカーネルが動作しているシステムは ncsize に 64 バイトの構造体をそれぞれ割り当てます。さらに、ufs_inodenfs:nfs_rnode が明示的に設定されていない場合は、この値が UFS や NFS にも影響を与えます。

コミットレベル

変更の可能性あり

rstchown

説明

chown(2) システム呼び出しの POSIX 挙動が有効かどうかを示します。POSIX 挙動は次のとおりです。

  • プロセスは、UID 0 で動作していない限りファイルの所有者を変更できない。

  • プロセスは、UID 0 で動作していない限り、ファイルのグループ所有権を、現在メンバーになっていないグループに変更することはできない。

データ型

符号付き整数

デフォルト

1 (POSIX 挙動が使用されている)

範囲

0 = POSIX 挙動が有効ではない、1 = POSIX 挙動が使用されている

単位

切り替え (オン/オフ)

動的か

はい

検査

なし

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

POSIX 挙動が適切でない場合。POSIX 挙動をオフにすると、さまざまなセキュリティホールの可能性が出てくる点に留意してください。さらに、ユーザーがファイルの所有権を別のユーザーに変更する可能性も生じます。その場合は、新たに所有者になったユーザーかシステム管理者の介入なしにはそのファイルの所有権を元に戻せません。

コミットレベル

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

segkpsize

説明

利用できるページング可能なカーネルのメモリー量を指定します。このメモリーは主にカーネルスレッドのスタックに使用されます。この値を増やすと、スレッドの数を増やさないのであれば個々のスレッドでより大きなスタックが使用でき、あるいはより多くのスレッドを使用できるようになります。このパラメータは、64 ビットカーネルが動作しているシステムのみで設定できます。64 ビットカーネルが動作しているシステムは、デフォルトで、24K バイトのスタックサイズを使用します。

データ型

符号なし long

デフォルト

64 ビットカーネルの場合は 2G バイト

32 ビットカーネルの場合は 512M バイト

範囲

64 ビットカーネルの場合は 512M バイトから 24G バイト

32 ビットカーネルの場合は 512M バイト

単位

M バイト

動的か

いいえ

検査

値が最小値と最大値 (64 ビットシステムの場合は 512M バイトと 24G バイト) と比較され、この範囲にない場合、2G バイトにリセットされ、それを表すメッセージが表示されます。

キャッシュの作成で実際に使用されるサイズは、制約チェックの後で segkpsize に指定されている値か、物理メモリーの 50% のうち、小さい方です。

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

システムで多数のプロセスをサポートする場合は、このステップが必要です (他のステップも必要)。物理メモリーが 1G バイト以上あると想定すると、デフォルトサイズの 2G バイトで、87,000 以上のカーネルスレッドに対し 24K バイトのスタックを作成できます。64 ビットカーネルのスタックサイズは、プロセスが 32 ビットプロセスでも 64 ビットプロセスでも同じです。これより大きな数が必要な場合は、物理メモリーが十分にあれば segkpsize を増やすことができます。

コミットレベル

変更の可能性あり

変更履歴

詳細は、segkpsize (Solaris 7 リリースおよびそれより前のリリース)を参照してください。

dnlc_dir_enable

説明

大きなディレクトリキャッシュを可能にします。

データ型

符号なし整数

デフォルト

1 (有効)

範囲

0 (無効)、1 (有効)

動的か

はい。しかし、このチューニング可能パラメータを動的に変更してはいけません。これが無効になっていれば有効に、有効になっていれば無効にすることはできますが、このパラメータを有効にし、無効にし、再び有効にすると、ディレクトリキャッシュが最新の状態を表さないことがあります。

検査

なし

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

ディレクトリキャッシュ機能に既知の問題はありませんが、何らかの問題が発生した場合は、dnlc_dir_enable を 0 に設定してキャッシュを無効にしてください。

コミットレベル

変更の可能性あり

dnlc_dir_min_size

説明

1 つのディレクトリに対してキャッシュする前の最小のエントリ数

データ型

符号なし整数

デフォルト

40

範囲

0 から MAXUINT (無制限)

単位

動的か

はい。いつでも変更できます。

検査

なし

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

小さいディレクトリのキャッシュにおいてパフォーマンスに問題がある場合は、dnlc_dir_min_size を増やします。個々のファイルシステムに、キャッシングディレクトリの独自の範囲限度があることもある点に留意してください。たとえば、UFS ではディレクトリの最小は ufs_min_dir_cache バイトです (1 エントリ当たり 16 バイトとして、およそ 1024 エントリ)。

コミットレベル

変更の可能性あり

dnlc_dir_max_size

説明

1 つのディレクトリに対してキャッシュする最大のエントリ数

データ型

符号なし整数

デフォルト

MAXUINT (無制限)

範囲

0 から MAXUINT

動的か

はい。いつでも変更できます。

検査

なし

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

大きなディレクトリにおいてパフォーマンスに問題がある場合は、dnlc_dir_max_size を減らします。

コミットレベル

変更の可能性あり

UFS

bufhwm

説明

入出力バッファのキャッシュに使用するメモリー量の最大値。バッファは、ファイルシステムのメタデータ (スーパーブロック、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:
[ 省略 ]
bfreelist + 0x78:	bufsize			[ 省略 ]
				 	      75734016

6G バイトのメモリーを持つこのシステムの bufhwm は 122277 です。要求される実際のバッファサイズは一般に 1K バイトより大きいため、使用されるヘッダー構造体の数を直接知ることはできません。ただし、一部の領域は、このシステムに割り当てられた制御構造体からうまく回収されることがあります。

512M バイトシステム上でこの構造体が、10144K バイトのうち 4K バイトだけがまだ割り当てられていないことを示したとします。また、kstat -n biostatsbiostatskstat を調べると、このシステムでは、buffer_cache_hitsbuffer_cache_lookups の割合も適切であることが分かったとします。これらの情報は、このシステムのデフォルト設定であることを示します。

コミットレベル

変更の可能性あり

ndquot

説明

UFS ファイルシステムに割り当てるべき割り当て (quota) 構造体の数。このパラメータは、1 つまたは複数の UFS ファイルで割り当てが有効になっているときだけ適用されます。歴史的経緯により、ufs: 接頭辞は必要ありません。

データ型

符号付き整数

デフォルト

((maxusers × 40) / 4) + max_nprocs

範囲

0 から MAXINT

単位

割り当て構造体

動的か

いいえ

検査

なし。値が大きすぎると、システムがハングします。

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

デフォルトの割り当て構造体数では十分でない場合。このような状況は、コンソールやメッセージログに出力される次のメッセージから判別できます。


dquot table full
コミットレベル

変更の可能性あり

ufs_ninode

説明

メモリーに保持する i ノードの数。i ノードは、ファイルシステム単位ではなく、全体としてキャッシュされます (UFS の場合)。

この場合のキーとなる変数は ufs_ninode です。このパラメータを使用して、i ノードキャッシュの処理に関係する 2 つのキーとなる境界値が計算されます。高位境界値は ufs_ninode / 2、下位境界値は ufs_ninode / 4 で計算されます。

システムが i ノードの処理を終わると、次のどちらかが起こる可能性があります。

  1. i ノードによって参照されるファイルがもはやシステムにないため、その i ノードが削除される。i ノードが削除されると、その空間は i ノードキャッシュに戻され、別の i ノード (ディスクから読み込まれるか、新規ファイル用に作成されるもの) 用に使用されます。

  2. ファイルは存在するが、実行プロセスに参照されていない。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 フィールドが kstatmaxsize フィールドより大きい場合は、ufs_ninode の値が小さすぎる可能性があります。ただし、先に述べた i ノードの遊休化が過度に発生するのも問題です。

このような状況を知るには、kstat -n inode_cache を使用して inode_cache kstat を調べます。thread idles はバックグラウンドスレッドが遊休化した i ノード数を、vget idles は i ノードを使用する前の要求プロセスによる遊休数をそれぞれ表しています。

コミットレベル

変更の可能性あり

ufs:ufs_WRITES

説明

ufs_WRITES がゼロ以外の場合、ファイルに書き込むべき未処理のバイト数が調べられます。次に、ufs_HW を参照し、書き込みを行うべきか、未処理のバイト数が ufs_LW になるまで書き込みを延期すべきかが判定されます。未処理のバイト数のトータルはファイルごとに管理されるため、あるファイルの未処理のバイト数が限度を超えても、それが他のファイルに影響を与えることはありません。

データ型

符号付き整数

デフォルト

1 (有効)

範囲

0 (無効)、1 (有効)

単位

切り替え (オン/オフ)

動的か

はい

検査

なし

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

UFS の書き込みスロットル (抑制) を全体的にオフにしたい場合。十分な入出力能力がない場合は、このパラメータを無効にすると、ディスクに対するサービスキューが長くなるおそれがあります。

コミットレベル

変更の可能性あり

ufs:ufs_LWufs:ufs_HW

説明

ufs_HW は 1 つのファイルに対する未処理のバイト数の境界値です。未処理のバイト数がこの値を上回り、ufs_WRITES が設定されていると、書き込みは延期されます。書き込みの延期は、書き込みを行うスレッドを、条件変数で眠らせることで行われます。

ufs_LW は 1 つのファイルに対する未処理のバイト数の境界値です。これを下回ると、他の処理が休眠状態となっている原因の条件変数が切り替えられます。書き込みが終了し、バイト数が ufs_LW を下回ると、条件変数が切り替わり、それによってその変数で待機しているすべてのスレッドが立ち上がり、それぞれの書き込みを行おうとします。

データ型

符号付き整数

デフォルト

256 × 1024 (ufs_LW) と 384 × 1024 (ufs_HW)

範囲

0 から MAXINT

単位

バイト

動的か

はい

検査

なし

暗黙的制約

ufs_LWufs_HW は、ufs_WRITES がゼロでないときだけ意味があります。たとえば ufs_LWufs_HW が近すぎると複数のスレッドが立ち上がってもいずれも書き込みを実行できないことがあったり、あるいは ufs_LWufs_HW が離れすぎていると複数のスレッドが必要以上に待たされることがあるなどの不要な問題を避けるために、ufs_HWufs_LW は共に変更する必要があります。

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

ファイルシステムがストライプ化ボリュームから構成されている場合は、これらの値の変更を検討します。使用可能な合計帯域幅が ufs_HW の現在の値を簡単に超える可能性があります。残念ながら、この値はファイルシステムごとに設定されるものではありません。

ufs_throttles が普通の値ではない場合。現在、ufs_throttles はカーネルデバッガでのみアクセスできます。

コミットレベル

変更の可能性あり

TMPFS

tmpfs:tmpfs_maxkmem

説明

TMPFS が自身のデータ構造体 (tmpnode と ディレクトリエントリ) に使用できるカーネルメモリーの最大量

データ型

符号なし long

デフォルト

1 ページまたは物理メモリーの 4% (どちらか大きい方)。

範囲

1 ページのバイト数 (UltraSPARCTM システムの場合は 8192、その他のシステムの場合は 4096) から、TMPFS が最初に使用されたときに存在するカーネルメモリーの 25%

単位

バイト

動的か

はい

検査

なし

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

次のメッセージがコンソールやメッセージファイルに出力される場合には、値を増やします。


tmp_memalloc: tmpfs over memory limit

TMPFS のデータ構造体に使用されている現在のメモリー量は、tmp_kmemspace フィールドに保持されています。これは、カーネルデバッガで調べることができます。

コミットレベル

変更の可能性あり

前のリリースからの変更

詳細は、tmpfs:tmpfs_maxkmemを参照してください。

tmpfs:tmpfs_minfree

説明

TMPFS がシステムの他の部分のために保持するスワップ空間の最小量

データ型

符号付き long

デフォルト

256

範囲

0 からスワップ空間サイズの最大値

単位

ページ

動的か

はい

検査

なし

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

TMPFS が大量に使用されるシステムで適度なスワップ空間を維持するために、この値を増やすことができます。次のメッセージがコンソールやシステムメッセージファイルに出力された場合は、使用量がこの限度に達したことを示しています。

fs-name: File system full, swap space limit exceeded



コミットレベル

変更の可能性あり

前のリリースからの変更

詳細は、tmpfs:tmpfs_minfreeを参照してください。

仮想端末

仮想端末 (pty) は、Solaris において主に 2 つの目的で使用されます。

デスクトップワークステーション用の仮想端末の数はデフォルトで十分なため、チューニングの対象はリモートログイン用の pty の数になります。

Solaris の以前のバージョンでは、pty の数を明示的にシステムに構成する手順を行う必要がありました。しかし、Solaris 8 リリースからは、新しい機構により、ほとんどの場合、このチューニングを行う必要はありません。pty 数のデフォルト値はシステムのメモリー量に基づいて計算されるようになったので、デフォルト値を増やしたり、減らしたりする必要があるのは、このデフォルト値を変更する場合だけです。

構成処理では、次の 3 つの関連する変数が使用されます。

pt_cnt のデフォルト値はゼロで、pt_max_pty が設定されていない限り、システムは pct_pctofmem に指定されたメモリー量に基づいてログインを制限します。pt_cnt がゼロでない場合は、この制限内で pty が割り当てられます。この制限に達すると、システムは pt_max_pty を参照します。pt_max_pty がゼロでなければ、pt_cnt と比較され、pt_cntpt_max_pty より小さければ、pty 割り当てが認められます。pt_max_pty がゼロの場合は、pt_cnt が、pt_pctofmem に基づいてサポートされる pty の数と比較されます。pt_cnt がこの数より小さければ、pty 割り当てが認められます。pt_pctofmem に基づいた制限値が有効となるのは、pt_cntptms_ptymax のデフォルト値が両方ともゼロの場合だけであることに留意してください。

pty の「強い」制限値を、pt_pctofmem から計算される最大値と異なるものにするには、/etc/systempt_cntptms_ptymax に希望する pty 数を設定します。この場合、ptms_pctofmem の設定は関連しません。

システムメモリーの特定の割合を pty サポートのためだけに割り当て、明示的な限度の管理をオペレーティングシステムに任せる場合は、次のようにします。

このメモリーは、pty のサポートに使用されるまで実際に割り当てられません。しかし、メモリーがいったん割り当てられると、解放されません。

pt_cnt

説明

利用できる /dev/pts エントリの数は、システムで使用可能な物理メモリー量によって決まる上限までの間で動的に決められます。pt_cnt は、システムがサポートできるログイン数の最小値を決める 3 つの変数のうちの 1 つです。システムがサポートできる /dev/pts デバイスのデフォルトの最大数は、ブート時に、指定されたシステムメモリーの割合 (次の pt_pctofmem を参照) に適合する pty 構造体の数を計算することによって決められます。pt_cnt がゼロの場合、システムはこの最大数まで割り当てます。pt_cnt がゼロでない場合は、システムは pt_cnt かデフォルトの最大数のうち大きい方まで割り当てます。

データ型

符号なし整数

デフォルト

0

範囲

0 から maxpid

単位

ログイン / ウィンドウ

動的か

いいえ

検査

なし

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

システムにリモートからログインできるユーザーの数を明示的にコントロールしたい場合

コミットレベル

変更の可能性あり

変更履歴

詳細は、pt_cnt (Solaris 7 リリースおよびそれより前のリリース)を参照してください。

pt_pctofmem

説明

/dev/pts エントリをサポートするためにデータ構造体が消費できる物理メモリーの最大の割合 (%)。64 ビットカーネルのシステムでは /dev/pts エントリ当たり 176 バイトを消費します。32 ビットカーネルのシステムでは /dev/pts エントリ当たり 112 バイトを消費します。

データ型

符号なし整数

デフォルト

5

範囲

0 から 100

単位

%

動的か

いいえ

検査

なし

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

システムにログインできるユーザーの数を制限するか増やしたい場合。ゼロを指定すると、リモートユーザーがシステムにログインすることはできません。

コミットレベル

変更の可能性あり

pt_max_pty

説明

システムが提供する pty の最大数

データ型

符号なし整数

デフォルト

0 (システムが定義した最大数を使用する)

範囲

0 から MAXUINT

単位

ログイン / ウィンドウ

動的か

はい

検査

なし

暗黙的制約

pt_cnt 以上でなければなりません。ただし、割り当てられた pty の数が pt_cnt の値を超えるまで、この値はチェックされません。

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

システムが、構成値に基づいてより多くのログインをサポートできる場合であっても、サポートするログイン数の絶対的な上限を設定したい場合。

コミットレベル

変更の可能性あり

ストリーム

nstrpush

説明

1 つのストリームに挿入できる (プッシュできる) モジュールの数

データ型

符号付き整数

デフォルト

9

範囲

9 から 16

単位

モジュール

動的か

はい

検査

なし

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

ソフトウェアベンダーの指定がある場合。STREAM が許可されているプッシュカウントを超えても、メッセージは出されません。プッシュを試みたプログラムに EINVAL という値が返されます。

コミットレベル

変更の可能性あり

strmsgsz

説明

1 回のシステム呼び出しで STREAM に渡してメッセージのデータ部分に入れることができるバイト数の最大値。このサイズを超える write(2) はすべて、複数のメッセージに分割されます。

データ型

符号付き整数

デフォルト

65,536

範囲

0 から 262,144

単位

バイト

動的か

はい

検査

なし

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

putmsg(2) 呼び出しが ERANGE を返す場合

コミットレベル

変更の可能性あり

strctlsz

説明

1 回のシステム呼び出しで STREAM に渡してメッセージの制御部分に入れることができるバイト数の最大値。

データ型

符号付き整数

デフォルト

1024

範囲

0 から MAXINT

単位

バイト

動的か

はい

検査

なし

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

ソフトウェアベンダーの指定がある場合。putmsg(2) 呼び出しがこの限度を超えようとすると、ERANGE が返されます。

コミットレベル

変更の可能性あり

System V メッセージキュー

System V メッセージキューは、カーネルが作成したキューを使用してメッセージを交換する、メッセージ転送インタフェースを提供します。Solaris 環境では、メッセージをキューに入れたりキューから取り出したりするためのインタフェースが提供されます。メッセージは、自身の型を持つことができます。キューに入れる場合、メッセージはキューの終わりに置かれます。キューから取り出す場合は、指定された型の最初のメッセージがキューから削除されます。型が指定されていない場合は、最初のメッセージが削除されます。

このモジュールは最初の参照で動的にロードされます。サブシステムに提供されるパラメータはそのときに検査されます。/etc/system ファイルのエントリには含んでいなければなりません、msgsys: 接頭辞。

この機能は POSIX 1003.1b メッセージキューの機能とは異なります。

Solaris 8 リリースでは、この機能のパラメータが一部変更されました。msgsys:msginfo_msgsszmsgsys:msginfo_msgmapmsgsys:msginfo_msgseg パラメータは廃止になりました。これらの変数は、エラーメッセージを避けるためにそのまま残されています。これらのパラメータの値は無視されます。

一度に処理できるメッセージの最大数は完全に msgsys:msginfo_msgtql で定義されるようになりました。この変数で指定された値に基づいたメッセージヘッダーの配列が割り当てられ、空リストとして初期設定されます。メッセージの送信が必要になると、この空リストが調べられ、使用できるヘッダーがあれば、メッセージデータを処理するためにバッファがカーネルメモリーから割り当てられます。次に、データがバッファにコピーされ、メッセージが宛先のキューに入れられます。メッセージが読み取られると、バッファーは解放され、ヘッダーが空リストに置かれます。

Solaris の以前のバージョンでは、メッセージ数の制限は、msgsys:msginfo_msgtql を設定するか、メッセージバッファプールに割り当てられるメモリーセグメントの数とセグメントのサイズを制限することによって行われていました。モジュールは、最初にロードされるときに、メッセージの管理に必要な数のデータ構造体を割り当てます。これらの構造体に割り当てられた空間の合計は、使用可能なカーネルメモリーの 25% を超えることはできません。合計がこの値を超えると、ロードは失敗し、次のメッセージが表示されます。


msgsys: can't load module, too much memory requested

Solaris の以前のバージョンとは異なり、メッセージバッファプールはセットアップの中には割り当てられませんし、25% のメモリー検査でも考慮されなくなりました。

msgsys:msginfo_msgmax

説明

System V メッセージの最大サイズ

データ型

符号なし long

デフォルト

2048

範囲

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

単位

バイト

動的か

いいえ。msginfo 構造体の msgmax フィールドにロードされます。

検査

なし

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

msgsnd(2) 呼び出しが EINVAL エラーを返す場合、またはソフトウェアベンダーが推奨する場合

コミットレベル

変更の可能性あり

msgsys:msginfo_msgmnb

説明

1 つのメッセージキューに入れることができるバイト数の最大値

データ型

符号なし long

デフォルト

4096

範囲

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

単位

バイト

動的か

いいえ。msginfo 構造体の msgmnb フィールドにロードされます。

検査

なし

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

msgsnd(2) 呼び出しがブロックするか EAGAIN エラーを返す場合、またはソフトウェアベンダーが推奨する場合

コミットレベル

変更の可能性あり

msgsys:msginfo_msgmni

説明

作成することができるメッセージキューの最大数

データ型

符号付き整数

デフォルト

50

範囲

0 から MAXINT

動的か

いいえ。msginfo 構造体の msgmni フィールドにロードされます。

検査

なし

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

msgget(2) 呼び出しが ENOSPC エラーを返す場合、またはソフトウェアベンダーが推奨する場合

コミットレベル

変更の可能性あり

msgsys:msginfo_msgtql

説明

作成できるメッセージの最大数。msgsnd(2) 呼び出しでこの限度を超える要求が行われた場合は、メッセージヘッダーが使用可能になるまで要求は延期されます。あるいは、その要求で IPC_NOWAIT フラグがオンに設定されていると、要求はエラー EAGAIN で失敗します。

データ型

符号付き整数

デフォルト

40

範囲

0 から MAXINT

動的か

いいえ。msginfo 構造体の msgtql フィールドにロードされます。

検査

なし

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

msgsnd(2) 呼び出しがブロックするか EAGAIN エラーを返す場合、またはソフトウェアベンダーが推奨する場合

コミットレベル

変更の可能性あり

System V セマフォ

System V セマフォは Solaris 環境で計数型セマフォを提供します。System V セマフォでは、セマフォの標準的な設定/解放操作の他に、必要に応じて増分や減分を行う値を持つことができます (たとえば、使用可能なリソースの数を表すなど)。セマフォ群に対して同時に操作を行う機能や、プロセスが終了すると、そのプロセスの最後の操作をシステムが取り消す機能も提供されます。

セマフォは組で作成されます。

このモジュールは最初の参照で動的にロードされます。この時点で、サブシステムに渡されたパラメータが検査され、セマフォを含むすべてのデータ構造体が作成されます。したがって、実行時にパラメータの値を変更することはできません。値を増やすと、データ破壊の可能性があるからです。/etc/system ファイルのエントリは含んでいなければなりません、semsys: 接頭辞。

この機能は、POSIX 1003.1b セマフォ機能とは異なります。

semsys:seminfo_semmni

説明

セマフォ識別子の最大数

データ型

符号付き整数

デフォルト

10

範囲

1 から 65,535

動的か

いいえ

検査

SEMA_INDEX_MAX (現在は 65,535) と比較し、それより大きい場合は、SEMA_INDEX_MAX の値にリセットされます。警告メッセージがコンソールかシステムメッセージファイル (またはその両方) に書き込まれます。

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

デフォルトの組数では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。現在の設定値を越えるセットを作成しようとしても、エラーメッセージは表示されません。semget(2) 呼び出しからアプリケーションにリターンコード ENOSPC が返されます。

コミットレベル

変更の可能性あり

semsys:seminfo_semmns

説明

システムにおける System V セマフォの最大数

データ型

符号付き整数

デフォルト

60

範囲

1 から MAXINT

動的か

いいえ

検査

セマフォとそれらに関係するデータ構造体によって消費され得る空間の量が、モジュールが最初にロードされるときに使用可能なカーネルメモリーの 25% と比較されます。使用される容量がこのメモリーのしきい値より大きい場合、モジュールはロードを拒否し、セマフォ機能は利用できません。

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

デフォルトのセマフォ数では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。設定された値を越える数のセマフォを作成しようとしても、エラーメッセージは表示されません。semget(2) 呼び出しからアプリケーションにリターンコード ENOSPC が返されます。

コミットレベル

変更の可能性あり

semsys:seminfo_semvmx

説明

セマフォに設定できる最大値

データ型

符号なし short

デフォルト

32,767

範囲

1 から 65,535

動的か

いいえ

検査

なし

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

デフォルト値では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。この最大値を越えても、エラーメッセージは表示されません。semop(2) 呼び出しからアプリケーションにリターンコード ERANGE が返されます。

コミットレベル

変更の可能性あり

semsys:seminfo_semmsl

説明

1 つのセマフォ識別子当たりの System V セマフォ数の最大値

データ型

符号付き整数

デフォルト

25

範囲

1 から MAXINT

動的か

いいえ

検査

セマフォとそれらに関係するデータ構造体によって消費され得る空間の量が、モジュールが最初にロードされるときに使用可能なカーネルメモリーの 25% と比較されます。使用される容量がこのメモリーのしきい値より大きい場合、モジュールはロードを拒否し、セマフォ機能は利用できません。

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

デフォルト値では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。設定された値を越える数のセマフォを組として作成しようとしても、エラーメッセージは表示されません。semget(2) 呼び出しからアプリケーションにリターンコード EINVAL が返されます。

コミットレベル

変更の可能性あり

semsys:seminfo_semopm

説明

1 回の semop(2) 呼び出しで実行できる System V セマフォ操作数の最大値。このパラメータは、semop(2) システム呼び出しで使用する sops 配列内の sembufs の数を規定します。

データ型

符号付き整数

デフォルト

10

範囲

1 から MAXINT

動的か

いいえ

検査

セマフォとそれらに関係するデータ構造体によって消費され得る空間の量が、モジュールが最初にロードされるときに使用可能なカーネルメモリーの 25% と比較されます。使用される容量がこのメモリーのしきい値より大きい場合、モジュールはロードを拒否し、セマフォ機能は利用できません。

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

デフォルト値では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。1 回の semop(2) 呼び出しで許可されている値を越える回数のセマフォ操作を実行しようとしても、エラーメッセージは表示されません。semop(2) 呼び出しからアプリケーションにリターンコード E2BIG が返されます。

コミットレベル

変更の可能性あり

semsys:seminfo_semmnu

説明

System V セマフォシステムによってサポートされる取り消し構造体の合計数

データ型

符号付き整数

デフォルト

30

範囲

1 から MAXINT

動的か

いいえ

検査

セマフォとそれらに関係するデータ構造体によって消費され得る空間の量が、モジュールが最初にロードされるときに使用可能なカーネルメモリーの 25% と比較されます。使用される容量がこのメモリーのしきい値より大きい場合、モジュールはロードを拒否し、セマフォ機能は利用できません。

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

デフォルト値では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。設定された値を越える回数の取り消し操作を実行しようとしても、エラーメッセージは表示されません。システムが取り消し構造体を使い果たすと、semop(2) 呼び出しからアプリケーションに戻り値 ENOSPC が返されます。

コミットレベル

変更の可能性あり

前のリリースからの変更

詳細は、semsys:seminfo_semmnuを参照してください。

semsys:seminfo_semume

説明

1 つのプロセスで使用できる System V セマフォの取り消し構造体の最大数

データ型

符号付き整数

デフォルト

10

範囲

1 から MAXINT

動的か

いいえ

検査

セマフォとそれらに関係するデータ構造体によって消費され得る空間の量が、モジュールが最初にロードされるときに使用可能なカーネルメモリーの 25% と比較されます。使用される容量がこのメモリーのしきい値より大きい場合、モジュールはロードを拒否し、セマフォ機能は利用できません。

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

デフォルト値では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。設定された値を越える回数の取り消し操作を実行しようとしても、エラーメッセージは表示されません。semop(2) 呼び出しからアプリケーションにリターンコード EINVAL が返されます。

コミットレベル

変更の可能性あり

semsys:seminfo_semaem

説明

1 つの取り消し構造体にセマフォの値として設定できる最大値

データ型

符号なし short

デフォルト

16,384

範囲

1 から 65,535

動的か

いいえ

検査

なし

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

デフォルト値では不十分な場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。設定された値を越える回数の取り消し操作を実行しようとしても、エラーメッセージは表示されません。semop(2) 呼び出しからアプリケーションにリターンコード EINVAL が返されます。

コミットレベル

変更の可能性あり

System V 共有メモリー

System V 共有メモリーでは、プロセスによるセグメントの作成が可能です。連携するプロセスがそのメモリーセグメントに接続し (セグメントに対するアクセス権が必要)、セグメントに含まれるデータにアクセスできます。この機能はロード可能モジュールとして実装されます。/etc/system ファイルのエントリは含んでいなければなりません、shmsys: 接頭辞。Solaris 7 リリースから、keyserv デーモンは System V 共有メモリーを使用するようになりました。

DBMS ベンダーは、パフォーマンスを高めるために、ISM (intimate shared memory) と呼ばれる特殊な共有メモリーを使用しています。共有メモリーセグメントを ISM セグメントにすると、そのセグメントのメモリーがロックされます。これにより、必要な入出力経路が短縮され、メモリーの使用効率が向上します。これは、セグメントを記述するカーネルリソースが、セグメントに ISM モードで接続するすべてのプロセスによって共有されるからです。

このモジュールは最初の参照で動的にロードされます。サブシステムに提供されるパラメータはこのときに検査されます。

この機能は POSIX 1003.1b 共有メモリー機能とは異なります。

shmsys:shminfo_shmmax

説明

作成できる System V 共有メモリーセグメントの最大サイズ。このパラメータは、システムが要求されたメモリーセグメントを作成するために必要な物理リソースが実際にあるか調べる前に検査される上限値です。

データ型

符号なし long

デフォルト

1,048,576

範囲

32 ビットシステムでは 0 から MAXINT、64 ビットシステムでは MAXINT64

単位

バイト

動的か

いいえ。shminfo 構造体の shmmax フィールドにロードされます。

検査

なし

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

デフォルト値では足りない場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。ただし、共有メモリーセグメントのサイズを制限する必要がある場合以外は、このパラメータに利用できる最大値を設定しても副次的影響はありません。

コミットレベル

変更の可能性あり

shmsys:shminfo_shmmin

説明

作成できる System V 共有メモリーセグメントの最小サイズ

データ型

符号なし long

デフォルト

1

範囲

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

単位

バイト

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

できるだけ変更しないでください。この値が大きすぎると、powerd などのシステムプログラムが異常終了することがあります。shminfo_shmmin より小さいセグメントを作成するプログラムには、そのセグメントを作成しようとした時に EINVAL エラーが返され、通常、そのプログラムは終了します。

コミットレベル

変更の可能性あり

前のリリースからの変更

詳細は、shmsys:shminfo_shmmin を参照してください。

shmsys:shminfo_shmmni

説明

システム全体で作成できる共有メモリーセグメントの最大数

データ型

符号付き整数

デフォルト

100

範囲

0 から MAXINT

動的か

いいえ。shminfo 構造体の shmmni フィールドにロードされます。

検査

System V 共有メモリーに関係するデータ構造体が最大数存在する場合に消費され得る空間量を、モジュールをロードしたときに使用可能なカーネルメモリーの 25% と比較します。消費されるメモリーが大きすぎると、モジュールをロードする試みは失敗します。

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

システムの限度が小さすぎる場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。

コミットレベル

変更の可能性あり

shmsys:shminfo_shmseg

説明

1 つのプロセスで接続できる共有メモリーセグメントの制限数。

データ型

符号付き short

デフォルト

6

範囲

0 から 32,767

動的か

いいえ。shminfo 構造体の shmseg フィールドにロードされます。

検査

System V 共有メモリーに関係するデータ構造体が最大数存在する場合に消費され得る空間量を、モジュールをロードしたときに使用可能なカーネルメモリーの 25% と比較します。消費されるメモリーが大きすぎると、モジュールをロードする試みは失敗します。

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

システムの限度が小さすぎる場合。一般には、ソフトウェアベンダーの推奨があった場合に変更します。

コミットレベル

変更の可能性あり

前のリリースからの変更

詳細は、shmsys:shminfo_shmsegを参照してください。

segspt_minfree

説明

ISM 共有メモリー用に割り当てることができないシステムメモリーのページ数

データ型

符号なし long

デフォルト

最初の ISM セグメントが作成されるときに使用可能なシステムメモリーの 5%

範囲

物理メモリーの 0% から 50%

単位

ページ

動的か

はい

検査

なし。値が小さすぎると、メモリーが ISM セグメントに消費される時に、システムがハングしたりパフォーマンスが大幅に低下することがあります。

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

大量のメモリーがあるデータベースシステムで ISM を使用する場合、このパラメータを下げると効果があることがあります。ISM セグメントが使用されない場合には、このパラメータの効果はありません。大量のメモリーを備えたマシンでは、ほとんどの場合、最大値 128M バイト (0x4000) で十分です。

コミットレベル

変更の可能性あり

前のリリースからの変更

詳細は、segspt_minfreeを参照してください。

スケジューリング

rechoose_interval

説明

プロセスが最後に実行していた CPU に対するすべての親和性を失ったものとみなされるまでの、クロック刻みの数。この期間が過ぎると、すべての CPU はスレッドスケジューリングの候補と見なされます。このパラメータは、タイムシェアリングクラスのスレッドに対してのみ意味を持ちます。リアルタイムスレッドは、最初の使用可能な CPU に対してスケジュールされます。

データ型

符号付き整数

デフォルト

3

範囲

0 から MAXINT

動的か

はい

検査

なし

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

キャッシュが大きい場合、極めて重要なプロセスがシステムで動作している場合や、データアクセスパターン以外の原因により、一連のプロセスで過度のキャッシュミスが発生していると思われる場合。パラメータを変更する前に、Solaris 2.6 以降に利用可能になったプロセッサセット (psrset(1M)) 機能、またはプロセッサ結合 (pbind(1M)) を使用することを検討してください。

コミットレベル

変更の可能性あり

タイマー

hires_tick

説明

この変数を有効にすると、Solaris 環境でシステムクロックレートとして、デフォルト値 100 の代わりに 1000 が使用されます。

データ型

符号付き整数

デフォルト

0

範囲

0 (無効)、1 (有効)

動的か

いいえ。新しいシステムタイミング変数はブート時に設定されます。ブート後は、このパラメータは参照されません。

検査

なし

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

10 ミリ秒未満、1 ミリ秒以上の分解能を持つタイムアウトが必要な場合

コミットレベル

変更の可能性あり

timer_max

説明

使用可能な POSIX タイマーの数

データ型

符号付き整数

デフォルト

32

範囲

0 から MAXINT

動的か

いいえ。値を増やすと、システムクラッシュを起こす可能性があります。

検査

なし

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

システムのデフォルトのタイマー数では不十分な場合。timer_create() 呼び出しの実行時に、EAGAIN エラーがアプリケーションに返されます。

コミットレベル

変更の可能性あり

Sun4u 特有

consistent_coloring

説明

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) アプリケーションである場合。この値を変更すると、パフォーマンスが向上することがあります。ファイルサーバーやデータベースサーバー、それに多数のアクティブプロセスが動作するシステム (たとえばコンパイルやタイムシェアリングサーバーなど) では、この値を変更しても効果はありません。

コミットレベル

変更の可能性あり