From: Miquel van Smoorenburg <mikevs@xs4all.net>
To: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: linux-nfs@vger.kernel.org
Subject: [PATCH 03/03] sunrpc: scale hashtable cache size with memory
Date: Sun, 22 Aug 2010 20:31:49 +0200 [thread overview]
Message-ID: <20100822183149.GC26607@xs4all.net> (raw)
In-Reply-To: <20100822182848.GA26590@xs4all.net>
Set the number of entries of the authcache to 4096 on servers
with 4G of memory or more. Because kmallocing more than a few K
is frowned upon, change the allocator from kmalloc to __get_free_pages.
Since the minimum allocation size of __get_free_pages is 1 page,
set the number of entries in the authcache to PAGE_SIZE / (entry_size)
on servers with < 4G of memory so that exactly one page is used.
Signed-off-by: Miquel van Smoorenburg <mikevs@xs4all.net>
diff -ruN linux-2.6.36-rc1.orig/net/sunrpc/auth.c linux-2.6.36-rc1/net/sunrpc/auth.c
--- linux-2.6.36-rc1.orig/net/sunrpc/auth.c 2010-08-16 02:41:37.000000000 +0200
+++ linux-2.6.36-rc1/net/sunrpc/auth.c 2010-08-22 17:02:27.896009116 +0200
@@ -19,14 +19,15 @@
# define RPCDBG_FACILITY RPCDBG_AUTH
#endif
-#define RPC_CREDCACHE_DEFAULT_HASHBITS (4)
+#define RPC_CREDCACHE_LARGE_HASHBITS (12)
struct rpc_cred_cache {
struct hlist_head *hashtable;
unsigned int hashbits;
+ unsigned int order;
spinlock_t lock;
};
-static unsigned int auth_hashbits = RPC_CREDCACHE_DEFAULT_HASHBITS;
+static unsigned int auth_hashbits;
static DEFINE_SPINLOCK(rpc_authflavor_lock);
static const struct rpc_authops *auth_flavors[RPC_AUTH_MAXFLAVOR] = {
@@ -195,14 +196,14 @@
rpcauth_init_credcache(struct rpc_auth *auth)
{
struct rpc_cred_cache *new;
- unsigned int hashsize;
new = kmalloc(sizeof(*new), GFP_KERNEL);
if (!new)
goto out_nocache;
new->hashbits = auth_hashbits;
- hashsize = 1U << new->hashbits;
- new->hashtable = kcalloc(hashsize, sizeof(new->hashtable[0]), GFP_KERNEL);
+ new->order = get_order((1U << new->hashbits) * sizeof(new->hashtable[0]));
+ new->hashtable = (struct hlist_head *)
+ __get_free_pages(GFP_KERNEL|__GFP_ZERO, new->order);
if (!new->hashtable)
goto out_nohashtbl;
spin_lock_init(&new->lock);
@@ -274,7 +275,7 @@
if (cache) {
auth->au_credcache = NULL;
rpcauth_clear_credcache(cache);
- kfree(cache->hashtable);
+ free_pages((unsigned long)cache->hashtable, cache->order);
kfree(cache);
}
}
@@ -642,8 +643,20 @@
int __init rpcauth_init_module(void)
{
+ struct sysinfo si;
+ unsigned long gb;
int err;
+ if (auth_hashbits == 0) {
+ /* auto-size: < 4GB: whatever fits one page, >= 4GB: 12 bits */
+ si_meminfo(&si);
+ gb = (si.totalram - si.totalhigh + 4096) >> (30 - PAGE_SHIFT);
+ if (gb < 4)
+ auth_hashbits = ilog2(PAGE_SIZE / sizeof(struct hlist_head));
+ else
+ auth_hashbits = RPC_CREDCACHE_LARGE_HASHBITS;
+ }
+
err = rpc_init_authunix();
if (err < 0)
goto out1;
next prev parent reply other threads:[~2010-08-22 18:40 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-22 18:28 [PATCH 00/03] sunrpc: a few authentication cache patches Miquel van Smoorenburg
2010-08-22 18:30 ` [PATCH 01/03]: sunrpc: increase MAX_HASHTABLE_BITS to 14 Miquel van Smoorenburg
2010-09-07 19:03 ` Trond Myklebust
2010-08-22 18:31 ` [PATCH 02/03]: sunrpc: make auth_hashtable_size param mode 0444 Miquel van Smoorenburg
2010-09-07 18:58 ` Trond Myklebust
2010-09-07 19:24 ` Miquel van Smoorenburg
2010-08-22 18:31 ` Miquel van Smoorenburg [this message]
2010-09-07 19:02 ` [PATCH 03/03] sunrpc: scale hashtable cache size with memory Trond Myklebust
2010-09-07 19:52 ` Miquel van Smoorenburg
2010-09-07 20:32 ` Trond Myklebust
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100822183149.GC26607@xs4all.net \
--to=mikevs@xs4all.net \
--cc=Trond.Myklebust@netapp.com \
--cc=linux-nfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox