From: Jeff Layton <jlayton@redhat.com>
To: bfields@fieldses.org
Cc: chuck.lever@oracle.com, linux-nfs@vger.kernel.org
Subject: [PATCH v2 5/5] nfsd: keep stats on worst hash balancing seen so far
Date: Mon, 4 Mar 2013 13:56:40 -0500 [thread overview]
Message-ID: <1362423400-24380-6-git-send-email-jlayton@redhat.com> (raw)
In-Reply-To: <1362423400-24380-1-git-send-email-jlayton@redhat.com>
The typical case with the DRC is a cache miss, so if we keep track of
the max number of entries that we've ever walked over in a search, then
we should have a reasonable estimate of the longest hash chain that
we've ever seen.
With that, we'll also keep track of the total size of the cache when we
see the longest chain. In the case of a tie, we prefer to track the
smallest total cache size in order to properly gauge the worst-case
ratio of max vs. avg chain length.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
---
fs/nfsd/nfscache.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c
index 7640e80..3af1767 100644
--- a/fs/nfsd/nfscache.c
+++ b/fs/nfsd/nfscache.c
@@ -50,6 +50,12 @@ static u64 num_searches;
/* longest time we spent doing a single search */
static s64 max_search_time;
+/* longest hash chain seen */
+static unsigned int longest_chain;
+
+/* size of cache when we saw the longest hash chain */
+static unsigned int longest_chain_cachesize;
+
/*
* Calculate the hash index from an XID.
*/
@@ -330,11 +336,13 @@ nfsd_cache_search(struct svc_rqst *rqstp, __wsum csum)
struct svc_cacherep *rp, *ret = NULL;
struct hlist_head *rh;
ktime_t start;
+ unsigned int entries = 0;
s64 delta;
start = ktime_get();
rh = &cache_hash[request_hash(rqstp->rq_xid)];
hlist_for_each_entry(rp, rh, c_hash) {
+ ++entries;
if (nfsd_cache_match(rqstp, csum, rp)) {
ret = rp;
break;
@@ -343,6 +351,17 @@ nfsd_cache_search(struct svc_rqst *rqstp, __wsum csum)
delta = ktime_to_ns(ktime_sub(ktime_get(), start));
time_in_search += delta;
max_search_time = max(max_search_time, delta);
+
+ /* tally hash chain length stats */
+ if (entries >= longest_chain) {
+ longest_chain = entries;
+ if (!longest_chain_cachesize)
+ longest_chain_cachesize = num_drc_entries;
+ else
+ longest_chain_cachesize = min(longest_chain_cachesize,
+ num_drc_entries);
+ }
+
++num_searches;
return ret;
@@ -603,6 +622,8 @@ static int nfsd_reply_cache_stats_show(struct seq_file *m, void *v)
seq_printf(m, "payload misses: %u\n", payload_misses);
seq_printf(m, "avg search time: %lldns\n", avg_search_time());
seq_printf(m, "max search time: %lldns\n", max_search_time);
+ seq_printf(m, "longest chain len: %u\n", longest_chain);
+ seq_printf(m, "cachesize at longest: %u\n", longest_chain_cachesize);
spin_unlock(&cache_lock);
return 0;
}
--
1.7.11.7
next prev parent reply other threads:[~2013-03-04 18:56 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-04 18:56 [PATCH v2 0/5] nfsd: add a reply_cache_stats file to nfsd for tracking DRC performance Jeff Layton
2013-03-04 18:56 ` [PATCH v2 1/5] nfsd: break out comparator into separate function Jeff Layton
2013-03-04 18:56 ` [PATCH v2 2/5] nfsd: track memory utilization in the DRC Jeff Layton
2013-03-04 18:56 ` [PATCH v2 3/5] nfsd: add new reply_cache_stats file in nfsdfs Jeff Layton
2013-03-04 18:56 ` [PATCH v2 4/5] nfsd: keep track of the max and average time to search the cache Jeff Layton
2013-03-04 18:56 ` Jeff Layton [this message]
2013-03-05 22:20 ` [PATCH v2 0/5] nfsd: add a reply_cache_stats file to nfsd for tracking DRC performance J. Bruce Fields
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=1362423400-24380-6-git-send-email-jlayton@redhat.com \
--to=jlayton@redhat.com \
--cc=bfields@fieldses.org \
--cc=chuck.lever@oracle.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;
as well as URLs for NNTP newsgroup(s).