Messages in this thread Patch in this message | | | Date | Tue, 17 Feb 2004 15:24:51 -0800 | From | Andrew Morton <> | Subject | Re: Limit hash table size |
| |
"Chen, Kenneth W" <kenneth.w.chen@intel.com> wrote: > > OK, here is another revision on top of what has been discussed. It adds > 4 boot time parameters so user can override default size as needed to > suite special needs.
You've set the default to 2M entries, with an option for this to be increased via a boot parameter. This means that people whose machines have lots of memory and a sane number of zones may suddenly wonder why their app-which-uses-a-zillion-files is running like crap.
I think it would be better to leave things as they are, with a boot option to scale the tables down. The below patch addresses the inode and dentry caches. Need to think a bit more about the networking ones.
> I will sent a separate patch for > kernel-parameters.txt if everyone is OK with this one.
Yes please.
diff -puN fs/dcache.c~limit-hash-table-sizes-boot-options-restore-defaults fs/dcache.c --- 25/fs/dcache.c~limit-hash-table-sizes-boot-options-restore-defaults Tue Feb 17 15:11:09 2004 +++ 25-akpm/fs/dcache.c Tue Feb 17 15:11:29 2004 @@ -49,7 +49,6 @@ static kmem_cache_t *dentry_cache; */ #define D_HASHBITS d_hash_shift #define D_HASHMASK d_hash_mask -#define D_HASHMAX (2*1024*1024UL) /* max number of entries */ static unsigned int d_hash_mask; static unsigned int d_hash_shift; @@ -1567,12 +1566,11 @@ static void __init dcache_init(unsigned set_shrinker(DEFAULT_SEEKS, shrink_dcache_memory); - if (!dhash_entries) { + if (!dhash_entries) dhash_entries = PAGE_SHIFT < 13 ? mempages >> (13 - PAGE_SHIFT) : mempages << (PAGE_SHIFT - 13); - dhash_entries = min(D_HASHMAX, dhash_entries); - } + dhash_entries *= sizeof(struct hlist_head); for (order = 0; ((1UL << order) << PAGE_SHIFT) < dhash_entries; order++) ; diff -puN fs/inode.c~limit-hash-table-sizes-boot-options-restore-defaults fs/inode.c --- 25/fs/inode.c~limit-hash-table-sizes-boot-options-restore-defaults Tue Feb 17 15:11:09 2004 +++ 25-akpm/fs/inode.c Tue Feb 17 15:11:47 2004 @@ -53,7 +53,6 @@ */ #define I_HASHBITS i_hash_shift #define I_HASHMASK i_hash_mask -#define I_HASHMAX (2*1024*1024UL) /* max number of entries */ static unsigned int i_hash_mask; static unsigned int i_hash_shift; @@ -1336,12 +1335,11 @@ void __init inode_init(unsigned long mem for (i = 0; i < ARRAY_SIZE(i_wait_queue_heads); i++) init_waitqueue_head(&i_wait_queue_heads[i].wqh); - if (!ihash_entries) { + if (!ihash_entries) ihash_entries = PAGE_SHIFT < 14 ? mempages >> (14 - PAGE_SHIFT) : mempages << (PAGE_SHIFT - 14); - ihash_entries = min(I_HASHMAX, ihash_entries); - } + ihash_entries *= sizeof(struct hlist_head); for (order = 0; ((1UL << order) << PAGE_SHIFT) < ihash_entries; order++) ;
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |