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

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 エラーを返す場合、またはソフトウェアベンダーが推奨する場合

コミットレベル

変更の可能性あり