cvs commit: src/sys/nfsserver nfsrvcache.h
rwatson at FreeBSD.org
Tue Apr 25 08:48:02 UTC 2006
On Mon, 24 Apr 2006, Sam Leffler wrote:
>>>> sys/nfsserver nfsrvcache.h Log:
>>>> Bump up the NFS server dupreq cache limit to 2K (from 64). With a small
>>>> duplicate request cache, under heavy load a lot of non-idempotent
>>>> were getting served again, resulting in errors.
>>> How does increasing the cache size fix this problem?
>> Fundamentally it doesn't, this change just pushes it out of the regime
>> where it's trivial to overflow.
> Why is it hard to do a real fix? Or is this a temporary bandaid?
It's really a problem with NFS over unreliable transports. You can get a
variety of re-ordering, drop, duplicate delivery, etc, effects, which the RPC
code has to try and handle as the transport doesn't. RPC over UDP doesn't
have an ACK for replies, it simply has request retransmit, so the server has
no way to know when a reply has been received, so it has to hold onto it.
The reason for the idempotent/non-idempotent concern is that for idempotent
operations, it doesn't matter if you execute them twice (by definition).
However, some requests aren't idempotent -- rename, for example, won't behave
the same way twice, so if you want to not return ENOENT for a retransmit of
the request, you have to keep around the reply for a bit. Unpretty, but it's
not clear what else you can do.
Robert N M Watson
More information about the cvs-src