All of lore.kernel.org
 help / color / mirror / Atom feed
From: "J. Bruce Fields" <bfields@fieldses.org>
To: NeilBrown <neilb@suse.de>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH 0/9] Cache deferal improvements - try++
Date: Wed, 3 Feb 2010 14:43:53 -0500	[thread overview]
Message-ID: <20100203194353.GD13336@fieldses.org> (raw)
In-Reply-To: <20100203060657.12945.27293.stgit-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>

On Wed, Feb 03, 2010 at 05:31:30PM +1100, NeilBrown wrote:
> Thanks to Bruce challenging me to justify the complexity of my
> previous version of this I have managed to simplify it significantly.

And thanks for persisting!  As you know it's also been a worry of mine
that the v4 compound behavior isn't correct with respect to deferrals,
so it will be reassuring to have this sorted out.  Maybe be a day or two
before I get to take a careful look.

--b.

> 
> I have changed the rules for sunrpc_caches so that items that have
> expired get removed at the earliest opportunity even if they are still
> referenced, and in particular so that sunrpc_cache_lookup never
> returns an expired item.
> This means that cache_check doesn't need to check for "expired" any
> more and so only initiates an upcall for items that are not VALID.
> 
> This means that when the upcall is responded to, it will always be
> exactly that item that is updated - never a different item with the
> same key.  So there is no longer any need to repeat the lookup.
> 
> The last 3 patches in this series are simply "cleanups" that I
> happened across while mucking about in the code.  The should have zero
> change in functionality, and if you don't think they are cleanups
> (second last is now questionable), feel free to ignore them.
> 
> I have tested this to ensure that it doesn't completely break things,
> and to ensure that it fixes the problem(*) but I haven't hammered on
> it very hard.
> 
> (*)
> The problem is exhibited by sending a stream of writes to the NFS
> server and then occasionally flushing the export cache (exportfs -f).
> The problem manifests by a write not getting a reply and the client 
> having to retransmit.
> It is 'fixed' if there are no retransmit delays.
> The follow generates the required writes and shows the delays.
> 
> Without the patch I get delays of 60 seconds with TCP and 5 seconds
> with UDP.
> 
> NeilBrown
> 
> /*
>  * write to NFS server and report delays exceeding 1 second.
>  */
> 
> #define _GNU_SOURCE
> 
> #include <sys/time.h>
> #include <stdio.h>
> #include <sys/fcntl.h>
> #include <malloc.h>
> #include <memory.h>
> 
> main(int argc, char *argv[])
> {
> 	int usec;
> 	//int fd = open(argv[1], O_WRONLY|O_DIRECT|O_CREAT, 0666);
> 	//int fd = open(argv[1], O_WRONLY|O_SYNC|O_CREAT, 0666);
> 	int fd = open(argv[1], O_WRONLY|O_CREAT, 0666);
> 	char *buf;
> 	struct timeval tv1, tv2;
> 
> 	posix_memalign(&buf, 4096, 409600);
> 	memset(buf, 0x5a, 409600);
> 
> 	while(1) {
> 		gettimeofday(&tv1, NULL);
> 		write(fd, buf, 409600);
> 		gettimeofday(&tv2, NULL);
> 		usec = (tv2.tv_sec*1000000 + tv2.tv_usec) -
> 			(tv1.tv_sec*1000000 + tv1.tv_usec);
> 		if (usec > 1000000)
> 			printf(" %d\n", usec/1000000);
> 		else
> 			printf(".");
> 		fflush(stdout);
> 	}
> }
> 
> 
> ---
> 
> NeilBrown (9):
>       sunrpc: don't keep expired entries in the auth caches.
>       sunrpc/cache: factor out cache_is_expired
>       sunrpc: never return expired entries in sunrpc_cache_lookup
>       sunrpc/cache: allow threads to block while waiting for cache update.
>       nfsd/idmap: drop special request deferal in favour of improved default.
>       sunrpc: close connection when a request is irretrievably lost.
>       nfsd: factor out hash functions for export caches.
>       svcauth_gss: replace a trivial 'switch' with an 'if'
>       sunrpc/cache: change deferred-request hash table to use hlist.
> 
> 
>  fs/nfsd/export.c                  |   40 ++++++++------
>  fs/nfsd/nfs4idmap.c               |  105 ++++--------------------------------
>  include/linux/sunrpc/cache.h      |    5 +-
>  include/linux/sunrpc/svcauth.h    |   10 ++-
>  net/sunrpc/auth_gss/svcauth_gss.c |   51 ++++++++---------
>  net/sunrpc/cache.c                |  109 ++++++++++++++++++++++++++-----------
>  net/sunrpc/svc.c                  |    3 +
>  net/sunrpc/svc_xprt.c             |   11 ++++
>  net/sunrpc/svcauth_unix.c         |   11 +++-
>  9 files changed, 169 insertions(+), 176 deletions(-)
> 
> 

      parent reply	other threads:[~2010-02-03 19:43 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-03  6:31 [PATCH 0/9] Cache deferal improvements - try++ NeilBrown
     [not found] ` <20100203060657.12945.27293.stgit-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>
2010-02-03  6:31   ` [PATCH 8/9] svcauth_gss: replace a trivial 'switch' with an 'if' NeilBrown
2010-02-03  6:31   ` [PATCH 7/9] nfsd: factor out hash functions for export caches NeilBrown
     [not found]     ` <20100203063131.12945.38791.stgit-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>
2010-03-17 19:35       ` J. Bruce Fields
2010-02-03  6:31   ` [PATCH 9/9] sunrpc/cache: change deferred-request hash table to use hlist NeilBrown
2010-02-03  6:31   ` [PATCH 4/9] sunrpc/cache: allow threads to block while waiting for cache update NeilBrown
2010-04-15 15:55     ` J. Bruce Fields
2010-02-03  6:31   ` [PATCH 2/9] sunrpc/cache: factor out cache_is_expired NeilBrown
     [not found]     ` <20100203063131.12945.65321.stgit-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>
2010-03-15  0:58       ` J. Bruce Fields
2010-02-03  6:31   ` [PATCH 6/9] sunrpc: close connection when a request is irretrievably lost NeilBrown
2010-02-03 15:43     ` Chuck Lever
2010-02-03 21:23       ` Neil Brown
2010-02-03 22:20         ` Trond Myklebust
2010-02-03 22:34           ` J. Bruce Fields
2010-02-03 22:40           ` Chuck Lever
2010-02-03 23:13             ` Trond Myklebust
2010-02-04  0:06               ` Chuck Lever
2010-02-04  0:24                 ` Trond Myklebust
2010-02-03 22:34         ` Chuck Lever
2010-02-03  6:31   ` [PATCH 5/9] nfsd/idmap: drop special request deferal in favour of improved default NeilBrown
2010-02-03  6:31   ` [PATCH 1/9] sunrpc: don't keep expired entries in the auth caches NeilBrown
     [not found]     ` <20100203063130.12945.29226.stgit-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>
2010-03-15  0:58       ` J. Bruce Fields
2010-02-03  6:31   ` [PATCH 3/9] sunrpc: never return expired entries in sunrpc_cache_lookup NeilBrown
     [not found]     ` <20100203063131.12945.97779.stgit-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>
2010-03-17 21:33       ` J. Bruce Fields
2010-03-24  1:22         ` Neil Brown
2010-03-30 15:11           ` J. Bruce Fields
2010-02-03 19:43   ` J. Bruce Fields [this message]

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=20100203194353.GD13336@fieldses.org \
    --to=bfields@fieldses.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=neilb@suse.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.