Re: Concerns about SO_REUSEPORT usage in NFS client

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Trond (or anyone),
 did you get a chance to look at this?
 It really seems that the SO_REUSEPORT solution has problems.

Thanks,
NeilBrown

On Thu, Dec 17 2015, NeilBrown wrote:

> Hi Trond et al.
>
> I have concerns about the new use of SO_REUSEPORT in the NFS client.
> Partly this is a theoretical concern.  The documentation in socket(7)
> talks about using this flag on UDP sockets and on TCP sockets in LISTEN
> mode, but not about using it with connected TCP sockets.  So the NFS
> usage isn't covered by the documentation ... maybe fixing the
> documentation would relieve that concern.
>
> But there is also a practical concern: it seems to sometime cause
> failures.
> This is reported here:
>     https://bugzilla.suse.com/show_bug.cgi?id=959216
>
> I cannot reproduce exactly the same symptoms as described there but I
> can get close. I:
>   - establish an NFSv3 mount to a server
>   - determine the port number used on the client side
>   - write numbers to /proc/sys/sunrpc/{min,max}_resvport which bracket
>     that port number in a range of 10 or so
>   - try to establish NFSv4 mounts in a loop (unmounting each time)
>
> Then the mount will sometimes hang.
> While it is hanging mount.nfs might be in permanently runnable and
> "cat /proc/`pidof mount.nfs`/stack" can show:
>
> [<ffffffff81001012>] ___preempt_schedule+0x12/0x14
> [<ffffffffffffffff>] 0xffffffffffffffff
>
>
> I've also sometime seen the stack trace mentioned in the bugzilla
>
> [<ffffffffa030b469>] xprt_connect+0x119/0x170 [sunrpc]
> [<ffffffffa0308c06>] call_connect+0x56/0xb0 [sunrpc]
> [<ffffffffa0312212>] __rpc_execute+0x82/0x450 [sunrpc]
> [<ffffffffa0314fda>] rpc_execute+0x5a/0xb0 [sunrpc]
> ....
>
> I typically see a 3 minute timeout before the mount fails with
>   mount.nfs: Connection timed out
>
> My guess is that SO_REUSEPORT can allow the NFSv4 mount to use the same
> connection that the NFSv3 mount is using, though over a different socket.
> NFSv4 sends a request, the reply is received by the NFSv3 client's socket
> which rejects it and the NFSv4 client keeps waiting.
>
> I think that we can only continue to use SO_REUSEPORT if we find a way
> to ensure that we don't re-use a currently active connection.
>
> NeilBrown

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux