- 论坛徽章:
- 0
|
参考一下Dentry hashtable的分配:
在内核启动过程中初始化,hash表的具体大小:
1,可以通过内核参数传递见/Documentation/kernel-parameters.txt的dhash_entries= [KNL]项
2,如果不设置默认内核分配(1/16当前ram大小),见:- dentry_hashtable =
- alloc_large_system_hash("Dentry cache",
- sizeof(struct hlist_head),
- dhash_entries,
- 13,
- 0,
- &d_hash_shift,
- &d_hash_mask,
- 0);
- for (loop = 0; loop < (1 << d_hash_shift); loop++)
- INIT_HLIST_HEAD(&dentry_hashtable[loop]);
复制代码 ,其中alloc_large_system_hash为内核在初始化阶段(alloc_bootmem_nopanic)分配hash表的典型方法,这个方法中,dhash_entries如果设置则为设置大小(2的pow),否则内核根据scale(第四个参数13,表示没2^13bytes有一个hash bucket),以及最后一个参数(limit,0表示1/16ram,根据scale设置的大小不超过limit的值)。D_hash_shift为返回的创建的hash包含元素的个数,利用最后一个for循环初始化。 |
|