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

Solaris カーネルのチューニング

次の表では、パラメータに適用可能なチューニングの方法を示します。

チューニングパラメータの適用方法 

参照先 

/etc/system ファイルの変更

/etc/system ファイル」

デバッガ (adb) の使用

adb

カーネルデバッガ (kadb) の使用

kadb

モジューラデバッガ (mdb) の使用

mdb

ndd コマンドによる TCP/IP パラメータの設定

第 4 章「TCP/IP チューニング可能パラメータ」

/etc/default 下のファイルの変更

「システムのデフォルトのパラメータ」

/etc/system ファイル

/etc/system ファイルは、カーネル変数の値を静的に調整する機構を提供します。このファイルに指定された値は、ブート時に読み込まれ適用されます。このファイルに対する変更は、システムがリブートされるまでオペレーティングシステムに適用されません。

Solaris 8 より前のリリースでは、システム変数の値を設定する /etc/system のエントリは、次の 2 つの処理段階に分けて適用されていました。

2 つめの処理段階では、許容されないような値を変数に設定したり、初期構成で値が上書きされる変数 (max_nprocs など) に値を割り当てたりするため、この処理段階はユーザーや管理者にとって混乱を招く場合がありました。

Solaris 8 リリースでは、構成パラメータを計算する前にすべての値を設定する 1 つの処理段階が設けられました。

例 - /etc/system を使用したパラメータの設定

次の /etc/system エントリでは、NFS バージョン 2 ソフトウェアを使用してマウントされたファイルシステムに対し先読みするブロックの数を指定します。


set nfs:nfs_nra=4

適正でない値からの復元

値を変更する前に /etc/system のコピーを作成しておけば、不正な値を簡単に元の値に戻せます。


# cp /etc/system /etc/system.good

/etc/system に設定した値が原因でシステムがブートできない状態になった場合は、次のコマンドでブートします。


ok boot -a

このコマンドを実行すると、ブートプロセスで使用する各ファイルの名前をシステムから要求されます。/etc/system ファイルの名前が要求されるまで Return キーを押して、デフォルトの値を適用します。Name of system file [/etc/system]: プロンプトが表示されたら、正しい /etc/system ファイルのコピーの名前か /dev/null を入力します。


Name of system file [/etc/system]: /etc/system.good

/dev/null を入力すると、システムは /dev/null から構成情報を読み込もうとします。しかし、/dev/null は空のため、システムはデフォルト値を使用します。システムがブートした後、/etc/system ファイルを修正できます。

システムの回復については、『Solaris のシステム管理 (第 1 巻)』でさらに記述されています。

adb

adb は実行時デバッガです。スーパーユーザーは、-k オプションを指定して adb を実行し、動作中のカーネルの変数を見ることができます。さらに、-k オプションと共に -w オプションを指定すると、スーパーユーザーは動作中のカーネルメモリー内の値を変更することができます。この方法によるすべての変更は、システムがリブートされると失われます。

例 - adb を使用した値の変更

整数変数 maxusers の現在の値を 0x200 に変更するには、次のようにします。


# adb -kw
physmem f7c6
maxusers/D
maxusers:
maxusers:       495
maxusers/W 200
maxusers:       0x1ef           =       0x200
$q

実際に変更する場合は、maxusers を変更したい変数のアドレスに、値を設定したい値に置き換えて、このコマンドを実行します。

adb コマンドの使い方については、adb(1) のマニュアルページを参照してください。

kadb

kadb はブート可能なカーネルデバッガであり、その一般的な構文は adb と同じです。例外については、kadb(1M) のマニュアルページを参照してください。kadb の利点の 1 つは、ユーザーがブレークポイントを設定でき、そのブレークポイントに達したらデータを調べたり、カーネルコードを 1 つずつ実行できることです。

kadb -d を指定してシステムをブートすると、コアカーネルの変数に値を設定できます。ただし、ロード可能モジュールの値は、そのモジュールが実際にロードされたときに値が設定されます。

Writing Device Drivers』の「Debugging」の節に kadb コマンドの使い方の簡単な説明が記載されています。

mdb

mdb(1) は Solaris 8 リリースで新たに提供されたモジューラデバッガです。このデバッガは、拡張が容易であるという点で現在の Solaris デバッガの中でも独特のものです。adb マクロの作成を試みたことがあるユーザーなら、この作業が簡単でないことがお分かりでしょう。このデバッガのプログラミング API を使用して、モジュールをコンパイルすることによって、デバッガのコンテキスト内で希望する処理を実行することができます。mdbadb(1)crash(1M) との下位互換性があります。

さらに、mdb(1) には、コマンド行での編集、コマンド履歴、組み込み出力ページャ、構文チェック、コマンドパイプラインなどの、いくつかの便利な機能があります。カーネルに対する事後検分用のデバッガとしては、このデバッガをお勧めします。

例 - mdb を使用した値の変更

整数変数 maxusers の値を 5 から 6 に変更するには、次のようにします。


# mdb -kw
Loading modules: [ unix krtld genunix ip logindmux ptm nfs ipc lofs ]
> maxusers/D
maxusers:
maxusers:       495
> maxusers/W 200
maxusers:       0x1ef           =       0x200
> $q

実際に変更する場合は、maxusers を変更したい変数のアドレスに、値を設定したい値に置き換えて、このコマンドを実行します。

モジューラデバッガの詳細は、『Solaris モジューラデバッガ』を参照してください。

adbkadbmdb では、モジュール名接頭辞を指定する必要はありません。モジュールが読み込まれると、そのモジュールのシンボルは、コアカーネルのシンボルやすでにロードされているその他のモジュールのシンボルとの共通の名前空間を形成するからです。

たとえば、UFS モジュールがロードされると想定した場合、ufs:ufs_WRITES は、個々のデバッガでは ufs_WRITES としてアクセスされます。しかし、/etc/system ファイルに設定する場合は、ufs: 接頭辞が必要です。adbkadb でモジュール名接頭辞を指定すると、未定義のシンボルのメッセージが出力されます。