On Mon, Feb 1, 2016 at 3:48 PM, J. Bruce Fields <bfields@xxxxxxxxxxxx> wrote: > > On Mon, Feb 01, 2016 at 12:21:04PM -0500, Trond Myklebust wrote: > > The following patchset is intended as an RFC to demonstrate how we could > > implement multipathing in NFS. > > It adds basic support for attaching multiple RPC transports to a client, > > an embryonic policy mechanism for switching tasks across those transports > > (with a round-robin policy implementation), as well as helpers to allow > > iteration of tasks across all tranports (for instance in order to > > support NFSv4.1's BIND_CONN_TO_SESSION). > > > > A lot of polish and finishing touches are missing. For instance, I have yet > > to add support in debugfs for these transports, and there is no support > > for mounting with NFSv4.1 session trunking. However there is a demonstrator > > that implements pNFS multipathing over NFSv3. Adding support for NFSv4.1 > > requires that you call EXCHANGE_ID to allow verification of the > > major/minor server and scopeid fields, which should not be too hard. > > > > More to come, but in the meantime, comments are welcome... > > Since your prototype is doing round-robin per task, I assume the > motivating problem is that you don't want to waste bandwidth when > there's multiple links available. Is that right, or is there some other > goal you have in mind? > I did round-robin simply because it is easy to do, and because server vendors have been asking for it. That said, the policy is readily pluggable, and it should be straightforward to add path failover, should you want to. > > > > -------------- > > v2 & v3: Fix up kbuild warnings > > > > Trond Myklebust (13): > > SUNRPC: Remove unused function rpc_task_reset_client > > SUNRPC: Reorder rpc_task to put waitqueue related info in same > > cachelines > > SUNRPC: Uninline xprt_get(); It isn't performance critical. > > SUNRPC: Make freeing of struct xprt rcu-safe > > SUNRPC: Add a structure to track multiple transports > > SUNRPC: Make rpc_clnt store the multipath iterators > > SUNRPC: Use the multipath iterator to assign a transport to each task > > SUNRPC: Allow caller to specify the transport to use > > SUNRPC: Add a helper to apply a function to all the rpc_clnt's > > transports > > SUNRPC: Make NFS swap work with multipath > > NFSv4.1: nfs4_proc_bind_conn_to_session must iterate over all > > connections > > SUNRPC: Allow addition of new transports to a struct rpc_clnt > > pnfs/NFSv4.1: Add multipath capabilities to pNFS flexfiles servers > > over NFSv3 > > > > fs/nfs/nfs4proc.c | 51 +++- > > fs/nfs/pnfs_nfs.c | 16 +- > > include/linux/sunrpc/clnt.h | 18 +- > > include/linux/sunrpc/sched.h | 32 +-- > > include/linux/sunrpc/xprt.h | 22 +- > > include/linux/sunrpc/xprtmultipath.h | 69 +++++ > > net/sunrpc/Makefile | 3 +- > > net/sunrpc/auth_gss/auth_gss.c | 4 +- > > net/sunrpc/clnt.c | 326 ++++++++++++++++++------ > > net/sunrpc/rpcb_clnt.c | 10 +- > > net/sunrpc/sched.c | 2 + > > net/sunrpc/xprt.c | 42 ++-- > > net/sunrpc/xprtmultipath.c | 473 +++++++++++++++++++++++++++++++++++ > > net/sunrpc/xprtsock.c | 4 +- > > 14 files changed, 938 insertions(+), 134 deletions(-) > > create mode 100644 include/linux/sunrpc/xprtmultipath.h > > create mode 100644 net/sunrpc/xprtmultipath.c > > > > -- > > 2.5.0 > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html