svn commit: r188833 - in head/sys: kern nfsclient sys
John Baldwin
jhb at freebsd.org
Thu Feb 19 14:45:17 PST 2009
On Thursday 19 February 2009 5:28:49 pm John Baldwin wrote:
> Author: jhb
> Date: Thu Feb 19 22:28:48 2009
> New Revision: 188833
> URL: http://svn.freebsd.org/changeset/base/188833
>
> Log:
> Enable caching of negative pathname lookups in the NFS client. To avoid
> stale entries, we save a copy of the directory's modification time when
> the first negative cache entry was added in the directory's NFS node.
> When a negative cache entry is hit during a pathname lookup, the parent
> directory's modification time is checked. If it has changed, all of the
> negative cache entries for that parent are purged and the lookup falls
> back to using the RPC. This required adding a new cache_purge_negative()
> method to the name cache to purge only negative cache entries for a given
> directory.
>
> Submitted by: mohans, Rick Macklem, Ricardo Labiaga @ NetApp
> Reviewed by: mohans
Together with the previous two changes I measured a 30% drop in the number of
RPCs for a kernel build (no modules):
x nfs.old
+ nfs.new
+------------------------------------------------------------------------------+
| + x |
| + x |
| + x |
| + x |
| + x |
| + x |
| + x |
| + x |
| + x |
| + x |
| + x |
| + xx|
| + xx|
| + xx|
|++ xx|
|++ xx|
|+++ xx|
|+++ xx|
|+++ xx|
|+++ xxx|
| A A||
+------------------------------------------------------------------------------+
N Min Max Median Avg Stddev
x 30 250515 252053 251393 251352.13 362.86492
+ 30 173990 175930 175117 175011.87 474.44092
Difference at 95.0% confidence
-76340.3 +/- 218.321
-30.3718% +/- 0.0868584%
(Student's t, pooled s = 422.354)
The majority of the drop was in the number of LOOKUP RPCs performed:
x nfs.old
+ nfs.new
+------------------------------------------------------------------------------+
| + x |
| + x |
| + x |
| + x |
| + x |
| + x |
| + x |
| + x |
| + x |
| + x |
| + x |
| + xx|
| + xx|
| + xx|
| + xx|
|+++ xx|
|+++ xx|
|+++ xx|
|+++ xx|
|+++ xxx|
| A| A||
+------------------------------------------------------------------------------+
N Min Max Median Avg Stddev
x 30 116997 118613 117898 117887.47 372.34733
+ 30 40791 42782 41975 41846.5 481.79805
Difference at 95.0% confidence
-76041 +/- 222.565
-64.503% +/- 0.188794%
(Student's t, pooled s = 430.565)
The old client performed 0 GETATTR RPC calls during the test. The new client
performs a mix of GETATTR and ACCESS calls. One of the worries was that the
client might now perform more RPC calls due to not priming the access cache,
but this is not true in this test. This next histogram is for combined totals
of ACCESS and GETATTR calls:
x nfs.attr.old
+ nfs.attr.new
+------------------------------------------------------------------------------+
| + + x x |
| + + + + + x xxx xx |
| +++++++++ + x x xxx xx |
|+ ++++++++++ + + xxxx xxxxxxxxxx|
||_______M_A________| |__MA__| |
+------------------------------------------------------------------------------+
N Min Max Median Avg Stddev
x 30 90823 90898 90858 90859.633 19.496212
+ 30 90494 90792 90537 90543.467 50.121737
Difference at 95.0% confidence
-316.167 +/- 19.6573
-0.347973% +/- 0.0216348%
(Student's t, pooled s = 38.0282)
With the new client, of the ~90k ACCESS + GETATTR calls are now split into
approximately 94% GETATTR and 6% ACCESS versus 0% GETATTR and 100% ACCESS.
All of these changes are more the product of other folks who deserve the credit
moreso than myself.
--
John Baldwin
More information about the svn-src-head
mailing list