[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20070627193613.746dfbf3.akpm@linux-foundation.org>
Date: Wed, 27 Jun 2007 19:36:13 -0700
From: Andrew Morton <akpm@...ux-foundation.org>
To: "J. Bruce Fields" <bfields@...ldses.org>
Cc: NeilBrown <neilb@...e.de>, nfs@...ts.sourceforge.net,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 007 of 8] knfsd: nfsd4: vary maximum delegation limit
based on RAM size
On Wed, 27 Jun 2007 22:15:52 -0400 "J. Bruce Fields" <bfields@...ldses.org> wrote:
> + /*
> + * Allow at most 4 delegations per megabyte of RAM. Quick
> + * estimates suggest that in the worst case (where every delegation
> + * is for a different inode), a delegation could take about 1.5K,
> + * giving a worst case usage of about 6% of memory.
> + */
> sys.totalram >>= (18 - PAGE_SHIFT);
6% of 32GB is 2GB is too much for a large highmem machine. We should base
this on the amount of kernel-addressable memory (aka lowmem).
How's this?
static void
set_max_delegations(void)
{
/*
* Allow at most 4 delegations per megabyte of RAM. Quick
* estimates suggest that in the worst case (where every delegation
* is for a different inode), a delegation could take about 1.5K,
* giving a worst case usage of about 6% of memory.
*/
max_delegations = nr_free_buffer_pages() >> (20 - 2 - PAGE_SHIFT);
}
fs/nfsd/nfs4state.c | 7 ++-----
mm/page_alloc.c | 1 +
diff -puN fs/nfsd/nfs4state.c~knfsd-nfsd4-vary-maximum-delegation-limit-based-on-ram-size-fix-fix-fix-fix fs/nfsd/nfs4state.c
--- a/fs/nfsd/nfs4state.c~knfsd-nfsd4-vary-maximum-delegation-limit-based-on-ram-size-fix-fix-fix-fix
+++ a/fs/nfsd/nfs4state.c
@@ -49,6 +49,7 @@
#include <linux/nfsd/state.h>
#include <linux/nfsd/xdr4.h>
#include <linux/namei.h>
+#include <linux/swap.h>
#include <linux/mutex.h>
#include <linux/lockd/bind.h>
#include <linux/module.h>
@@ -3210,17 +3211,13 @@ get_nfs4_grace_period(void)
static void
set_max_delegations(void)
{
- struct sysinfo sys;
-
- si_meminfo(&sys);
/*
* Allow at most 4 delegations per megabyte of RAM. Quick
* estimates suggest that in the worst case (where every delegation
* is for a different inode), a delegation could take about 1.5K,
* giving a worst case usage of about 6% of memory.
*/
- sys.totalram >>= (18 - PAGE_SHIFT);
- max_delegations = (unsigned int) sys.totalram;
+ max_delegations = nr_free_buffer_pages() >> (20 - 2 - PAGE_SHIFT);
}
/* initialization to perform when the nfsd service is started: */
diff -puN mm/page_alloc.c~knfsd-nfsd4-vary-maximum-delegation-limit-based-on-ram-size-fix-fix-fix-fix mm/page_alloc.c
--- a/mm/page_alloc.c~knfsd-nfsd4-vary-maximum-delegation-limit-based-on-ram-size-fix-fix-fix-fix
+++ a/mm/page_alloc.c
@@ -1729,6 +1729,7 @@ unsigned int nr_free_buffer_pages(void)
{
return nr_free_zone_pages(gfp_zone(GFP_USER));
}
+EXPORT_SYMBOL_GPL(nr_free_buffer_pages);
/*
* Amount of free RAM allocatable within all zones
_
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists