Go to main content
Oracle® Solaris 11.3 カーネルのチューンアップ・リファレンスマニュアル

印刷ビューの終了

更新: 2016 年 11 月
 
 

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

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

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

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

kmem_flags

説明

Oracle Solaris カーネルメモリーアロケータには、さまざまなデバッグオプションおよびテストオプションがあります。

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

フラグ
設定
説明
AUDIT
0x1
アロケータは、自身の活動の最近の履歴が入ったログを維持します。ログされる項目の数は、CONTENTS も設定されているかどうかによって異なります。このログは固定の大きさです。領域を使い果たすと、古い記録から再利用されます。
TEST
0x2
アロケータは解放されたメモリーにパターンを書き込み、そのバッファーを次に割り当てるときに、そのパターンが変更されていないことをチェックします。バッファーの一部が変更されている場合は、そのバッファーを前に割り当て、解放したクライアントがそのメモリーを使用した可能性が強いことを意味します。上書きが検知されると、システムがパニックになります。
REDZONE
0x4
アロケータは要求されたバッファーの終りに余分のメモリーを割り当て、そのメモリーに特殊なパターンを挿入します。そして、バッファーが解放されたら、パターンをチェックして、データがバッファーの終りより後ろに書き込まれていないか調べます。上書きが検知されると、カーネルがパニックになります。
CONTENTS
0x8
アロケータは、バッファーが解放されると、バッファーの内容を 256 バイトまでログします。このフラグを使用するには、AUDIT も設定する必要があります。
これらのフラグの数値は、論理的に合算し、/etc/system ファイルによって設定できます。
LITE
0x100
バッファーを割り当てたり解放したりするときに、最小限の整合性検査を行います。このフラグが有効になっていると、アロケータは、レッドゾーンが書き込まれていないことや、解放されたバッファーが再び解放されていないこと、解放されるバッファーのサイズが割り当てられたものと同じであることをチェックします。このフラグは他のフラグと併用しないでください。
データ型

符号付き整数

デフォルト

0 (無効)

範囲

0 (無効)、1 - 15、256 (0x100)

動的か

はい。実行時の変更は、新しいカーネルメモリーキャッシュだけに有効です。システムの初期設定後に新しいキャッシュを作成することはまれです。

検証

なし

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

メモリーの損傷が疑われる場合

コミットレベル

変更の可能性あり

kmem_stackinfo

説明

カーネルスレッドの作成時に、/etc/system ファイルの kmem_stackinfo 変数が有効になっている場合、カーネルスレッドスタックが、0 ではなく、特定のパターンで埋められます。カーネルスレッドの実行時に、このカーネルスレッドスタックのパターンが徐々に上書きされます。パターンが見つからなくなるまで、スタックの最上部から単純にカウントすることで、カーネルスレッドで使用される最大のカーネルスタック空間である高位境界値が得られます。このメカニズムにより、次の機能が可能になります。

  • システムの現在のカーネルスレッドで実際に使用されたカーネルスレッドスタックの割合 (高位境界値) を計算します。

  • カーネルスレッドが終了すると、システムは、ほとんどのカーネルスレッドスタックを使用した最後のカーネルスレッドを、終了前に、小さい循環メモリーバッファーに記録します。

データ型

符号なし整数

デフォルト

0 (無効)

範囲

0 (無効)、1 (有効)

動的か

はい

検証

なし

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

カーネルスレッドスタックの使用状況をモニターする場合。kmem_stackinfo を有効にしていると、カーネルスレッドの作成と削除のパフォーマンスが低下することに注意してください。詳細は、Oracle Solaris モジューラデバッガガイドを参照してください。

ゾーン構成

このパラメータは、大域ゾーン内に設定する必要があります。

コミットレベル

変更の可能性あり