cvs commit: src/sys/nfsserver nfsrvcache.h

Robert Watson 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 
>>>> requests
>>>>  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 mailing list