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

kmem_flags

備考欄

Solaris カーネルメモリーアロケータには、デバッグとテストのための各種オプションがあり、Solaris OS の内部開発サイクルを通じて、これらの機能が盛んに利用されました。Solaris 2.5 リリース以降、このようなオプションのサブセットが利用できるようになりました。これらは kmem_flags 変数によって制御されていましたが、この変数はカーネルデバッガで設定され、その後システムをリブートしていました。カーネルメモリーアロケータのインスタンス化と /etc/system ファイルの解析のタイミングの問題のため、これらのフラグは Solaris 8 より前のリリースでは /etc/system ファイルに設定できませんでした。

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

フラグ 

設定 

説明 

AUDIT

0x1

アロケータは、自身の活動の最近の履歴が入ったログを維持します。ログされる項目の数は、CONTENTS も設定されているかどうかによって異なります。このログは固定の大きさです。領域を使い果たすと、古い記録から再利用されます。

TEST

0x2

アロケータは解放されたメモリーにパターンを書き込み、そのバッファーを次に割り当てるときに、そのパターンが変更されていないことをチェックします。バッファーの一部が変更されている場合は、そのバッファーを前に割り当て、解放したクライアントがそのメモリーを使用した可能性が強いことを意味します。上書きが検知されると、システムがパニックになります。 

REDZONE

0x4

アロケータは要求されたバッファーの終りに余分のメモリーを割り当て、そのメモリーに特殊なパターンを挿入します。そして、バッファーが解放されたら、パターンをチェックして、データがバッファーの終りより後ろに書き込まれていないか調べます。上書きが検知されると、カーネルがパニックになります。 

CONTENTS

0x8

アロケータは、バッファーが解放されると、バッファーの内容を 256 バイトまでログします。このフラグを使用するには、AUDIT も設定する必要があります。

これらのフラグの数値は、論理和をとることができ、Solaris 8 リリースでは /etc/system ファイルで設定し、それより前のリリースでは kadb をブートして、カーネルを起動する前にこれらのフラグを設定します。

LITE

0x100

バッファーを割り当てたり解放したりするときに、最小限の整合性検査を行います。このフラグが有効になっていると、アロケータは、レッドゾーンが書き込まれていないことや、解放されたバッファーが再び解放されていないこと、解放されるバッファーのサイズが割り当てられたものと同じであることをチェックします。このフラグは、Solaris 7 3/99 リリースから使用できるようになりました。このフラグは他のフラグと併用しないでください。 

データ型

符号付き整数

デフォルト

0 (無効)

範囲

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

動的か

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

検査

なし

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

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

コミットレベル

変更の可能性あり