ディレクトリ名検索キャッシュ(DNLC)とUFSメモリiノードの設定について


参考文献では、ufs_ninodeの最大値はMAXINT(2ギガバイト)となっています。カーネルチューニングパラメタ ncsizeも同様です。一般のチューニングはncsizeに値を設定すると、ufs_ninodeに反映されます。ここで、大きな値をncsizeに指定すると、次のNOTICEがコンソールに表示されます。

ufs: [ID 802296 kern.notice] NOTICE: setting ufs_ninode to max value of 513978

メッセージ末尾の値、513978はufs_inode_maxと呼ばれるカーネル変数です。

これは、UFSドライバの初期化時、次のようなロジックで利用可能メモリサイズを検査しているために表示されるものです。

UFSドライバのiノード処理ルーチン(ufs_inode.c)
ufsinit関数
条件1:ufs_ninodeが0、または0以下の場合
     ufs_ninodeにncsizeをセット
条件2:ufs_inode_maxが0の場合
     ufs_inode_max=inodeの最大数=kmem_maxavailの1/4をinode構造体のサイズで割る
条件3:ufs_ninodeがufs_inode_maxを上回る、またはufs_ninodeとncsizeが共に0の場合
     ufs: [ID 802296 kern.notice] NOTICE: setting ufs_ninode to max value of 513978
     を表示(513978はその時のufs_inode_max)
     ufs_ninodeにufs_inode_maxをセット

図1.UFSドライバのiノード設定

ufsinit関数からコールされるkmem_maxavail関数はその時点の利用可能ページを返してくれます。

カーネルメモリマネージャ(kmem.c)
kmem_maxavail関数:呼び出された時点の利用可能ページ数を返す関数
条件1:availrmemがtune.t_minarmemより大きいか?
     YES:max_phys(物理メモリの最大値)に、availrmemからtune.t_minarmemを引いた値をセット
     NO:max_physにゼロをセット
max_virtに仮想メモリの最大値をセット
pages_availにmax_physかmax_virtのいずれか小さい方をセット
pages_availをページ値に変換した値でリターン

図2.利用可能ページ数の獲得

iノード構造体1個のサイズは336バイトです。

ncsizeは、それに指定した値がセットされます。ufs_ninodeは、UFSドライバ初期化時の利用可能メモリの1/4に制限されます。

ufs_ninodeを大きな値にセットしたい場合は次のset命令で可能です。過大な値を設定するとメモリ不足になることがありますのでご注意下さい

set ncsize=655360
set ufs_inode_max=655360
set ufs_ninode=655360

図3.iノードとDNLC数の拡張

【参考】tune.t_minarmemの構造体は次のようになっています。

typedef struct tune {
int t_gpgslo; /* If freemem < t_getpgslow, then start */
/* to steal pages from processes. */
int t_pad[7]; /* Padding for driver compatibility. */
int t_fsflushr; /* The rate at which fsflush is run in */
/* seconds. */
int t_minarmem; /* The minimum available resident (not */
/* swappable) memory to maintain in */
/* order to avoid deadlock. In pages. */
int t_minasmem; /* The minimum available swappable */
/* memory to maintain in order to avoid */
/* deadlock. In pages. */
int t_flckrec; /* max number of active frlocks */
} tune_t;

図4.tuneable.h:カーネル調整可能構造体

 

Copyright (C) 2004 by The Art of Computer Technologies, Corp.  All rights reserved.