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

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

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

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

参照箇所 

/etc/system ファイルの変更

/etc/system ファイル

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

kadb

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

mdb

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

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

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

NCA パラメータのチューニングの概要

/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 を入力します。


ファイル名 [/etc/system]: /etc/system.good

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

システム回復に関する詳細は、Solaris のシステム管理 (基本編)を参照してください。

kadb

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

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

kadb の使用に関する簡単な説明が、『Writing Device Drivers』の「Debugging」に記載されています。

mdb

mdb(1) は Solaris 8 リリースから提供されているモジューラデバッガです。このデバッガは、拡張が容易であるという点で現在の Solaris デバッガの中でも独特のものです。このデバッガのプログラミング API を使用して、モジュールをコンパイルすることによって、デバッガのコンテキスト内で希望する処理を実行することができます。

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

例 — 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 モジューラデバッガを参照してください。

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

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