From: Chuck Lever <chuck.lever@oracle.com>
To: linux-rdma@vger.kernel.org, linux-nfs@vger.kernel.org
Subject: [PATCH v2 09/14] xprtrdma: Always provide a write list when sending NFS READ
Date: Mon, 13 Jul 2015 12:31:07 -0400 [thread overview]
Message-ID: <20150713163107.17630.60420.stgit@manet.1015granger.net> (raw)
In-Reply-To: <20150713160617.17630.97475.stgit@manet.1015granger.net>
The client has been setting up a reply chunk for NFS READs that are
smaller than the inline threshold. This is not efficient: both the
server and client CPUs have to copy the reply's data payload into
and out of the memory region that is then transferred via RDMA.
Using the write list, the data payload is moved by the device and no
extra data copying is necessary.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: Devesh Sharma <devesh.sharma@avagotech.com>
Reviewed-By: Sagi Grimberg <sagig@mellanox.com>
---
net/sunrpc/xprtrdma/rpc_rdma.c | 21 ++++-----------------
1 file changed, 4 insertions(+), 17 deletions(-)
diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
index 950b654..e7cf976 100644
--- a/net/sunrpc/xprtrdma/rpc_rdma.c
+++ b/net/sunrpc/xprtrdma/rpc_rdma.c
@@ -418,28 +418,15 @@ rpcrdma_marshal_req(struct rpc_rqst *rqst)
/*
* Chunks needed for results?
*
+ * o Read ops return data as write chunk(s), header as inline.
* o If the expected result is under the inline threshold, all ops
* return as inline (but see later).
* o Large non-read ops return as a single reply chunk.
- * o Large read ops return data as write chunk(s), header as inline.
- *
- * Note: the NFS code sending down multiple result segments implies
- * the op is one of read, readdir[plus], readlink or NFSv4 getacl.
- */
-
- /*
- * This code can handle read chunks, write chunks OR reply
- * chunks -- only one type. If the request is too big to fit
- * inline, then we will choose read chunks. If the request is
- * a READ, then use write chunks to separate the file data
- * into pages; otherwise use reply chunks.
*/
- if (rpcrdma_results_inline(rqst))
- wtype = rpcrdma_noch;
- else if (rqst->rq_rcv_buf.page_len == 0)
- wtype = rpcrdma_replych;
- else if (rqst->rq_rcv_buf.flags & XDRBUF_READ)
+ if (rqst->rq_rcv_buf.flags & XDRBUF_READ)
wtype = rpcrdma_writech;
+ else if (rpcrdma_results_inline(rqst))
+ wtype = rpcrdma_noch;
else
wtype = rpcrdma_replych;
next prev parent reply other threads:[~2015-07-13 16:31 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-13 16:29 [PATCH v2 00/14] NFS/RDMA client side for Linux 4.3 Chuck Lever
2015-07-13 16:29 ` [PATCH v2 01/14] xprtrdma: Make xprt_setup_rdma() agnostic to family of server address Chuck Lever
2015-07-13 16:30 ` [PATCH v2 02/14] xprtrdma: Raise maximum payload size to one megabyte Chuck Lever
2015-07-13 16:30 ` [PATCH v2 03/14] xprtrdma: Increase default credit limit Chuck Lever
2015-07-13 16:30 ` [PATCH v2 04/14] xprtrdma: Don't fall back to PHYSICAL memory registration Chuck Lever
2015-07-13 16:30 ` [PATCH v2 05/14] xprtrdma: Remove last ib_reg_phys_mr() call site Chuck Lever
2015-07-13 16:30 ` [PATCH v2 06/14] xprtrdma: Clean up rpcrdma_ia_open() Chuck Lever
2015-07-13 16:30 ` [PATCH v2 07/14] xprtrdma: Remove logic that constructs RDMA_MSGP type calls Chuck Lever
2015-07-14 19:00 ` Tom Talpey
2015-07-14 19:01 ` Chuck Lever
2015-07-15 18:26 ` Devesh Sharma
2015-07-15 21:29 ` Chuck Lever
2015-07-13 16:30 ` [PATCH v2 08/14] xprtrdma: Account for RPC/RDMA header size when deciding to inline Chuck Lever
2015-07-13 16:31 ` Chuck Lever [this message]
2015-07-13 16:31 ` [PATCH v2 10/14] xprtrdma: Don't provide a reply chunk when expecting a short reply Chuck Lever
2015-07-13 16:31 ` [PATCH v2 11/14] xprtrdma: Fix XDR tail buffer marshalling Chuck Lever
2015-07-13 16:31 ` [PATCH v2 12/14] xprtrdma: Fix large NFS SYMLINK calls Chuck Lever
2015-07-13 16:31 ` [PATCH v2 13/14] xprtrdma: Clean up xprt_rdma_print_stats() Chuck Lever
2015-07-13 16:31 ` [PATCH v2 14/14] xprtrdma: Count RDMA_NOMSG type calls Chuck Lever
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=20150713163107.17630.60420.stgit@manet.1015granger.net \
--to=chuck.lever@oracle.com \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
/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