From: Trond Myklebust <trond.myklebust@fys.uio.no>
To: Tom Talpey <talpey@netapp.com>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH 09/15] RPC/RDMA: adhere to protocol for unpadded client trailing write chunks.
Date: Wed, 08 Oct 2008 13:29:11 -0400 [thread overview]
Message-ID: <1223486951.7361.14.camel@localhost> (raw)
In-Reply-To: <20081008154825.1336.79549.stgit-pfX4bTJKMULWwzOYslWYilaTQe2KTcn/@public.gmane.org>
On Wed, 2008-10-08 at 11:48 -0400, Tom Talpey wrote:
> The RPC/RDMA protocol allows clients and servers to avoid RDMA
> operations for data which is purely the result of XDR padding.
> On the client, automatically insert the necessary padding for
> such server replies, and optionally don't marshal such chunks.
>
> Signed-off-by: Tom Talpey <talpey@netapp.com>
> ---
>
> net/sunrpc/xprtrdma/rpc_rdma.c | 22 ++++++++++++++++++++--
> net/sunrpc/xprtrdma/transport.c | 9 +++++++++
> 2 files changed, 29 insertions(+), 2 deletions(-)
>
> diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
> index 721dae7..c4b8011 100644
> --- a/net/sunrpc/xprtrdma/rpc_rdma.c
> +++ b/net/sunrpc/xprtrdma/rpc_rdma.c
> @@ -118,6 +118,11 @@ rpcrdma_convert_iovs(struct xdr_buf *xdrbuf, unsigned int pos,
> }
>
> if (xdrbuf->tail[0].iov_len) {
> + /* the rpcrdma protocol allows us to omit any trailing
> + * xdr pad bytes, saving the server an RDMA operation. */
> + extern int xprt_rdma_pad_optimize; /* 0 == old server compat */
^^^^^^^^^^^^^^^^^^^
Globals should really be declared in a header file. 'sparse' will
complain if you don't...
> + if (xdrbuf->tail[0].iov_len < 4 && xprt_rdma_pad_optimize)
> + return n;
> if (n == nsegs)
> return 0;
> seg[n].mr_page = NULL;
> @@ -594,7 +599,7 @@ rpcrdma_count_chunks(struct rpcrdma_rep *rep, unsigned int max, int wrchunk, __b
> * Scatter inline received data back into provided iov's.
> */
> static void
> -rpcrdma_inline_fixup(struct rpc_rqst *rqst, char *srcp, int copy_len)
> +rpcrdma_inline_fixup(struct rpc_rqst *rqst, char *srcp, int copy_len, int pad)
> {
> int i, npages, curlen, olen;
> char *destp;
> @@ -660,6 +665,13 @@ rpcrdma_inline_fixup(struct rpc_rqst *rqst, char *srcp, int copy_len)
> } else
> rqst->rq_rcv_buf.tail[0].iov_len = 0;
>
> + if (pad) {
> + /* implicit padding on terminal chunk */
> + unsigned char *p = rqst->rq_rcv_buf.tail[0].iov_base;
> + while (pad--)
> + p[rqst->rq_rcv_buf.tail[0].iov_len++] = 0;
> + }
> +
> if (copy_len)
> dprintk("RPC: %s: %d bytes in"
> " %d extra segments (%d lost)\n",
> @@ -794,14 +806,20 @@ repost:
> ((unsigned char *)iptr - (unsigned char *)headerp);
> status = rep->rr_len + rdmalen;
> r_xprt->rx_stats.total_rdma_reply += rdmalen;
> + /* special case - last chunk may omit padding */
> + if (rdmalen &= 3) {
> + rdmalen = 4 - rdmalen;
> + status += rdmalen;
> + }
> } else {
> /* else ordinary inline */
> + rdmalen = 0;
> iptr = (__be32 *)((unsigned char *)headerp + 28);
> rep->rr_len -= 28; /*sizeof *headerp;*/
> status = rep->rr_len;
> }
> /* Fix up the rpc results for upper layer */
> - rpcrdma_inline_fixup(rqst, (char *)iptr, rep->rr_len);
> + rpcrdma_inline_fixup(rqst, (char *)iptr, rep->rr_len, rdmalen);
> break;
>
> case __constant_htonl(RDMA_NOMSG):
> diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c
> index ec6d1e7..c7d2380 100644
> --- a/net/sunrpc/xprtrdma/transport.c
> +++ b/net/sunrpc/xprtrdma/transport.c
> @@ -71,6 +71,7 @@ static unsigned int xprt_rdma_max_inline_read = RPCRDMA_DEF_INLINE;
> static unsigned int xprt_rdma_max_inline_write = RPCRDMA_DEF_INLINE;
> static unsigned int xprt_rdma_inline_write_padding;
> static unsigned int xprt_rdma_memreg_strategy = RPCRDMA_FRMR;
> + int xprt_rdma_pad_optimize = 0;
>
> #ifdef RPC_DEBUG
>
> @@ -136,6 +137,14 @@ static ctl_table xr_tunables_table[] = {
> .extra2 = &max_memreg,
> },
> {
> + .ctl_name = CTL_UNNUMBERED,
> + .procname = "rdma_pad_optimize",
> + .data = &xprt_rdma_pad_optimize,
> + .maxlen = sizeof(unsigned int),
> + .mode = 0644,
> + .proc_handler = &proc_dointvec,
> + },
> + {
> .ctl_name = 0,
> },
> };
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2008-10-08 17:29 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-08 15:46 [PATCH 00/15] RPC/RDMA patchset for next merge window Tom Talpey
[not found] ` <20081008154506.1336.59892.stgit-pfX4bTJKMULWwzOYslWYilaTQe2KTcn/@public.gmane.org>
2008-10-08 15:47 ` [PATCH 01/15] RPC/RDMA: refactor the inline memory registration code Tom Talpey
2008-10-08 15:47 ` [PATCH 02/15] RPC/RDMA: add data types and new FRMR memory registration enum Tom Talpey
[not found] ` <20081008154713.1336.41538.stgit-pfX4bTJKMULWwzOYslWYilaTQe2KTcn/@public.gmane.org>
2008-10-08 17:23 ` Trond Myklebust
2008-10-08 17:30 ` Talpey, Thomas
[not found] ` <RTPCLUEXC1-PRDmcarc00000072-rtwIt2gI0FxT+ZUat5FNkAK/GNPrWCqfQQ4Iyu8u01E@public.gmane.org>
2008-10-08 17:40 ` Trond Myklebust
2008-10-08 17:55 ` J. Bruce Fields
2008-10-08 17:58 ` Talpey, Thomas
2008-10-08 15:47 ` [PATCH 03/15] RPC/RDMA: check selected memory registration mode at runtime Tom Talpey
[not found] ` <20081008154723.1336.57976.stgit-pfX4bTJKMULWwzOYslWYilaTQe2KTcn/@public.gmane.org>
2008-10-08 17:22 ` Trond Myklebust
2008-10-08 17:29 ` Talpey, Thomas
[not found] ` <RTPCLUEXC1-PRD8yfog00000071-rtwIt2gI0FxT+ZUat5FNkAK/GNPrWCqfQQ4Iyu8u01E@public.gmane.org>
2008-10-08 17:40 ` Trond Myklebust
2008-10-08 15:47 ` [PATCH 04/15] RPC/RDMA: support FRMR client memory registration Tom Talpey
2008-10-08 15:47 ` [PATCH 05/15] RPC/RDMA: fix connection IRD/ORD setting Tom Talpey
[not found] ` <20081008154744.1336.20909.stgit-pfX4bTJKMULWwzOYslWYilaTQe2KTcn/@public.gmane.org>
2008-10-08 17:26 ` Trond Myklebust
2008-10-08 17:32 ` Talpey, Thomas
2008-10-08 15:47 ` [PATCH 06/15] RPC/RDMA: suppress retransmit on RPC/RDMA clients Tom Talpey
2008-10-08 15:48 ` [PATCH 07/15] RPC/RDMA: maintain the RPC task bytes-sent statistic Tom Talpey
2008-10-08 15:48 ` [PATCH 08/15] RPC/RDMA: avoid an oops due to disconnect racing with async upcalls Tom Talpey
2008-10-08 15:48 ` [PATCH 09/15] RPC/RDMA: adhere to protocol for unpadded client trailing write chunks Tom Talpey
[not found] ` <20081008154825.1336.79549.stgit-pfX4bTJKMULWwzOYslWYilaTQe2KTcn/@public.gmane.org>
2008-10-08 17:29 ` Trond Myklebust [this message]
2008-10-08 17:33 ` Talpey, Thomas
2008-10-08 15:48 ` [PATCH 10/15] RPC/RDMA: return a consistent error to mount, when connect fails Tom Talpey
[not found] ` <20081008154835.1336.85484.stgit-pfX4bTJKMULWwzOYslWYilaTQe2KTcn/@public.gmane.org>
2008-10-08 17:31 ` Trond Myklebust
2008-10-08 17:40 ` Talpey, Thomas
[not found] ` <RTPCLUEXC1-PRDbpH7100000075-rtwIt2gI0FxT+ZUat5FNkAK/GNPrWCqfQQ4Iyu8u01E@public.gmane.org>
2008-10-08 17:43 ` Trond Myklebust
2008-10-08 19:56 ` Talpey, Thomas
2008-10-08 15:48 ` [PATCH 11/15] RPC/RDMA: fix connect/reconnect resource leak Tom Talpey
2008-10-08 15:48 ` [PATCH 12/15] RPC/RDMA: correct a 5 second pause on reconnecting to an idle server Tom Talpey
[not found] ` <20081008154856.1336.18339.stgit-pfX4bTJKMULWwzOYslWYilaTQe2KTcn/@public.gmane.org>
2008-10-08 17:35 ` Trond Myklebust
2008-10-08 17:51 ` Talpey, Thomas
[not found] ` <RTPCLUEXC1-PRDjbDt300000076-rtwIt2gI0FxT+ZUat5FNkAK/GNPrWCqfQQ4Iyu8u01E@public.gmane.org>
2008-10-08 18:04 ` Trond Myklebust
2008-10-08 19:05 ` Talpey, Thomas
2008-10-08 15:49 ` [PATCH 13/15] RPC/RDMA: harden connection logic against missing/late rdma_cm upcalls Tom Talpey
2008-10-08 15:49 ` [PATCH 14/15] RPC/RDMA: reformat a debug printk to keep lines together Tom Talpey
2008-10-08 15:49 ` [PATCH 15/15] RPC/RDMA: optionally emit useful transport info upon connect/disconnect Tom Talpey
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=1223486951.7361.14.camel@localhost \
--to=trond.myklebust@fys.uio.no \
--cc=linux-nfs@vger.kernel.org \
--cc=talpey@netapp.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox