"Re: [PATCH RFC Version 1 0/6] Request for Comment: NFS4.1 Session Trunking"

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

 



----- Original Message -----

> From: andros@xxxxxxxxxx
> To: "trond myklebust" <trond.myklebust@xxxxxxxxxxxxxxx>
> Cc: linux-nfs@xxxxxxxxxxxxxxx, "Andy Adamson" <andros@xxxxxxxxxx>
> Sent: Friday, February 5, 2016 4:08:32 PM
> Subject: [PATCH RFC Version 1 0/6] Request for Comment: NFS4.1 Session Trunking
>
> From: Andy Adamson <andros@xxxxxxxxxx>
>
> This early patch set implements NFSv4.1 session trunking utilizing Tronds
> multipath feature.  This works against an upstream linux server with
> two NICs as the EXCHANGE_ID info is the same for both NICs.
>
> Unmodified code will create a new nfs_client structure for the mount as
> nfs_match_client fails due to the different full server address.
> Tunking is detected by comparing the eir_server_owner.major/minor/scope
> and the eir_server_impl_id to an existing mount. When trunking is detected,
> the 2nd mount point uses the existing  (not new) nfs_client for the new
> mount point.
>
> When trunking is detected, this patch set adds an rpc_xprt for the new server
> address to the exisiting mount, calls BIND_CONN_TO_SESSION, and destroys
> the new clientid (no second mount).
>
> We then get round robin use of the two NICs off one mount point all
> using a single session.
>
>
> Is using mount a good way to setup NFSv4.1 session trunking?
>
> The first two patches fix issues with the multipath code.
>
> SUNRPC: allow rpc_xprt_switch_add_xprt to add xprts on the same net
>     This patch adds a flag to allow multipathing within the origial net.
>     I don't understand why this was not allowed, so I expect a different
>     solution for this issue.
>
>
> Comments please.
>
> Thanks
>
> -->Andy
>
> Andy Adamson (6):
>   SUNRPC fix rpc_clnt_add_xprt setup return
>   SUNRPC fix rpc_clnt_xprt_iter_init infinite loop
>   SUNRPC: allow rpc_xprt_switch_add_xprt to add xprts on the same net
>   NFS session trunking support: add trunk xprt to nfs4.1 mount
>   NFS add callback_ops to nfs4_proc_bind_conn_to_session_callback
>   NFS schedule bind_conn_to_session for new NFSv4.1 transport
>
>  fs/nfs/client.c                      |  2 ++
>  fs/nfs/nfs4client.c                  | 29 +++++++++++++++++++++++++++--
>  fs/nfs/nfs4proc.c                    | 10 ++++++++++
>  include/linux/nfs_fs_sb.h            |  1 +
>  include/linux/sunrpc/clnt.h          |  1 +
>  include/linux/sunrpc/xprtmultipath.h |  6 +++++-
>  net/sunrpc/clnt.c                    | 20 +++++++++++++-------
>  net/sunrpc/xprtmultipath.c           | 35
>  +++++++++++++++++++++++++++++++++--
>  8 files changed, 92 insertions(+), 12 deletions(-)
>
> --
> 1.8.3.1
>
> --
> 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
>

Tried and approved!

Here is the steps to make it works for those who wants to try it. :

Test configuration :

Running Server Kernel Version : 3.2.0
Running Client Kernel Version : 3.2.0
Patch deployment Client Kernel Version : 4.5.0 rc4+
Debian 7.9
GNS3 1.4.1
Wireshark 1.12.3
VirtualBox 5.0.14
Client and Server are Virtualbox VM's conected each other with a GNS3 Switch

NO AUTHENTIFICATION - this is only for test purpose

+----------+                                              +----------+
|          | 192.168.1.2 /24 +----------+ 192.168.1.3 /24 |          |
|          +-----------------+          +-----------------+          |
|  Client  |                 |  Switch  |                 |  Server  |
|          +-----------------+          +-----------------+          |
|          | 192.168.2.20/24 +----------+ 192.168.2.30 /24|          |
+----------+                                              +----------+


