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

第 1 章 Oracle Solaris システムのチューニングの概要

この章では、このマニュアルで使用するチューニング情報の記載形式の概要を示します。また、Solaris システムの別のチューニング方法についても説明します。

Oracle Solaris システムチューニングの新機能

この節では、この Oracle Solaris リリースで追加または変更されたパラメータについて説明します。

Solaris 10 リリースにおける Solaris システムチューニングの新機能

この節では、Solaris 10 リリースで追加または変更されたパラメータについて説明します。

デフォルトのスタックサイズ

新しいパラメータ default_stksize では、あらゆるスレッド、カーネル、またはユーザーのデフォルトスタックサイズを指定します。lwp_default_stksize パラメータも引き続き利用できますが、すべてのカーネルスタックに作用するわけではありません。default_stksize が設定されている場合、それは lwp_default_stksize に優先します。詳細は、default_stksizeを参照してください。

System V IPC 構成

この Solaris リリースでは、すべての System V IPC 機能を自動構成することも、または資源制御によって制御することもできます。共有できる機能はメモリー、メッセージキュー、およびセマフォーです。

資源制御によって、ローカルシステム上で、またはネームサービス環境において、プロジェクト単位またはプロセス単位で IPC を設定できます。

旧リリースの Solaris では、カーネルのチューニング可能パラメータで IPC 機能を制御していました。これらの機能のデフォルト値を変更するには、/etc/system ファイルを変更してシステムを再起動しなければなりませんでした。

しかし、資源制御で IPC 機能を制御するようになったので、システムの稼働中に IPC機能の構成を変更できます。

これまで動作させるためにシステムチューニングが必要だったアプリケーションの多くは、デフォルト値の増大と資源の自動割り当てにより、チューニングしなくても動作する可能性があります。

次の表では、現在は旧式となっている IPC チューニング可能パラメータと、代わりに使用できる可能性のある資源制御を識別しています。旧式の IPC チューニング可能パラメータと資源制御との重要な違いは、IPC チューニング可能パラメータがシステム単位で設定されていたのに対し、資源制御は各プロジェクトまたは各プロセス単位で設定されることです。

資源制御 

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

旧デフォルト値 

最大値 

新デフォルト値 

process.max-msg-qbytes

msgsys:msginfo_msgmnb

4096 

ULONG_MAX

65536 

process.max-msg-messages

msgsys:msginfo_msgtql

40 

UINT_MAX

8192 

process.max-sem-ops

semsys:seminfo_semopm

10 

INT_MAX

512 

process.max-sem-nsems

semsys:seminfo_semmsl

25 

SHRT_MAX

512 

project.max-shm-memory

shmsys:shminfo_shmmax*

0x800000 

UINT64_MAX

物理メモリーの 1/4 

project.max-shm-ids

shmsys:shminfo_shmmni

100 

224

128 

project.max-msg-ids

msgsys:msginfo_msgmni

50 

224

128 

project.max-sem-ids

semsys:seminfo_semmni

10 

224

128 

* project.max-shm-memory 資源制御は 1 つのプロジェクトにおける共有メモリー量の合計を制限していますが、以前は shmsys:shminfo_shmmax パラメータが 1 つの共有メモリーセグメントのサイズを制限していました。

資源制御についての詳細は、『Oracle Solaris のシステム管理 (Oracle Solaris コンテナ : 資源管理と Oracle Solaris ゾーン)』「使用可能な資源制御」を参照してください。

旧式のパラメータは、Solaris システム上の /etc/system ファイルに引き続き指定できます。その場合、これらのパラメータは、以前の Solaris リリースの場合と同様に、デフォルトの資源制御値の初期化に使用されます。詳細は、「旧式または削除されたパラメータ」を参照してください。ただし、古いパラメータはできるだけ使用しないでください。

関連のある次のパラメータは削除されました。これらのパラメータが Solaris システム上の /etc/system ファイルに含まれていた場合は、コメント扱いになります。

semsys:seminfo_semmns

semsys:seminfo_semvmx

semsys:seminfo_semmnu

semsys:seminfo_semaem

semsys:seminfo_semume

semsys:seminfo_semusz

semsys:seminfo_semmap

shmsys:shminfo_shmseg

shmsys:shminfo_shmmin

msgsys:msginfo_msgmap

msgsys:msginfo_msgseg

msgsys:msginfo_msgssz

msgsys:msginfo_msgmax

 

現在使用できる資源制御の一覧については、rctladm(1M) のマニュアルページを参照してください。資源制御の構成方法については、project(4) のマニュアルページ、および『Oracle Solaris のシステム管理 (Oracle Solaris コンテナ : 資源管理と Oracle Solaris ゾーン)』の第 6 章「資源制御 (概要)」を参照してください。

NFSv4 パラメータ

このリリースでは、NFSv4 プロトコルの次のパラメータが新しく追加されました。

NFSv4 パラメータについては、「NFS モジュールのパラメータ」を参照してください。

追加または変更された TCP/IP パラメータ

この Solaris リリースでは、次の IP パラメータが追加されました。

この Solaris リリースでは、次の TCP パラメータが追加されました。

この Solaris リリースでは、次の TCP/IP パラメータは旧式となりました。

IP 転送に関する変更

この Solaris リリースでは、ndd コマンドで次のチューニング可能パラメータを設定する代わりに、 routeadm コマンドまたは ifconfig コマンドを使用して、IP 転送を有効にしたり無効にしたりするようになりました。

ndd コマンドの代わりに routeadm コマンドおよび ifconfig コマンドを使用して IP 転送を設定することによって、次の利点が得られます。

システムのすべてのインタフェース上で IPv4 または IPv6 パケットを転送できるようにするには、次のコマンドを使用します。


# routeadm -e ipv4-forwarding

# routeadm -e ipv6-forwarding

システムのすべてのインタフェース上で IPv4 または IPv6 パケット転送を無効にするには、次のコマンドを使用します。


# routeadm -d ipv4-forwarding

# routeadm -d ipv6-forwarding

旧リリースの Solaris では、システムのすべてのインタフェース上で IPv4 または IPv6 パケットを転送できるようにする場合、次のように入力します。


# ndd -set /dev/ip ip_forwarding 1

# ndd -set /dev/ip ip6_forwarding 1

旧リリースの Solaris では、システムのすべてのインタフェース上で IPv4 または IPv6 パケット転送を無効にする場合、次のように入力します。


# ndd -set /dev/ip ip_forwarding 0

# ndd -set /dev/ip ip6_forwarding 0

特定の IPv4 インタフェースまたは IPv6 インタフェースで IP 転送を有効にするには、インタフェースに合わせて次のような構文を使用します。例として、bge0 インタフェースを使用します。


# ifconfig bge0 router

# ifconfig bge0 inet6 router

特定の IPv4 インタフェースまたは IPv6 インタフェースで IP 転送を無効にするには、インタフェースに合わせて次のような構文を使用します。例として、bge0 インタフェースを使用します。


# ifconfig bge0 -router

# ifconfig bge0 inet6 -router

これまで、特定のインタフェースで IP 転送を有効にするには、次のように入力していました。


# ndd -set /dev/ip bge0:ip_forwarding 1

# ndd -set /dev/ip bge0:ip_forwarding 1

これまで、特定のインタフェースで IP 転送を無効にするには、次のように入力していました。


# ndd -set /dev/ip ip_forwarding 0

# ndd -set /dev/ip ip6_forwarding 0

実行システム上で前のいずれかの routeadm 設定値を有効にする場合は、次のコマンドを使用します。


# routeadm -u

詳細は、routeadm(1M) およびifconfig(1m) のマニュアルページを参照してください。

SPARC: 変換記憶バッファー (TSB) パラメータ

このリリースでは、Translation Storage Buffer (TSB) をチューニングするための新しいパラメータが追加されました。TSB パラメータについては、「sun4u または sun4v 固有のパラメータ」を参照してください。

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

この Solaris リリースには、TCP と同様のサービスを提供する、信頼性の高いトランスポートプロトコルのストリーム制御転送プロトコル (SCTP) が含まれています。SCTP チューニング可能パラメータについては、「SCTP チューニング可能パラメータ」を参照してください。

Solaris システムのチューニング

Solaris OS は SPARC および x86 プロセッサで動作する、マルチスレッドでスケーラブルな UNIX オペレーティングシステムです。Solaris は、システムの負荷に自動的に対応するため、最小限のチューニングしか必要ありません。それでも、場合によってはチューニングが必要になることもあります。このマニュアルでは、Solaris OS で公式にサポートされているカーネルのチューニングオプションの詳細を記述します。

Solaris カーネルは、常にロードされているコア部分と、参照が発生するとロードされるロード可能モジュールから構成されています。このマニュアルのカーネルに関する部分で参照されている変数の多くは、コア部分にあります。しかし、ロード可能モジュールの変数もいくつかあります。

システムのチューニングをする際に考慮しなければならないのは、さまざまなシステム パラメータ (またはシステム変数) を設定する行為は、処理効率を高めるという目的にとって、多くの場合、一番効率の良くない行為だということです。最も効果的なチューニング方法は、通常、アプリケーションの動作を変更することです。また、物理メモリーを増やしたり、ディスクの入出力パターンのバランスをとることも効果があります。このマニュアルに記載された変数の値を 1 つ変更しただけで、システムパフォーマンスに意味のある影響が現れることは、ごく限られた場合にしか起きません。

あるシステムの /etc/system 設定値が全体として、または部分的に、別のシステムの環境に当てはまらないこともあるということを忘れないでください。したがって、使用する環境に応じて、このファイルに設定する値を慎重に検討する必要があります。このマニュアルで述べるシステム変数を変更する場合は、システムの動作を前もって理解していなければなりません。

Solaris の新しいリリースに移行する場合は、空の /etc/system ファイルで開始することをお勧めします。最初のステップとしては、自社製またはサードパーティー製のアプリケーションで必要とされるチューニング可能パラメータだけを追加してください。Solaris 10 リリースでは、System V IPC (セマフォー、共有メモリー、およびメッセージキュー) に関係するすべてのチューニング可能パラメータが変更されているため、使用環境で変更するようにしてください。詳細は、「System V IPC 構成」を参照してください。基準検査の確立後に、システムパフォーマンスを評価して、チューニング可能パラメータの追加設定が必要かどうかを決定します。


注意 – 注意 –

このマニュアルで説明するチューニング可能パラメータは、Solaris のリリースごとに変更される可能性があります。これらのチューニング可能パラメータを公開することによって、予告なくチューニング可能パラメータやその説明が変更されることがなくなるわけではありません。


チューニング可能パラメータの説明形式

各チューニング可能パラメータの説明形式は、次のとおりです。

パラメータ名

/etc/system ファイルに入力するか、または /etc/default/facility ファイルに指定されているとおりの名前。

ほとんどのパラメータ名は、コロン (: ) を伴わない parameter の形式をとります。このような名前は、カーネルのコア部分内の変数を表しています。名前にコロンが含まれている場合、コロンの左側の文字列はロード可能モジュールの名前を表し、コロンの右側の文字列はモジュール内の変数名を表します。コロンの右側の文字列はモジュール内のパラメータ名を示します。次に例を示します。


module_name:variable
備考欄

パラメータが何を行うのか、何を制御するのかという簡単な説明。

データ型

次の区別で、符号付きまたは符号なし short 整数または long 整数を指定。

  • 32 ビットのカーネルが動作しているシステムでは、long 整数のサイズは整数と同じです。

  • 64 ビットのカーネルが動作しているシステムでは、long 整数のビット幅は整数の 2 倍です。例 : 符号なし整数 = 32 ビット、符号なし long 整数 = 64 ビット

単位

単位の種類を表します。この項目は省略されることがあります。

デフォルト

システムがデフォルト値として使用する値です。

範囲

システムの検査で取り得る範囲や、データ型の上下限を表す範囲です。

  • MAXINT – 符号付き整数の最大値 (2,147,483,647) を表します。

  • MAXUINT – 符号なし整数の最大値 (4,294,967,295) を表します。

動的か

動作中のシステムで mdb、または kmdb デバッガを使用してパラメータを変更できる場合は「はい」です。パラメータがブート時の初期化だけの場合は「いいえ」です。

検査

システムが、/etc/system ファイルに指定されたとおりの値とデフォルトの値のいずれを変数の値に適用するか調べます。また、検査がいつ適用されるかも示します。

暗黙的制約

パラメータに対する暗黙的な制約事項 (特に他のパラメータとの関係において) を表します。この項目は省略されることがあります。

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

この値を変更したくなる理由について説明します。エラーメッセージまたは戻りコードが含まれます。

ゾーン構成

パラメータを排他的 IP ゾーン内で設定できるか、または大域ゾーン内で設定する必要があるかを識別します。共有 IP ゾーン内で設定できるパラメータはありません。

コミットレベル

インタフェースの安定性を表します。このマニュアルで記述するパラメータの多くは「発展中 (Evolving)」または「変更の可能性あり (Unstable)」のいずれかに分類されます。詳細は、attributes(5) のマニュアルページを参照してください。

変更履歴

存在する場合は、付録 A または付録 B の「変更履歴」への参照が示されます。この項目は省略されることがあります。

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

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

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

参照先 

/etc/system ファイルの変更

/etc/system ファイル」

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

kmdb コマンド」

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

mdb コマンド」

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

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

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


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

/dev/null を指定した場合は、このパスによってシステムは /dev/null から構成情報を読み取ろうとします。このファイルは空なので、システムはデフォルト値を使用することになります。システムがブートした後、/etc/system ファイルを修正できます。

システム回復については、『Solaris のシステム管理 (基本編)』を参照してください。

kmdb コマンド

