Commit b52b3a2b authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] shrink VFS hash sizes on small machines

From: Matt Mackall <mpm@selenic.com>

Base hash sizes on available memory rather than total memory.  An
additional 50% above current used memory is considered reserved for the
purposes of hash sizing to compensate for the hashes themselves and the
remainder of kernel and userspace initialization.
parent a16129b8
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <linux/security.h> #include <linux/security.h>
#include <linux/seqlock.h> #include <linux/seqlock.h>
#include <linux/swap.h>
#define DCACHE_PARANOIA 1 #define DCACHE_PARANOIA 1
/* #define DCACHE_DEBUG 1 */ /* #define DCACHE_DEBUG 1 */
...@@ -1619,13 +1620,21 @@ extern void chrdev_init(void); ...@@ -1619,13 +1620,21 @@ extern void chrdev_init(void);
void __init vfs_caches_init(unsigned long mempages) void __init vfs_caches_init(unsigned long mempages)
{ {
names_cachep = kmem_cache_create("names_cache", unsigned long reserve;
PATH_MAX, 0,
/* Base hash sizes on available memory, with a reserve equal to
150% of current kernel size */
reserve = (mempages - nr_free_pages()) * 3/2;
mempages -= reserve;
names_cachep = kmem_cache_create("names_cache",
PATH_MAX, 0,
SLAB_HWCACHE_ALIGN, NULL, NULL); SLAB_HWCACHE_ALIGN, NULL, NULL);
if (!names_cachep) if (!names_cachep)
panic("Cannot create names SLAB cache"); panic("Cannot create names SLAB cache");
filp_cachep = kmem_cache_create("filp", filp_cachep = kmem_cache_create("filp",
sizeof(struct file), 0, sizeof(struct file), 0,
SLAB_HWCACHE_ALIGN, filp_ctor, filp_dtor); SLAB_HWCACHE_ALIGN, filp_ctor, filp_dtor);
if(!filp_cachep) if(!filp_cachep)
...@@ -1633,7 +1642,7 @@ void __init vfs_caches_init(unsigned long mempages) ...@@ -1633,7 +1642,7 @@ void __init vfs_caches_init(unsigned long mempages)
dcache_init(mempages); dcache_init(mempages);
inode_init(mempages); inode_init(mempages);
files_init(mempages); files_init(mempages);
mnt_init(mempages); mnt_init(mempages);
bdev_cache_init(); bdev_cache_init();
chrdev_init(); chrdev_init();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment