メモリダイエット

メモリのチューニングができないかなーとカーネルのソースを見ている。。
avtabのサイズ削減は、今日提案した。
カーネルへの変更は一行(^^;

allowルール一つで、どれだけ食う?

allowのルールが入っているハッシュテーブル
struct avtab te_avtab;

avtabの定義

struct avtab {
struct avtab_node **htable;
u32 nel; /* number of elements */
};

ハッシュの要素はavtab_node

struct avtab_node {
struct avtab_key key;
struct avtab_datum datum;
struct avtab_node *next;
};

これが、allowルールを格納か。

こいつらの中身は

●avtab_key
struct avtab_key {
u16 source_type; /* source type */
u16 target_type; /* target type */
u16 target_class; /* target object class */
#define AVTAB_ALLOWED 1
#define AVTAB_AUDITALLOW 2
#define AVTAB_AUDITDENY 4
#define AVTAB_AV (AVTAB_ALLOWED | AVTAB_AUDITALLOW | AVTAB_AUDITDENY)
#define AVTAB_TRANSITION 16
#define AVTAB_MEMBER 32
#define AVTAB_CHANGE 64
#define AVTAB_TYPE (AVTAB_TRANSITION | AVTAB_MEMBER | AVTAB_CHANGE)
#define AVTAB_ENABLED_OLD 0x80000000 /* reserved for used in cond_avtab */
#define AVTAB_ENABLED 0x8000 /* reserved for used in cond_avtab */
u16 specified; /* what field is specified */
};

domain,type,object class,ルール種別(allow,auditallowなど)を格納
64bit-> 8byte

●avtab_datum
struct avtab_datum {
u32 data; /* access vector or type value */
};

許可されるアクセスを格納
4byte

ってことは、
struct avtab_nodeのサイズは、、
struct avtab_key key; → 8 byte
struct avtab_datum datum; → 4byte
struct avtab_node *next; → 4byte

16byte

ってことは、10000のallow文を書くと
16 * 10k = 160kのメモリを食う??
あれ?実測の半分近い。。
conditionalなルールだと、
ハッシュ以外にも、リスト構造も作られるので、倍くらい食いそう。