kmdb は対話式カーネルデバッガであり、その一般的な構文は mdb と同じです。対話式カーネルデバッガの利点は、ブレークポイントを設定できることです。ブレークポイントに達すると、データを検証し、カーネルコードの手順を 1 つずつ実行できます。

kmdb は必要に応じてロードしたりロード解除したりできます。対話的にカーネルをデバッグするためにシステムをリブートする必要はありません。kadb は必要でした。

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

mdb コマンド

Solaris 8 リリースから組み込まれたモジューラデバッガ mdb は Solaris のデバッガの中でも独特で、簡単に拡張できます。このデバッガのプログラミング API を使用して、モジュールをコンパイルすることによって、デバッガのコンテキスト内で希望する処理を実行することができます。

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

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

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

整数パラメータ maxusers の値を 495 から 512 に変更するには、次のようにします。


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

kmdb デバッガまたは mdb デバッガを使用する場合、モジュール名の接頭辞は不要です。モジュールのロード後、そのシンボルはコアカーネルのシンボルやすでにロードされている他のモジュールのシンボルとともに共通の名前空間を形成するからです。

たとえば、UFS モジュールがロードされている場合、各デバッガは ufs:ufs_WRITESufs_WRITES としてアクセスします。 ufs: 接頭辞が必要なのは、/etc/system ファイルに設定する場合です。

Solaris の特殊な tune および var 構造体

Solaris のチューニング可能パラメータはさまざまな形を取ります。/usr/include/sys/tuneable.h ファイルで定義された tune 構造体は、tune_t_fsflushrtune_t_minarmem、および tune_t_flkrec の実行時の表現です。カーネルが初期設定された後は、これらの変数に対する参照はすべて、この tune 構造体の対応フィールドに入ります。

以前のバージョンの『Solaris のシステム管理 (第 2 巻)』をはじめ、さまざまなマニュアルには、tune 構造体のパラメータを設定する適切な方法として tune:field-name (field-name には前述の実際のパラメータ名を指定する) という構文が指定されていました。しかし、この設定は何のメッセージもなく失敗します。ブート時にこの構造体にパラメータを設定するには、必要なフィールド名に対応する特別なパラメータを初期設定する必要があります。そうすれば、これらの値がシステム初期設定プロセスで tune 構造体にロードされます。

複数のチューニング可能パラメータが置かれるもう 1 つの構造体に、v という名前の var 構造体があります。var 構造体の定義は /usr/include/sys/var.h ファイルにあります。autoupbufhwm などの変数の実行時の状態はここに格納されます。

システムの動作中に tune 構造体や v 構造体を変更しないでください。システムの動作中にこれらの構造体のフィールドを変更すると、システムがパニックになることがあります。

Solaris システム構成情報の閲覧

システム構成情報を調べるツールはいくつかあります。ツールによっては、スーパーユーザー権限が必要です。それ以外のツールは、一般ユーザーの権限で実行できます。動作中のシステム上で mdb を使うか、あるいは kmdb でブートし、カーネルデバッガですべての構造体やデータアイテムを調べることができます。

詳細は、mdb(1) または kadb(1M) のマニュアルページを参照してください。

sysdef コマンド

sysdef コマンドは、System V IPC の設定値、STREAMS チューニング可能パラメータ、プロセス資源制限、および tune 構造体と v 構造体の一部を提供します。たとえば、512M バイトの Sun Ultra 80 システム上で sysdef を実行すると、「チューニング可能パラメータ」セクションは次のように表示されます。


10387456        maximum memory allowed in buffer cache (bufhwm)
    7930        maximum number of processes (v.v_proc)
      99        maximum global priority in sys class (MAXCLSYSPRI)
    7925        maximum processes per user id (v.v_maxup)
      30        auto update time limit in seconds (NAUTOUP)
      25        page stealing low water mark (GPGSLO)
       5        fsflush run rate (FSFLUSHR)
      25        minimum resident memory for avoiding deadlock (MINARMEM)
      25        minimum swapable memory for avoiding deadlock (MINASMEM)

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

kstat ユーティリティー

kstat データ構造体群は、さまざまなカーネルのサブシステムやドライバによって維持されています。この構造体群は、カーネル内のデータをユーザープログラムに提供する機構を提供します。この機構を利用する場合、プログラムはカーネルのメモリーを読んだり、スーパーユーザー権限を持つ必要はありません。詳細は、kstat(1M) または kstat(3KSTAT) のマニュアルページを参照してください。


注 –

unix モジュールの kstat データ構造体 を system_pages という名前で使用しても、cachefree の統計情報は得られません。cachefree は Solaris 9 リリースからサポートされなくなりました。