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

bufhwm

説明

入出力バッファのキャッシュに使用するメモリー量の最大値。バッファは、ファイルシステムのメタデータ (スーパーブロック、i ノード、間接ブロック、ディレクトリ) の書き込みに使用されます。バッファは、その量が bufhwm に達するまで必要に応じて割り当てられます。bufhwm に達すると、バッファを再利用して要求を満たします。

歴史的経緯により、このパラメータには必要ありません、ufs: 接頭辞。

データ型

符号付き整数

デフォルト

物理メモリーの 2%

範囲

80K バイトから物理メモリーの 20%

単位

K バイト

動的か

いいえ。この値は、ハッシュバケットサイズの計算に使用された後、データ構造体に格納されます。このデータ構造体は、バッファの割り当てや解放に応じて、そのフィールドの値を調整します。動作しているシステムのロック手順に従わずにこの値を調整すると、正しくない動作を招くおそれがあります。

検査

bufhwm が 80K バイトより小さいか、bufhwm が、物理メモリーの 20% もしくは現在のカーネルヒープ値の 2 倍のうち小さい方より大きい場合、bufhwm は、物理メモリーの 20% か現在のカーネルヒープ値の 2 倍のうち小さい方にリセットされます。その場合は、次のメッセージがシステムコンソールと /var/adm/messages ファイルに出力されます。

binit: bufhwm out of range (value attempted). Using N.

value attempted」は、/etc/system で指定された値か kadb -d の使用による値を表します。「N」は、使用可能なシステムメモリーに基づいてシステムが計算した値です。

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

バッファは必要が生じた時にのみ割り当てられるため、デフォルト設定によるオーバーヘッドは、考えられる最大のバッファ数を処理するために必要になる制御構造体が割り当てられることです。これらの構造体は、32 ビットカーネルでは想定されるバッファ当たり 52 バイト、64 ビットカーネルでは想定されるバッファ当たり 104 バイトを消費します。512M バイトの 64 ビットカーネルでは、この構造体は 104*10144 バイト (約 1M バイト) を消費します。ヘッダーの割り当てでは、バッファサイズは 1K バイトであると想定します。ただし、ほとんどの場合、バッファサイズはこれより大きいのが普通です。

バッファプール内でまだ割り当てられていないメモリー量を知るには、カーネルデバッガを使用して、カーネルの bfreelist 構造体を調べます。この構造体の bufsize フィールドが、残っている可能性があるメモリーのバイト数です。mdb を使用して buf マクロでこのフィールドを表示するには、次のようにします。


# mdb -k
Loading modules: [ unix krtld genunix ip nfs ipc ]
> bfreelist$<buf
bfreelist:
[ 省略 ]
bfreelist + 0x78:	bufsize			[ 省略 ]
				 	      75734016

6G バイトのメモリーを持つこのシステムの bufhwm は 122277 です。要求される実際のバッファサイズは一般に 1K バイトより大きいため、使用されるヘッダー構造体の数を直接知ることはできません。ただし、一部の領域は、このシステムに割り当てられた制御構造体からうまく回収されることがあります。

512M バイトシステム上でこの構造体が、10144K バイトのうち 4K バイトだけがまだ割り当てられていないことを示したとします。また、kstat -n biostatsbiostatskstat を調べると、このシステムでは、buffer_cache_hitsbuffer_cache_lookups の割合も適切であることが分かったとします。これらの情報は、このシステムのデフォルト設定であることを示します。

コミットレベル

変更の可能性あり