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

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

この章では、ほとんどの Oracle Solaris カーネルチューニング可能パラメータについて説明します。

チューニング可能パラメータ情報の記載箇所

チューニング可能パラメータ 

参照先 

NFS チューニング可能パラメータ 

第 3 章NFS チューニング可能パラメータ

インターネットプロトコル群のチューニング可能パラメータ 

第 4 章インターネットプロトコル群のチューニング可能パラメータ

ネットワークキャッシュとアクセラレータ (NCA) のチューニング可能パラメータ 

第 5 章ネットワークキャッシュとアクセラレータのチューニング可能パラメータ

カーネルとメモリーの一般的なパラメータ

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

physmem

備考欄

Solaris OS とファームウェアが把握されたあとで、メモリーの物理ページ数に関するシステム構成を変更します。

データ型

符号なし long

デフォルト

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

範囲

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

単位

ページ

動的か

いいえ

検査

なし

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

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

コミットレベル

変更の可能性あり

zfs_arc_min

備考欄

ZFS 調整可能置換キャッシュ (ARC) の最小サイズを決定します。関連項目: zfs_arc_max

データ型

符号なし整数 (64 ビット)

デフォルト

物理メモリーの 32 分の 1 または 64M バイトのうち大きいほうの値

範囲

64M バイトから zfs_arc_max

単位

バイト

動的か

いいえ

検査

はい、範囲が検査されます。

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

システムのメモリー負荷要求が変動するとき、ZFS ARC は要求の少ない時期はデータをキャッシュし、要求の多い時期は縮小します。ただし、ZFS は zfs_arc_min の値を下回って縮小することはありません。zfs_arc_min のデフォルト値は多くのメモリーを搭載したシステムでメモリー容量の 12% であるため、かなりのメモリー容量を使用する可能性があります。最大負荷時に要求されるメモリー使用量がシステムメモリーの 88% を超える場合は、このパラメータを調整することを検討してください。

コミットレベル

変更の可能性あり

変更履歴

詳細は、zfs_arc_min (Solaris 10 リリース)」を参照してください。

zfs_arc_max

備考欄

ZFS 調整可能置換キャッシュ (ARC) の最大サイズを決定します。関連項目: zfs_arc_min.

データ型

符号なし整数 (64 ビット)

デフォルト

搭載メモリーが 4G バイト未満のシステムでは、メモリー容量の 4 分の 3

搭載メモリーが 4G バイトを超えるシステムでは、physmem から 1G バイトを引いた値

範囲

64M バイトからphysmem

単位

バイト

動的か

いいえ

検査

はい、範囲が検査されます。

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

将来のメモリー要求が非常に大きく、十分に定義されている場合、ARC がメモリー要求と競合しないように、このパラメータの値を減らして ARC を制限することを検討できます。たとえば、将来の負荷がメモリーの 20% を要求することがわかっている場合、残りの 80% より多くのメモリーを消費しないように ARC を制限することは意味があります。

コミットレベル

変更の可能性あり

変更履歴

詳細は、zfs_arc_max (Solaris 10 リリース)」を参照してください。

default_stksize

備考欄

すべてのスレッドのデフォルトスタックサイズを指定します。default_stksize より小さいスタックサイズを指定してスレッドを作成することはできません。default_stksize が設定されている場合、それは lwp_default_stksize に優先します。lwp_default_stksize も参照してください。

データ型

整数

デフォルト
  • SPARCシステムでは PAGESIZE の 3 倍。

  • x86 システムでは PAGESIZE の 2 倍。

  • AMD64 システムでは PAGESIZE の 5 倍。

範囲

最小値はデフォルト値です。

  • SPARCシステムでは PAGESIZE の 3 倍。

  • x86 システムでは PAGESIZE の 2 倍。

  • AMD64 システムでは PAGESIZE の 5 倍。

最大値はデフォルト値の 32 倍です。

単位

getpagesize パラメータから戻った値の倍数になるバイト数です。詳細は、getpagesize(3C) を参照してください。

動的か

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

検査

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


Illegal stack size, Using N

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

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

スタック容量が足りないためにシステムがパニックになる場合。この問題を解決する最もよい方法は、システムが容量を使い果たす原因を明らかにし、それを修正することです。

デフォルトのスタックサイズを増やすと、ほとんどすべてのカーネルスレッドのスタックが大きくなるため、カーネルのメモリー使用量が不当に増加します。通常、そのスペースは使用されません。さらに、カーネルの使用量が増えると、同じメモリープールを使用する他のリソースの容量が少なくなるため、システムの作業を行う能力が低下するおそれがあります。副次的な影響として、カーネルが作成できるスレッドの数が少なくなります。したがって、この方法は、根本的な原因が解消されるまでの一時的な回避策として使用すべきです。

コミットレベル

変更の可能性あり

lwp_default_stksize

備考欄

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

データ型

整数

デフォルト
  • 8192 (x86 プラットフォーム)

  • 24,576 (SPARC プラットフォーム)

  • 20,480 (AMD64 プラットフォーム)

範囲

最小値はデフォルト値です。

  • SPARCシステムでは PAGESIZE の 3 倍。

  • x86 システムでは PAGESIZE の 2 倍。

  • AMD64 システムでは PAGESIZE の 5 倍。

最大値はデフォルト値の 32 倍です。

単位

getpagesize パラメータから戻った値の倍数になるバイト数です。詳細は、getpagesize(3C) を参照してください。

動的か

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

検査

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


Illegal stack size, Using N

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

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

スタック容量が足りないためにシステムがパニックになる場合。この問題を解決する最もよい方法は、システムが容量を使い果たす原因を明らかにし、それを修正することです。

デフォルトのスタックサイズを増やすと、ほとんどすべてのカーネルスレッドのスタックが大きくなるため、カーネルのメモリー使用量が不当に増加します。通常、そのスペースは使用されません。さらに、カーネルの使用量が増えると、同じメモリープールを使用する他のリソースの容量が少なくなるため、システムの作業を行う能力が低下するおそれがあります。副次的な影響として、カーネルが作成できるスレッドの数が少なくなります。したがって、この方法は、根本的な原因が解消されるまでの一時的な回避策として使用すべきです。

コミットレベル

変更の可能性あり

変更履歴

詳細は、lwp_default_stksize (Solaris 9 リリース)」を参照してください。

logevent_max_q_sz

備考欄

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

データ型

整数

デフォルト

5000

範囲

0 から MAXINT

単位

システムイベント

動的か

はい

検査

ddi_log_syseventsysevent_post_event によってシステムイベントが生成されるたびに、システムイベントフレームワークはこの値をチェックします。

詳細は、ddi_log_sysevent(9F) およびsysevent_post_event(3SYSEVENT) のマニュアルページを参照してください。

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

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

コミットレベル

変更の可能性あり

segkpsize

備考欄

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

データ型

符号なし long

デフォルト

64 ビットカーネルでは 2G バイト

32 ビットカーネルでは 512M バイト

範囲

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

単位

8K バイトのページ

動的か

いいえ

検査

最小サイズと最大サイズ (64 ビットシステムではそれぞれ 512 バイトと 24G バイト) に対して値を比較します。最小サイズに満たないか、または最大サイズを超えている場合は 2G バイトにリセットされます。その作用に関するメッセージが表示されます。

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

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

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

コミットレベル

変更の可能性あり

変更履歴

segkpsize (Solaris 9 12/02 リリース)」を参照してください。

noexec_user_stack

備考欄

スタックを実行不能として指定できるので、バッファーオーバーフロー攻撃がいっそう困難になります。

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


注 –

このパラメータは Solaris 2.6、7、8、9、または 10 リリースが動作しているすべてのシステム上に存在しますが、有効になるのは 64 ビットの SPARC と AMD64 のアーキテクチャーの場合に限られます。


データ型

符号付き整数

デフォルト

0 (無効)

範囲

0 (無効)、1 (有効)

単位

切り替え (オン/オフ)

動的か

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

検査

なし

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

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

コミットレベル

変更の可能性あり

変更履歴

noexec_user_stack (Solaris 9 リリース)」を参照してください。

fsflush とそれに関連するパラメータ

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

fsflush

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

  1. fsflush は呼び出されるたびに、一定期間が経過した汚れたファイルシステムページをディスクにフラッシュします。

  2. fsflush は呼び出されるたびに、メモリーの一部分を検証し、変更されたページをバッキングストアに書き出します。ページは、変更されており、かつ次の条件のどれにも該当しない場合に書き込まれます。

    • ページはカーネルページである

    • ページは使用されていない

    • ページがロックされている

    • ページにスワップデバイスが対応づけられている

    • ページが入出力操作に現在関与している

    この結果、書き込み権に基づいて mmap でマッピングされ、かつ実際に変更されているファイルのページがフラッシュされます。

    ページはバッキングストアにフラッシュされますが、それを使用しているプロセスとの接続は保たれます。フラッシュしておくと、システムのメモリーが不足したときのページの再利用が簡単になります。これは、フラッシュ後にそのページが変更されていなければ、ページを回収する前にそのページをバッキングストアに書き出す必要がなくなり、遅延を避けられるからです。

  3. fsflush はファイルシステムのメタデータをディスクに書き込みます。この書き込みは n 回目の呼び出しごとに行われます。n はさまざまな構成変数から計算されます。詳細は、tune_t_fsflushrautoup を参照してください。

次の機能を構成できます。

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

tune_t_fsflushr

備考欄

fsflush の呼び出し間隔を秒数で指定します。

データ型

符号付き整数

デフォルト

1

範囲

1 から MAXINT

単位

動的か

いいえ

検査

値がゼロ以下の場合、値は 1 にリセットされ、警告メッセージが出力されます。この確認が行われるのはブート時だけです。

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

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 以上でなければなりません。

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

autoup または tune_t_fsflushr (あるいはその両方) の変更が必要になる状況はいくつかあります。

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

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

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

コミットレベル

変更の可能性あり

dopageflush

備考欄

fsflush の呼び出し時に、変更されたページの有無についてメモリーを検証するかどうかを制御します。fsflush を呼び出すたびに、システムの物理メモリーページ数が判別されます。この値は動的再構成動作によって変更されている可能性があります。呼び出しのたびに、次のアルゴリズムを使用して走査が実行されます。 ページ総数 x tune_t_fsflushr / autoup ページ

データ型

符号付き整数

デフォルト

1 (有効)

範囲

0 (無効)、1 (有効)

単位

切り替え (オン/オフ)

動的か

はい

検査

なし

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

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

コミットレベル

変更の可能性あり

変更履歴

詳細は、dopageflush (Solaris 10 リリース)」を参照してください。

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 以降、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を参照してください。

  • 多量のメモリーがあり、動作しているプロセスがほとんどない計算サーバーでは、この値を減らせる場合があります。

コミットレベル

変更の可能性あり

reserved_procs

備考欄

UIDが root (0) のプロセス用に、プロセステーブルで確保するシステムプロセススロット数を指定します。たとえば、fsflush には root (0) の UID が与えられます。

データ型

符号付き整数

デフォルト

5

範囲

5 から MAXINT

単位

プロセス数

動的か

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

検査

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

コミットレベル

変更の可能性あり

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

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

pidmax

備考欄

使用可能な最大プロセス 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 は常にこの値以下に保たれます。

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

システム上で 30,000 を超える数のプロセスをサポートできるようにするために必要です。

コミットレベル

変更の可能性あり

max_nprocs

備考欄

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

この値は、他のいくつかのシステムデータ構造体のサイズを決定する場合にも使用されます。このパラメータが作用する他のデータ構造体は、次のとおりです。

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

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

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

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

データ型

符号付き整数

デフォルト

10 + (16 x maxusers)

範囲

266 から maxpid の値

動的か

いいえ

検査

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

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

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

コミットレベル

変更の可能性あり

変更履歴

max_nprocs (Solaris 9 リリース)」を参照してください。

maxuprc

備考欄

個々のユーザーがシステム上に作成できるプロセスの最大数を指定します。

データ型

符号付き整数

デフォルト

max_nprocs - reserved_procs

範囲

1 から max_nprocs - reserved_procs

単位

プロセス数

動的か

いいえ

検査

はい。この値は max_nprocs - reserved_procs と比較され、2 つの値のうちの小さい方に設定されます。

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

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


out of per-user processes for uid N
コミットレベル

変更の可能性あり

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

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

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

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

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

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


注意 – 注意 –

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


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

lotsfree

備考欄

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

データ型

符号なし long

デフォルト

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

範囲

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

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

単位

ページ

動的か

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

検査

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

暗黙的制約

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

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

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

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

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

コミットレベル

変更の可能性あり

desfree

備考欄

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

データ型

符号なし整数

デフォルト

lotsfree / 2

範囲

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

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

単位

ページ

動的か

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

検査

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

暗黙的制約

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

副次的な影響

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

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

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

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

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

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

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

コミットレベル

変更の可能性あり

minfree

備考欄

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

データ型

符号なし整数

デフォルト

desfree / 2

範囲

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

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

単位

ページ

動的か

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

検査

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

暗黙的制約

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

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

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

コミットレベル

変更の可能性あり

throttlefree

備考欄

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

データ型

符号なし整数

デフォルト

minfree

範囲

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

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

単位

ページ

動的か

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

検査

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

暗黙的制約

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

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

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

コミットレベル

変更の可能性あり

pageout_reserve

備考欄

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

データ型

符号なし整数

デフォルト

throttlefree / 2

範囲

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

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

単位

ページ

動的か

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

検査

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

暗黙的制約

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

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

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

コミットレベル

変更の可能性あり

pages_pp_maximum

備考欄

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

データ型

符号なし long

デフォルト

tune_t_minarmem + 100 か、ブート時に使用可能なメモリーの 4% + 4M バイト (大きい方)

範囲

システムが強制する最小値は tune_t_minarmem + 100 です。最大値については、システムは強制しません。

単位

ページ

動的か

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

検査

/etc/system ファイルで指定された値、またはデフォルトで計算された値が tune_t_minarmem + 100 よりも小さい場合、この値は tune_t_minarmem + 100 へリセットされます。

/etc/system ファイルからの値が増やされても、メッセージは表示されません。検査は、ブート時とメモリーの追加または削除を伴なう動的再構成が行われた場合に限って実行されます。

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

メモリーのロック要求や、SHARE_MMU フラグを指定した共有メモリーセグメントへの接続が失敗したが、使用可能なメモリーが十分ありそうな場合。

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

コミットレベル

変更の可能性あり

変更履歴

pages_pp_maximum (Solaris 9 リリース以前の Solaris リリース)」を参照してください。

tune_t_minarmem

備考欄

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

データ型

符号付き整数

デフォルト

25

範囲

1 から物理メモリー

単位

ページ

動的か

いいえ

検査

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

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

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

コミットレベル

変更の可能性あり

fastscan

備考欄

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

データ型

符号付き整数

デフォルト

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

範囲

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

単位

ページ

動的か

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

検査

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

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

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

コミットレベル

変更の可能性あり

slowscan

備考欄

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

データ型

符号付き整数

デフォルト

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

範囲

1 から fastscan / 2

単位

ページ

動的か

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

検査

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

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

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

コミットレベル

変更の可能性あり

min_percent_cpu

備考欄

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

データ型

符号付き整数

デフォルト

4

範囲

1 から 80

単位

%

動的か

はい

検査

なし

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

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

コミットレベル

変更の可能性あり

handspreadpages

備考欄

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

データ型

符号なし long

デフォルト

fastscan

範囲

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

単位

ページ

動的か

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

検査

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

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

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

コミットレベル

変更の可能性あり

pages_before_pager

備考欄

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

データ型

符号付き整数

デフォルト

200

範囲

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

単位

ページ

動的か

いいえ

検査

なし

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

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

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

コミットレベル

変更の可能性あり

maxpgio

備考欄

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

データ型

符号付き整数

デフォルト

40

範囲

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

単位

入出力

動的か

いいえ

検査

なし

暗黙的制約

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

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

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

コミットレベル

変更の可能性あり

変更履歴

詳細は、maxpgio (Solaris 10 リリース)」を参照してください。

スワッピング関連パラメータ

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

swapfs_reserve

備考欄

システム (UID = 0) プロセス用に予約するシステムメモリー容量を指定します。

データ型

符号なし long

デフォルト

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

範囲

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

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

単位

ページ

動的か

いいえ

検査

なし

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

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

コミットレベル

変更の可能性あり

swapfs_minfree

備考欄

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

データ型

符号なし long

デフォルト

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

範囲

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

単位

ページ

動的か

いいえ

検査

なし

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

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

コミットレベル

変更の可能性あり

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

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

メモリーが壊されたために、システムがパニックになることがまれにあります。カーネルメモリーアロケータは、バッファーの各種整合性検査を実行するデバッギングインタフェース (一連のフラグ) をサポートします。カーネルメモリーアロケータは、アロケータに関する情報も収集します。整合性検査によって、発生まぎわのエラーを検出する機会が得られます。収集された情報は、サポート担当者にとって、パニックの原因追及を試みるための追加情報となります。

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

kmem_flags

備考欄

Solaris カーネルメモリーアロケータには、デバッグとテストのための各種オプションがあり、Solaris OS の内部開発サイクルを通じて、これらの機能が盛んに利用されました。Solaris 2.5 リリース以降、このようなオプションのサブセットが利用できるようになりました。これらは kmem_flags 変数によって制御されていましたが、この変数はカーネルデバッガで設定され、その後システムをリブートしていました。カーネルメモリーアロケータのインスタンス化と /etc/system ファイルの解析のタイミングの問題のため、これらのフラグは Solaris 8 より前のリリースでは /etc/system ファイルに設定できませんでした。

次に、サポートされる 5 つのフラグの設定について説明します。

フラグ 

設定 

説明 

AUDIT

0x1

アロケータは、自身の活動の最近の履歴が入ったログを維持します。ログされる項目の数は、CONTENTS も設定されているかどうかによって異なります。このログは固定の大きさです。領域を使い果たすと、古い記録から再利用されます。

TEST

0x2

アロケータは解放されたメモリーにパターンを書き込み、そのバッファーを次に割り当てるときに、そのパターンが変更されていないことをチェックします。バッファーの一部が変更されている場合は、そのバッファーを前に割り当て、解放したクライアントがそのメモリーを使用した可能性が強いことを意味します。上書きが検知されると、システムがパニックになります。 

REDZONE

0x4

アロケータは要求されたバッファーの終りに余分のメモリーを割り当て、そのメモリーに特殊なパターンを挿入します。そして、バッファーが解放されたら、パターンをチェックして、データがバッファーの終りより後ろに書き込まれていないか調べます。上書きが検知されると、カーネルがパニックになります。 

CONTENTS

0x8

アロケータは、バッファーが解放されると、バッファーの内容を 256 バイトまでログします。このフラグを使用するには、AUDIT も設定する必要があります。

これらのフラグの数値は、論理和をとることができ、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-80/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 - より詳細なメッセージを出力します。この値は、システムブート時には 0x40000000 フラグが出力する以上の詳細情報は出力しません。モジュールのロード解除時には、モジュールの解放に関する詳細情報を出力します。

これらの値は足し合わせて指定できます。

動的か

はい

検査

なし

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

期待通りにモジュールがロードされない場合や、モジュールのロード中にシステムがハングしている疑いがある場合。0x4000000 を設定すると、多数のメッセージがコンソールに書き込まれるため、システムのブートがかなり遅くなることに留意してください。

コミットレベル

変更の可能性あり

ddi_msix_alloc_limit

備考欄

x86 システムでのみ使用可能なこのパラメータは、デバイスインスタンスが割り当てることのできる拡張メッセージ信号割り込み (MSI-X) の数を制御します。既存のシステムの制限により、デフォルト値は 2 です。このパラメータの値を大きくすることによって、デバイスインスタンスが割り当てることのできる MSI-X 割り込みの数を増やすことができます。このパラメータを設定するには、/etc/system ファイルを編集するか、またはデバイスドライバの接続が発生する前に mdb を使用してパラメータを設定します。

データ型

符号付き整数

デフォルト

2

範囲

1 から 16

動的か

はい

検査

なし

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

デバイスインスタンスが割り当てることのできる MSI-X 割り込みの数を増やすため。ただし、デバイスインスタンスが割り当てることのできる MSI-X 割り込みの数を増やすと、割り込み数が不足してすべての割り当て要求を満足できなくなる可能性があります。この状況が起きた場合、一部のデバイスが機能を停止したり、システムが起動に失敗したりする可能性があります。そのような場合は、パラメータの値を小さくするか、またはパラメータを削除してください。

コミットレベル

変更の可能性あり

変更履歴

詳細は、ddi_msix_alloc_limit (Solaris 10 リリースおよび OpenSolaris 2009.06 リリース)」を参照してください。

一般的な入出力パラメータ

maxphys

備考欄

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

データ型

符号付き整数

デフォルト

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

範囲

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

単位

バイト

動的か

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

検査

なし

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

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

UFS ファイルシステムとの間で入出力を行い、一度に読み書きするデータ量が多い (64K バイト超) 場合も、このパラメータの変更を検討するかもしれません。ファイルシステムは、連続性が向上するように最適化する必要があります。たとえば、シリンダグループのサイズを増やし、シリンダグループあたりの i ノード数を減らします。UFS では、転送する最大の入出力サイズは 1M バイトに制限されます。

コミットレベル

変更の可能性あり

変更履歴

詳細は、maxphys (Solaris 10 リリース)」を参照してください。

rlim_fd_max

備考欄

1 つのプロセスが開くことのできるファイル記述子に対して、強い限度を指定します。この制限を変更するには、スーパーユーザー特権が必要です。

データ型

符号付き整数

デフォルト

65,536

範囲

1 から MAXINT

単位

ファイル記述子

動的か

いいえ

検査

なし

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

1 プロセス当たりの最大オープンファイル数が十分でない場合。ただし、システムには他の制限もあるため、ファイル記述子の数を増やすことが必ずしも有用とは限りません。次に例を示します。

  • 標準入出力を使用する 32 ビットプログラムでは、256 ファイル記述子に制限されます。標準入出力を使用する 64 ビットプログラムでは、20 億の記述子まで使用できます。具体的には、標準入出力は libc(3LIB)stdio(3C) 関数を指します。

  • select はデフォルトで、fd_set につき 1024 の記述子に制限されます。詳細は、select(3C) を参照してください。ただし、Solaris 7 リリース以降では、32 ビットアプリケーションコードをより大きな fd_set サイズ (65,536 以下) で再コンパイルできます。64 ビットアプリケーションの fd_set サイズは 65,536 で、変更することはできません。

システム全体に対してこれを変更する別の方法として plimit(1) コマンドがあります。plimit を使用して親となるプロセスの限度を変更すると、すべての子プロセスがその限度を継承します。この方法は inetd などのデーモンに有効です。

コミットレベル

変更の可能性あり

変更履歴

rlim_fd_max (Solaris 8 リリース)」を参照してください。

rlim_fd_cur

備考欄

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

データ型

符号付き整数

デフォルト

256

範囲

1 から MAXINT

単位

ファイル記述子

動的か

いいえ

検査

rlim_fd_max と比較します。rlim_fd_currlim_fd_max より大きい場合、rlim_fd_currlim_fd_max にリセットされます。

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

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

コミットレベル

変更の可能性あり

一般的なファイルシステムパラメータ

ncsize

備考欄

ディレクトリ名検索キャッシュ (DNLC) のエントリ数を指定します。このパラメータは、UFS、NFS、および ZFS が、解決されたパス名の要素をキャッシュするときに使用します。

Solaris 8 6/00 リリース以降、DNLC は否定的な検索情報もキャッシュします。つまり、キャッシュ内で検出されない名前がキャッシュされます。

データ型

符号付き整数

デフォルト

(4 x (v.v_proc + maxusers) + 320) + (4 x (v.v_proc + maxusers) + 320 / 100

範囲

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_ninode nfs:nrnode が明示的に設定されていないと、この値は UFS と NFS にさらに影響を与えます。

コミットレベル

変更の可能性あり

変更履歴

詳細は、 ncsize (Solaris 10 リリース)」を参照してください。

rstchown

備考欄

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

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

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

詳細は、chown(2) のマニュアルページを参照してください。

データ型

符号付き整数

デフォルト

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

範囲

0 (POSIX 挙動が強制されない) または 1 (POSIX 挙動が使用される)

単位

切り替え (オン/オフ)

動的か

はい

検査

なし

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

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

コミットレベル

旧式

dnlc_dir_enable

備考欄

大きなディレクトリのキャッシングを有効にします。


注 –

このパラメータは NFS または ZFS ファイルシステムでは無効です。


データ型

符号なし整数

デフォルト

1 (有効)

範囲

0 (無効)、1 (有効)

動的か

はい。しかし動的には変更しないでください。このパラメータは、元々無効だった場合に有効にできます。または、元々有効だった場合に、無効にできます。しかし、有効にし、無効にし、再び有効にすると、ディレクトリキャッシュが最新の状態を表さないことがあります。

検査

いいえ

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

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

コミットレベル

変更の可能性あり

dnlc_dir_min_size

備考欄

1 つのディレクトリでキャッシュする最小エントリ数を指定します。


注 –

このパラメータは NFS または ZFS ファイルシステムでは無効です。


データ型

符号なし整数

デフォルト

40

範囲

0 から MAXUINT (無制限)

単位

エントリ

動的か

はい、このパラメータはいつでも変更できます。

検査

なし

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

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

コミットレベル

変更の可能性あり

dnlc_dir_max_size

備考欄

1 つのディレクトリでキャッシュできるエントリの最大数を指定します。


注 –

このパラメータは NFS または ZFS ファイルシステムでは無効です。


データ型

符号なし整数

デフォルト

MAXUINT (無制限)

範囲

0 から MAXUINT

動的か

はい、このパラメータはいつでも変更できます。

検査

なし

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

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

コミットレベル

変更の可能性あり

segmap_percent

備考欄

高速アクセスファイルシステムキャッシュに使用するメモリーの最大量を指定します。このメモリープールは空きメモリーリストから差し引かれます。

データ型

符号なし整数

デフォルト

システム起動時の空きメモリーの 12%。

範囲

2M バイトからphysmem の 100%。

単位

物理メモリーの %

動的か

いいえ

検査

なし

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

活発なファイルシステム動作が予想され、なおかつ使用可能な空きメモリーが十分にある場合は、このパラメータの値を増やします。

コミットレベル

変更の可能性あり

UFS パラメータ

bufhwm および bufhwm_pct

備考欄

入出力バッファーのキャッシングに使用するメモリーの最大量を指定します。バッファーは、ファイルシステムのメタデータ (スーパーブロック、i ノード、間接ブロック、ディレクトリ) の書き込みに使用されます。割り当てメモリー量 (K バイト単位) が bufhwm を超えるまで、必要に応じてバッファーが割り当てられます。超過した時点で、要求を満たせるだけのバッファーが回復されるまで、バッファーキャッシュからメタデータが破棄されます。

歴史的経緯により、bufhwm には ufs: 接頭辞は不要です。

データ型

符号付き整数

デフォルト

物理メモリーの 2 %。

範囲

80K バイトから物理メモリーの 20% または 2TB のどちらか小さい方。つまり、bufhwm_pct は 1 から 20 にできます。

単位

bufhwm: K バイト

bufhwm_pct: 物理メモリーの %。

動的か

いいえ。bufhwm および bufhwm_pct はシステムの初期設定時に限って評価され、ハッシュ容量が算出されます。これらのパラメータから算出された限度 (バイト数) は、データ構造体に格納され、バッファーの割り当てや解放に応じて、この値が調整されます。

稼働中に bufhwm または bufhwm_pct を変更しても無効です。

検査

bufhwm が下限の 80 K バイトに満たない場合、または上限 (物理メモリーの 20%、2TB、またはカーネルヒープの最大量の 1/4 のいずれか小さい方) を超える場合は、上限にリセットされます。無効な値を試みると、システムコンソールと /var/adm/messages ファイルに次のメッセージが出力されます。


"binit: bufhwm (value attempted) out of range 
(range start..range end). Using N as default."

「value attempted」は、/etc/system ファイルに指定された値、またはカーネルデバッガを使用することによって指定された値です。N は使用可能なシステムメモリーに基づいてシステムが計算した値です。

同様に、bufhwm_pct が 1 から 20% という許容範囲外の値に設定された場合は、デフォルトの 2% にリセットされます。その場合は、次のメッセージがシステムコンソールと /var/adm/messages ファイルに出力されます。


"binit: bufhwm_pct(value attempted) out of range(0..20).
       Using 2 as default."

bufhwmbufhwm_pct がどちらもゼロ以外の値に設定されている場合は、bufhwm が優先されます。

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

バッファーは必要になったときにのみ割り当てられるので、デフォルト値に対する負担増は、バッファーハッシュヘッダー用に必要となる制御構造体の割り当てです。これらの構造体は、32 ビットカーネルでは想定されるバッファー当たり 52 バイト、64 ビットカーネルでは想定されるバッファー当たり 96 バイトを消費します。

512 M バイトの 64 ビットカーネルでは、ハッシュチェーン数は 10316 / 32 == 322 であり、次の 2 の累乗の 512 に拡大されます。したがって、ハッシュヘッダーは 512 x 96 バイト、すなわち 48 K バイトを消費します。ハッシュヘッダー割り当てでは、バッファーが 32 K バイトであることが前提です。

バッファープール内でまだ割り当てられていないメモリー量を知るには、カーネルデバッガを使用して、カーネルの bfreelist 構造体を調べます。この構造体で調べるフィールドは b_bufsize であり、これが残っているはずのメモリー (バイト数) です。mdb コマンドを使用し、buf マクロで調べる例を示します。


# mdb -k
Loading modules: [ unix krtld genunix ip nfs ipc ]
> bfreelist::print "struct buf" b_bufsize
b_bufsize = 0x225800

6G バイトのメモリーを装備したこのシステムでは、bufhwm のデフォルト値は 122277 です。実際に要求されるバッファーサイズは通常、1K バイトより大きいので、ヘッダー構造体の数を突き止めることはできません。しかし、一部の領域は、このシステムに割り当てられた制御構造体からうまく回収されることがあります。

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

コミットレベル

変更の可能性あり

変更履歴

bufhwm (Solaris 9 リリース)」を参照してください。

ndquot

備考欄

割り当て対象となる UFS ファイルシステム用の割り当て構造体の数を指定します。このパラメータは、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 ノードの処理を終わると、次のどちらかが起こる可能性があります。

  • 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 ノード全体がキューから削除されるのは、同期 、アンマウント、または再マウントが行われるときだけです。

歴史的経緯により、このパラメータには ufs: 接頭辞は必要ありません。

データ型

符号付き整数

デフォルト

ncsize

範囲

0 から MAXINT

単位

i ノード

動的か

はい

検査

ufs_ninode が 0 以下の場合、この値は ncsize に設定されます。

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

デフォルトの i ノード数では足りない場合。kstat -n inode_cache で報告される maxsize reached フィールドが kstatmaxsize フィールドより大きい場合は、ufs_ninode の値が小さすぎる可能性があります。i ノードのアイドリングが多すぎる場合も、問題になることがあります。

i ノードのアイドリングが多すぎるかどうかは、kstat -n inode_cache を使用して、inode_cache kstat を調べることで判断できます。thread idles はバックグラウンドスレッドがアイドリングした i ノード数を、vget idles は i ノードを使用する前の要求プロセスによるアイドル数をそれぞれ表しています。

コミットレベル

変更の可能性あり

ufs_WRITES

備考欄

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

データ型

符号付き整数

デフォルト

1 (有効)

範囲

0 (無効)、1 (有効)

単位

切り替え (オン/オフ)

動的か

はい

検査

なし

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

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

コミットレベル

変更の可能性あり

ufs_LW および ufs_HW

備考欄

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

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

データ型

符号付き整数

デフォルト

ufs_LW の場合は 8 x 1024 x 1024、ufs_HW の場合は 16 x 1024 x 1024

範囲

0 から MAXINT

単位

バイト

動的か

はい

検査

なし

暗黙的制約

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

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

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

ufs_throttles が通常ではない値のときにも、このパラメータの変更を検討するかもしれません。現在、ufs_throttles にアクセスできるのは、カーネルデバッガを使用した場合だけです。

コミットレベル

変更の可能性あり

freebehind

備考欄

freebehind アルゴリズムを有効にします。このアルゴリズムが有効な場合、システムはメモリー使用率が高いときに順次入出力を検出すると、新しく読み取ったブロックに関してファイルシステムキャッシュを迂回します。

データ型

ブール型

デフォルト

1 (有効)

範囲

0 (無効)、1 (有効)

動的か

はい

検査

なし

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

freebehind アルゴリズムが頻繁に発生する場合。重要な順次システムファイル動作が予想されない場合、 freebehind を無効にすると、大きさに関係なくすべてのファイルがファイルシステムのページキャッシュで維持される候補になります。さらに細かいチューニングについては、smallfile を参照してください。

コミットレベル

変更の可能性あり

smallfile

備考欄

ファイルの大きさが超えると freebehind アルゴリズムでキャッシュに保持しない候補になる、しきい値を決定します。

大容量メモリーシステムには、深刻なメモリー不足を引き起こすことなく、10M バイトのファイルを千単位でキャッシュできるだけのメモリーがあります。しかし、この状況はあくまでもアプリケーションに強く依存します。

smallfile パラメータと freebehind パラメータの目的は、キャッシュによるメモリー不足を頻繁に引き起こすことなく、キャッシュ情報を再利用することです。

データ型

符号付き整数

デフォルト

32,768

範囲

0 から 2,147,483,647

動的か

はい

検査

なし

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

アプリケーションが中程度の大きさのファイルを順次読み取り、バッファリングによる大きな利益が予想され、なおかつシステムが特にメモリー不足に陥っていない場合、smallfile を増やします。中程度の大きさのファイルとは、32K バイトから 2G バイトのファイルを意味します。

コミットレベル

変更の可能性あり

TMPFS パラメータ

tmpfs:tmpfs_maxkmem

備考欄

TMPFS がデータ構造体 (tmp ノードとディレクトリエントリ) に使用できるカーネルメモリーの最大量を指定します。

データ型

符号なし long

デフォルト

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

範囲

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

単位

バイト

動的か

はい

検査

なし

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

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


tmp_memalloc: tmpfs over memory limit

TMPFS がデータ構造体に現在使用しているメモリー量は、tmp_kmemspace フィールドにあります。カーネルデバッガを使用すると、このフィールドを検証できます。

コミットレベル

変更の可能性あり

変更履歴

詳細は、tmpfs:tmpfs_maxkmem (Solaris 10 リリース)」を参照してください。

tmpfs:tmpfs_minfree

備考欄

TMPFS がシステムの他の部分のために残しておくスワップ空間の最小量を指定します。

データ型

符号付き long

デフォルト

256

範囲

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

単位

ページ

動的か

はい

検査

なし

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

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


fs-name: File system full, swap space limit exceeded
コミットレベル

変更の可能性あり

変更履歴

tmpfs:tmpfs_minfree (Solaris 8 リリース)」を参照してください。

仮想端末

仮想端末 (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_cnt ptms_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_pctofmem

備考欄

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

データ型

符号なし整数

デフォルト

5

範囲

0 から 100

単位

%

動的か

いいえ

検査

なし

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

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

コミットレベル

変更の可能性あり

pt_max_pty

備考欄

システムが提供する ptys の最大数を指定します。

データ型

符号なし整数

デフォルト

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

範囲

0 から MAXUINT

単位

ログイン / ウィンドウ

動的か

はい

検査

なし

暗黙的制約

pt_cnt 以上にすべきです。値が検査されるのは、割り当てられた ptys 数が pt_cnt の値を超過してからです。

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

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

コミットレベル

変更の可能性あり

STREAMS パラメータ

nstrpush

備考欄

STREAM に追加 (格納) できるモジュールの数を指定します。

データ型

符号付き整数

デフォルト

9

範囲

9 から 16

単位

モジュール

動的か

はい

検査

なし

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

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

コミットレベル

変更の可能性あり

strmsgsz

備考欄

1 つのシステム呼び出しで STREAM に渡し、メッセージのデータ部分に格納できる最大バイト数を指定します。このサイズを超える write は、複数のメッセージに分割されます。詳細は、write(2) のマニュアルページを参照してください。

データ型

符号付き整数

デフォルト

65,536

範囲

0 から 262,144

単位

バイト

動的か

はい

検査

なし

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

putmsg 呼び出しから ERANGE が返された場合。詳細は、putmsg(2) のマニュアルページを参照してください。

コミットレベル

変更の可能性あり

strctlsz

備考欄

1 つのシステム呼び出しで STREAM に渡し、メッセージの制御部分に格納できる最大バイト数を指定します。

データ型

符号付き整数

デフォルト

1024

範囲

0 から MAXINT

単位

バイト

動的か

はい

検査

なし

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

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

コミットレベル

変更の可能性あり

System V メッセージキュー

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

Solaris 10 リリースの System V メッセージキューに関する詳細については、「System V IPC 構成」を参照してください。

これらのシステムリソースをチューニングする方法については、『Oracle Solaris のシステム管理 (Oracle Solaris コンテナ : 資源管理と Oracle Solaris ゾーン)』の第 6 章「資源制御 (概要)」を参照してください。

旧式の System V メッセージキューの詳細は、「旧式または削除されたパラメータ」を参照してください。

System V セマフォー

System V セマフォーは Solaris OS で計数型セマフォーを提供します。「セマフォー」は、複数のプロセスが共有データオブジェクトにアクセスできるようにする場合に使用するカウンタです。System V セマフォーでは、セマフォーの標準的な設定/解放操作の他に、必要に応じて増分や減分を行う値を持つことができます (たとえば、使用可能なリソースの数を表すなど)。System V セマフォーによって、1 組のセマフォーに同時に操作を実行したり、プロセスが停止した場合にそのプロセスによる最後の操作を取り消したりすることもできます。

Solaris 10 リリースにおけるセマフォーリソースの変更については、「System V IPC 構成」を参照してください。

Solaris 10 リリースでの新しい資源制御の使用方法については、『Oracle Solaris のシステム管理 (Oracle Solaris コンテナ : 資源管理と Oracle Solaris ゾーン)』の第 6 章「資源制御 (概要)」を参照してください。

旧式の System V セマフォーパラメータの詳細は、「旧式または削除されたパラメータ」を参照してください。

System V 共有メモリー

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

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

Solaris 10 リリースの共有メモリーリソースの変更については、「System V IPC 構成」を参照してください。

Solaris 10 リリースでの新しい資源制御の使用方法については、『Oracle Solaris のシステム管理 (Oracle Solaris コンテナ : 資源管理と Oracle Solaris ゾーン)』の第 6 章「資源制御 (概要)」を参照してください。

旧式の System V 共有メモリーパラメータの詳細は、「旧式または削除されたパラメータ」を参照してください。

segspt_minfree

備考欄

ISM 共有メモリーに割り当てることのできないシステムメモリーのページ数を指定します。

データ型

符号なし long

デフォルト

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

範囲

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

単位

ページ

動的か

はい

検査

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

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

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

コミットレベル

変更の可能性あり

スケジューリング

rechoose_interval

備考欄

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

データ型

符号付き整数

デフォルト

3

範囲

0 から MAXINT

動的か

はい

検査

なし

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

キャッシュが大きい場合、極めて重要なプロセスがシステムで動作している場合や、データアクセスパターン以外の原因により、一連のプロセスで過度のキャッシュミスが発生していると思われる場合。

このパラメータを変更する前に、Solaris 2.6 リリース以来利用可能なプロセッサセット機能を使用するか、またはプロセッサ結合を使用することを検討してください。詳細は、psrset(1M) または pbind(1M) のマニュアルページを参照してください。

コミットレベル

変更の可能性あり

タイマー

hires_tick

備考欄

このパラメータを設定すると、Solaris OS はシステムクロックレートとして、デフォルト値の 100 の代わりに 1000 を使用します。

データ型

符号付き整数

デフォルト

0

範囲

0 (無効)、1 (有効)

動的か

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

検査

なし

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

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

コミットレベル

変更の可能性あり

timer_max

備考欄

使用できるPOSIX タイマーの数を指定します。

データ型

符号付き整数

デフォルト

32

範囲

0 から MAXINT

動的か

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

検査

なし

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

システムのデフォルトのタイマー数では不十分な場合。アプリケーションは timer_create システムコールの実行時に、EAGAIN エラーを受け取ります。

コミットレベル

変更の可能性あり

sun4u または sun4v 固有のパラメータ

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

コミットレベル

変更の可能性あり

tsb_alloc_hiwater_factor

備考欄

tsb_alloc_hiwater を初期化して、変換記憶バッファー (TSB) に割り当てることのできる物理メモリー量に、次のように上限を設けます。

tsb_alloc_hiwater = 物理メモリー (バイト数) / tsb_alloc_hiwater_factor

TSB に割り当てられたメモリーが tsb_alloc_hiwater の値と等しい場合、TSB メモリー割り当てアルゴリズムはマッピングされていないページとして TSB メモリーを再利用しようとします。

この係数を使用して tsb_alloc_hiwater の値を増やす場合は、注意が必要です。システム停止を防止するには、高位境界値が swapfs_minfreesegspt_minfree の値よりかなり小さくなるようにする必要があります。

データ型

整数

デフォルト

32

範囲

1 から MAXINIT

係数 1 の場合、すべての物理メモリーを TSB に割り当てることができるようになるので、システムが停止する可能性があります。また、係数が大きすぎると、TSB に割り当てることのできるメモリーが残らないので、システムパフォーマンスが低下します。

動的か

はい

検査

なし

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

非常に大型の共有メモリーセグメントに接続するプロセスがシステムに多数ある場合、このパラメータ値を変更します。ほとんどの場合、この変数のチューニングは不要です。

コミットレベル

変更の可能性あり

default_tsb_size

備考欄

すべてのプロセスに割り当てる初期変換記憶バッファー (TSB) のサイズを選択します。

データ型

整数

デフォルト

デフォルト値は 0 (8K バイト) です。これは 512 エントリに対応します。

範囲

指定可能な値は、次のとおりです。

値 

説明 

8K バイト 

16K バイト 

32K バイト 

128K バイト 

256K バイト 

512K バイト 

1M バイト 

動的か

はい

検査

なし

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

通常、この値を変更する必要はありません。しかし、システム上のプロセスの大半が平均より大きい作業用セットを使用する場合、または常駐セットサイズ (RSS) のサイズ調整が無効な場合は、この値を変更することによって利益が得られることもあります。

コミットレベル

変更の可能性あり

変更履歴

詳細は、default_tsb_size (Solaris 10 リリース)」を参照してください。

enable_tsb_rss_sizing

備考欄

TSB 発見的容量調整に基づく常駐セットサイズ (RSS) を有効にします。

データ型

ブール型

デフォルト

1 (TSB のサイズ変更が可能)

範囲

0 (TSB は tsb_default_size のまま) または 1 (TSB のサイズ変更が可能)

0 に設定した場合、tsb_rss_factor は無視されます。

動的か

はい

検査

はい

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

0 に設定すると、TSB の増加を防ぐことができます。ほとんどの場合、このパラメータはデフォルト設定のままにしておくべきです。

コミットレベル

変更の可能性あり

変更履歴

詳細は、enable_tsb_rss_sizing (Solaris 10 リリース)」を参照してください。

tsb_rss_factor

備考欄

RSS 発見的容量調整の RSS 対 TSB 期間比を制御します。この係数を 512 で割ると、TSB がサイズ変更候補とみなされるまでに、メモリーに常駐していなければならない TSB 期間の割合が出ます。

データ型

整数

デフォルト

384。これは 75% の値になります。このため、TSB が 3/4 に達するとサイズが増やされます。いくつかの仮想アドレスは通常、TSB の同じスロットにマップされます。したがって、TSB が 100% に達する前に衝突が起こることがあります。

範囲

0 から 512

動的か

はい

検査

なし

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

TSB での仮想アドレスの衝突による場合など、システムが TSB ミスに起因する過度の数のトラップに直面している場合は、この値を 0 に減らしてもよいかもしれません。

たとえば、tsb_rss_factor を 384 (事実上は 75%) ではなく 256 (事実上は 50%) に変更すると、状況によっては、TSB における仮想アドレスの衝突を排除できることがありますが、特に負荷の大きいシステムでは、カーネルメモリーの使用量が増えます。

TSB の動きは、trapstat -T コマンドで監視できます。

コミットレベル

変更の可能性あり

変更履歴

詳細は、tsb_rss_factor (Solaris 10 リリース)」を参照してください。

近傍性グループのパラメータ

この節では、NUMA (Non-Uniform Memory Architecture) を使用するどの SPARC または x86 システムにも適用できる、汎用的なメモリーチューニング可能パラメータについて説明します。

lpg_alloc_prefer

備考欄

大規模なメモリーページの割り当てを行う際に、要求されたページサイズがローカルのメモリーグループ内ではすぐに利用できないが遠隔メモリーグループからであれば要求を満たせるときにヒューリスティックを制御します。

デフォルトでは、ローカルの空きメモリーは断片化されているが、遠隔の空きメモリーは断片化されていない場合に、Solaris OS は遠隔大規模ページを割り当てます。このパラメータを 1 に設定した場合、大規模なメモリーページをローカルで割り当てるため、たとえばローカルのメモリーグループ内で小さなページを集めて大きなページに合体させるといった追加動作が行われます。

データ型

ブール型

デフォルト

0 (ローカルの空きメモリーが断片化されていて、遠隔の空きメモリーが断片化されていない場合は、遠隔割り当てを優先する)

範囲

0 (ローカルの空きメモリーが断片化されていて、遠隔の空きメモリーが断片化されていない場合は、遠隔割り当てを優先する)

1 (ローカルの空きメモリーが断片化されていて、遠隔の空きメモリーが断片化されていない場合でも、可能な場合は常にローカル割り当てを優先する)

動的か

いいえ

検査

なし

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

このパラメータを 1 に設定することが考えられるのは、システム上で長時間動作する複数のプログラムが割り当てる傾向にあるメモリーが単一のプログラムによってアクセスされている場合、または複数プログラムのグループによってアクセスされるメモリーが同じ近傍性グループ (lgroup) 内で使用されていることがわかっている場合です。これらの状況では、ページ合体操作の余分なコストをプログラムの長い実行時間にわたって償却することができます。

このパラメータをデフォルト値 (0) のままにすることが考えられるのは、複数のプログラムが異なる近傍性グループにわたってメモリーを共有する傾向にある場合や、ページが短期間だけ使用される傾向にある場合です。このような状況では、特定の場所における割り当てよりも、要求されたサイズをすばやく割り当てることの方がより重要となります。

ページの場所とサイズは、http://hub.opensolaris.org/bin/view/Main/ で入手可能な NUMA 可観測性ツールを使用して監視できます。TLB の誤動作は、trapstat -T コマンドを使用して監視できます。

コミットレベル

コミットされていない

lgrp_mem_default_policy

備考欄

この変数は、Solaris OS が使用するデフォルトのメモリー割り当てポリシーを反映するものです。この変数は整数であり、その値は sys/lgrp.h ファイルに示されているいずれかのポリシーに対応しているようにします。

データ型

整数

デフォルト

1 (LGRP_MEM_POLICY_NEXT)。これはメモリー割り当てが、デフォルトでメモリー割り当てを実行しているスレッドのホーム lgroup になることを示します。

範囲

指定可能な値は、次のとおりです。

値 

説明 

コメント 

LGRP_MEM_POLICY_DEFAULT

システムのデフォルトのポリシーを使用  

LGRP_MEM_POLICY_NEXT

スレッドのホーム lgroup の割り当ての次 

LGRP_MEM_POLICY_RANDOM_PROC

プロセスにわたってランダム 

LGRP_MEM_POLICY_RANDOM_PSET

プロセッサセットにわたってランダム 

LGRP_MEM_POLICY_RANDOM

すべての lgroup にわたってランダム 

LGRP_MEM_POLICY_ROUNDROBIN

すべての lgroup にわたってラウンドロビン 

LGRP_MEM_POLICY_NEXT_CPU

メモリーにアクセスするための近接した次の CPU 

動的か

いいえ

検査

なし

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

使用するアプリケーションが、メモリーの待ち時間に影響を受ける場合。この待ち時間とは、NUMA を使用するシステム上でローカルメモリーの代わりに遠隔メモリーを割り当てる際に発生する時間をさします。

コミットレベル

コミットされていない

lgrp_mem_pset_aware

備考欄

プロセスがユーザープロセッサセット内で実行されている場合は、この変数によって、このプロセスのためにランダムに配置されたメモリーがシステム内のすべての lgroup から選択されるのか、またはプロセッサセット内のプロセッサで構成されている lgroup のみから選択されるのかが決定されます。

プロセッサセットの作成についての詳細は、psrset(1M) を参照してください。

データ型

ブール型

デフォルト

0。Solaris OS はシステム内のすべての lgroup からメモリーを選択します

範囲
  • 0。Solaris OS はシステム内のすべての lgroup からメモリーを選択します (デフォルト)。

  • 1。プロセッサセット内のプロセッサで構成されている lgroup のみからメモリーを選択しようと試みます。最初の試みが失敗した場合は、任意の lgroup 内のメモリーを割り当てることができます。

動的か

いいえ

検査

なし

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

この値を 1 に設定すると、プロセッサセットがほかのアプリケーションからアプリケーションを切り離すために使用されている場合に、再現性のあるパフォーマンスが得られる可能性があります。

コミットレベル

コミットされていない

Solaris ボリュームマネージャーのパラメータ

md_mirror:md_resync_bufsz

備考欄

RAID 1 ボリューム (ミラー) の再同期に使用するバッファーのサイズを 512 バイト単位のブロック数で設定します。設定する値を大きくすると、再同期の速度が速くなります。

データ型

整数

デフォルト

デフォルト値は 128 です。大規模なシステムでは、ミラー再同期速度を上げるためにより高い値を使用することがあります。

範囲

128 から 2048

単位

ブロック (512バイト)

動的か

いいえ

検査

なし

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

Solaris ボリュームマネージャーの RAID 1 ボリューム (ミラー) を使用していて、ミラー再同期の速度を上げたい場合。システム性能全体に対し十分なメモリーがある場合は、この値を増加させても他の性能上の問題は発生しません。

ミラー再同期の速度を上げる場合は、充分な性能となるまで、このパラメータの値を (128 ブロックずつ) 増加させてください。かなり大きなシステムや新しいシステムでは、この値を 2048 とするのが適当と考えられます。旧式のシステムでこの値を高く設定するとシステムがハングアップする場合があります。

コミットレベル

変更の可能性あり

md:mirrored_root_flag

備考欄

複製定数に関する Solaris ボリュームマネージャー要件を変更し、状態データベースの有効な複製が利用できる場合は、Solaris ボリュームマネージャーを強制的に起動させます。

デフォルト値は「無効」で、すべての複製の過半数を使用可能にして同期させてからでなければ、Solaris ボリュームマネージャーは起動しません。

データ型

ブール値

デフォルト

0 (無効)

範囲

0 (無効)、1 (有効)

動的か

いいえ

検査

なし

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

このパラメータの使用はサポートされません。

次の 3 つの条件がすべて当てはまる場合、危険を承知のうえでこのパラメータを有効にする Solaris ボリュームマネージャーのユーザーもいます。

  • root (/) またはその他のシステムに不可欠なファイルシステムがミラー化されている

  • 使用できるディスクまたはコントローラが 2 つだけである

  • システムの無人リブートが必要である

このパラメータを有効にすると、システムの状態 (どちら側のミラーが良好または「保守 (Maintenance)」状態なのかなどを含む) が正確に反映されていない古い複製を使用して、システムがブートする可能性があります。その結果、データが破損したり、システムが破損したりすることもあります。

このパラメータを変更するのは、データの一貫性や整合性よりシステムの可用性の方が重要な場合に限定してください。障害が発生していないかどうか、注意深くシステムを監視してください。障害、保守 (Maintenance)、またはホットスワップボリュームの数をできるだけ低く抑えることによって、危険性を軽減できます。

状態データベースの複製については、『Solaris ボリュームマネージャの管理』の第 6 章「状態データベース (概要)」を参照してください。

コミットレベル

変更の可能性あり