メモリダイエット
メモリのチューニングができないかなーとカーネルのソースを見ている。。
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なルールだと、
ハッシュ以外にも、リスト構造も作られるので、倍くらい食いそう。