All of lore.kernel.org
 help / color / mirror / Atom feed
From: "J. Bruce Fields" <bfields@fieldses.org>
To: "Adamson, Andy" <William.Adamson@netapp.com>
Cc: Martin Houry <martinhoury@gmail.com>,
	"linux-nfs@vger.kernel.org" <linux-nfs@vger.kernel.org>,
	Trond Myklebust <trond.myklebust@primarydata.com>
Subject: Re: "Re: [PATCH RFC Version 1 0/6] Request for Comment: NFS4.1 Session Trunking"
Date: Wed, 17 Feb 2016 13:44:06 -0500	[thread overview]
Message-ID: <20160217184406.GE10401@fieldses.org> (raw)
In-Reply-To: <F2FB08E3-FAB6-4035-A85A-D70CF5387D30@netapp.com>

On Wed, Feb 17, 2016 at 05:49:39PM +0000, Adamson, Andy wrote:
> On Feb 17, 2016, at 11:34 AM, J. Bruce Fields <bfields@fieldses.org> wrote:
> > I'm surprised there's  BIND_CONN_TO_SESSION in the case Martin's
> > testing.  I didn't think it was necessary unless you were using
> > kerberos.  Maybe I'm forgetting some subtlety….
> 
> The first host (host1 above) is the mount host. Each additional host is a new connection. An EXCHANGE_ID is sent on the new connection, and the resultant serverscope, server owner, clientid, etc from the new connection EXCHANGE_ID reply is compared to the mount exchange_id args stored in the nfs_client struct. If it passes the session trunking requirements, then the connection needs to be bound to the session to enable session trunking.

That all makes sense to me, but:

	"If, when the client ID was created, the client opted for
	SP4_NONE state protection, the client is not required to use
	BIND_CONN_TO_SESSION to associate the connection with the
	session, unless the client wishes to associate the connection
	with the backchannel.  When SP4_NONE protection is used, simply
	sending a COMPOUND request with a SEQUENCE operation is
	sufficient to associate the connection with the session
	specified in SEQUENCE."

Well, but maybe that's academic, there's probably no harm in sending the
BIND_CONN_TO_SESSION.

--b.

> 
> —>Andy
> 
> RFC5661 2.10.5
> ……
>  Session Trunking.  If the eia_clientowner argument is the same in two
>       different EXCHANGE_ID requests, and the eir_clientid,
>       eir_server_owner.so_major_id, eir_server_owner.so_minor_id, and
>       eir_server_scope results match in both EXCHANGE_ID results, then
>       the client is permitted to perform session trunking.  If the
>       client has no session mapping to the tuple of eir_clientid,
>       eir_server_owner.so_major_id, eir_server_scope, and
>       eir_server_owner.so_minor_id, then it creates the session via a
>       CREATE_SESSION operation over one of the connections, which
>       associates the connection to the session.  If there is a session
>       for the tuple, the client can send BIND_CONN_TO_SESSION to
>       associate the connection to the session.
> 
>       Of course, if the client does not desire to use session trunking,
>       it is not required to do so.  It can invoke CREATE_SESSION on the
>       connection.  This will result in client ID trunking as described
>       below.  It can also decide to drop the connection if it does not
>       choose to use trunking.
> > 
> > --b.
> > 
> >> 
> >> —>Andy
> >> 
> >> 
> >>> 
> >>> 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
> >> 
> >> N?????r??y????b?X??ǧv?^?)޺{.n?+????{???"??^n?r???z?\x1a??h?????&??\x1e?G???h?\x03(?階?ݢj"??\x1a?^[m??????z?ޖ???f???h???~?m
> 

  reply	other threads:[~2016-02-17 18:44 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-17 10:31 "Re: [PATCH RFC Version 1 0/6] Request for Comment: NFS4.1 Session Trunking" Martin Houry
2016-02-17 14:50 ` Adamson, Andy
2016-02-17 16:34   ` J. Bruce Fields
2016-02-17 17:49     ` Adamson, Andy
2016-02-17 18:44       ` J. Bruce Fields [this message]
2016-02-17 19:57         ` Adamson, Andy
2016-02-17 19:06   ` Chuck Lever
2016-02-17 20:59     ` J. Bruce Fields
2016-02-17 22:35       ` Adamson, Andy
2016-02-17 22:52         ` Chuck Lever
2016-02-17 23:55           ` Trond Myklebust
2016-02-18 14:14             ` J. Bruce Fields
2016-02-18 14:38               ` Martin Houry
2016-02-18 18:32               ` Trond Myklebust
2016-02-18 19:41                 ` Adamson, Andy
2016-02-18 20:39                   ` J. Bruce Fields
2016-02-18 21:29                     ` Chuck Lever
2016-02-19 15:01                       ` J. Bruce Fields
2016-02-19 16:29                         ` Chuck Lever
2016-02-18 14:05           ` J. Bruce Fields
2016-02-18 11:28   ` Martin Houry

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160217184406.GE10401@fieldses.org \
    --to=bfields@fieldses.org \
    --cc=William.Adamson@netapp.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=martinhoury@gmail.com \
    --cc=trond.myklebust@primarydata.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.