Steps :
-------------------------------------------------------------------
Server NFS4.1 configuration :

Make sure you have an internet connection.

Commands assuming you are root:

apt-get update && apt-get upgrade
apt-get install nfs-kernel-server
mkdir home/testnfs
chmod 777 home/testnfs
nano etc/exports
#Add these line in the "exports" file to set the "testnfs" folder available
    /home/testnfs    192.168.1.2(rw,sync)
    /home/testnfs    192.168.2.20(rw,sync)
#end

#Enable NFSv4.1
etc/init.d/nfs-kernel-server stop
nano proc/fs/nfsd/versions
#set +2 +3 +4 -4.1 to +2 +3 +4 +4.1
etc/init.d/nfs-kernel-server start

#server ready
#end server configuration
-------------------------------------------------------------------
Client NFS4.1 configuration :

Commands assuming you are root:
#------------Prepare new Kernel with new patches----------
apt-get install libncurses5-dev gcc make git exuberant-ctags bc libssl-dev
mkdir kernels
cd kernels
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
#it takes a while...
cd linux-stable
cp /boot/config-`uname -r`* .config
#the -j4 stand for 4 jobs running at the same time, ideal for
multi-core processor.
make -j4
#It takes a while

#--------------------Install the patches------------------
apt-get install patch
cd /
mkdir patch
cd patch
mkdir rpcmultipathpatch
mkdir sessiontrunkingpatch
#Get the Trond Myklebust's patch :
http://www.spinics.net/lists/linux-nfs/msg56365.html
nano rpcmultipathpatch/patch1.patch
.
.
.
nano rpcmultipathpatch/patch13.patch
#Get the Andy Adamson's patches :
http://www.spinics.net/lists/linux-nfs/msg56437.html
nano sessiontrunkingpatch/patch1.patch
.
.
.
nano sessiontrunkingpatch/patch6.patch


cd /

#Apply rpc multipath patch
patch -p1 < rpcmultipathpatch/patch1.patch
patch -p1 < rpcmultipathpatch/patch2.patch
patch -p1 < rpcmultipathpatch/patch3.patch
patch -p1 < rpcmultipathpatch/patch4.patch
patch -p1 < rpcmultipathpatch/patch5.patch
patch -p1 < rpcmultipathpatch/patch6.patch
patch -p1 < rpcmultipathpatch/patch7.patch
patch -p1 < rpcmultipathpatch/patch8.patch
patch -p1 < rpcmultipathpatch/patch9.patch
patch -p1 < rpcmultipathpatch/patch10.patch
patch -p1 < rpcmultipathpatch/patch11.patch
patch -p1 < rpcmultipathpatch/patch12.patch
patch -p1 < rpcmultipathpatch/patch13.patch

#Apply client session trunking patches
patch -p1 < sessiontrunkingpatch/patch1.patch
patch -p1 < sessiontrunkingpatch/patch2.patch
patch -p1 < sessiontrunkingpatch/patch3.patch
patch -p1 < sessiontrunkingpatch/patch4.patch
patch -p1 < sessiontrunkingpatch/patch5.patch
patch -p1 < sessiontrunkingpatch/patch6.patch

make -j4

#I got a compilation error in the "net/sunrpc/xprtmultipath.c" line 220
#at WRITE_ONCE(&xpi->xpi_cursor,NULL);
#error: lvalue required as unary ‘&’ operand
#I remove the "&"

make -j4 M=net/sunrpc

make modules_install install
#reboot and boot on the new kernel (with GRUB)


#--------------------Mount--------------------
mkdir testmount
mount -tnfs4 -ominorversion=1 192.168.1.3:/home/testnfs testmount
mount -tnfs4 -ominorversion=1 192.168.2.30:/home/testnfs testmount

#end client configuration

The round-robin implementation distribute correctly the operations
between the two interfaces and the BIND_CONN_TO_SESSION seems to work.


If you cut a cable, the client continue to send nfs packets on it, so
you loose one operation on two.





Thanks to http://kernelnewbies.org/.
Thanks to Trond Myklebust and Andy Adamson for the patches
--
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



[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