From: Chuck Lever <chuck.lever@oracle.com>
To: linux-rdma@vger.kernel.org, linux-nfs@vger.kernel.org
Subject: [PATCH v2 02/10] xprtrdma: Cap req_cqinit
Date: Sat, 08 Nov 2014 20:14:20 -0500 [thread overview]
Message-ID: <20141109011420.8806.1849.stgit@manet.1015granger.net> (raw)
In-Reply-To: <20141109010328.8806.5861.stgit@manet.1015granger.net>
Recent work made FRMR registration and invalidation completions
unsignaled. This greatly reduces the adapter interrupt rate.
Every so often, however, a posted send Work Request is allowed to
signal. Otherwise, the provider's Work Queue will wrap and the
workload will hang.
The number of Work Requests that are allowed to remain unsignaled is
determined by the value of req_cqinit. Currently, this is set to the
size of the send Work Queue divided by two, minus 1.
For FRMR, the send Work Queue is the maximum number of concurrent
RPCs (currently 32) times the maximum number of Work Requests an
RPC might use (currently 7, though some adapters may need more).
For mlx4, this is 224 entries. This leaves completion signaling
disabled for 111 send Work Requests.
Some providers hold back dispatching Work Requests until a CQE is
generated. If completions are disabled, then no CQEs are generated
for quite some time, and that can stall the Work Queue.
I've seen this occur running xfstests generic/113 over NFSv4, where
eventually, posting a FAST_REG_MR Work Request fails with -ENOMEM
because the Work Queue has overflowed. The connection is dropped
and re-established.
Cap the rep_cqinit setting so completions are not left turned off
for too long.
BugLink: https://bugzilla.linux-nfs.org/show_bug.cgi?id=269
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
net/sunrpc/xprtrdma/verbs.c | 4 +++-
net/sunrpc/xprtrdma/xprt_rdma.h | 6 ++++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c
index 6ea2942..af45cf3 100644
--- a/net/sunrpc/xprtrdma/verbs.c
+++ b/net/sunrpc/xprtrdma/verbs.c
@@ -733,7 +733,9 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
/* set trigger for requesting send completion */
ep->rep_cqinit = ep->rep_attr.cap.max_send_wr/2 - 1;
- if (ep->rep_cqinit <= 2)
+ if (ep->rep_cqinit > RPCRDMA_MAX_UNSIGNALED_SENDS)
+ ep->rep_cqinit = RPCRDMA_MAX_UNSIGNALED_SENDS;
+ else if (ep->rep_cqinit <= 2)
ep->rep_cqinit = 0;
INIT_CQCOUNT(ep);
ep->rep_ia = ia;
diff --git a/net/sunrpc/xprtrdma/xprt_rdma.h b/net/sunrpc/xprtrdma/xprt_rdma.h
index ac7fc9a..b799041 100644
--- a/net/sunrpc/xprtrdma/xprt_rdma.h
+++ b/net/sunrpc/xprtrdma/xprt_rdma.h
@@ -97,6 +97,12 @@ struct rpcrdma_ep {
struct ib_wc rep_recv_wcs[RPCRDMA_POLLSIZE];
};
+/*
+ * Force a signaled SEND Work Request every so often,
+ * in case the provider needs to do some housekeeping.
+ */
+#define RPCRDMA_MAX_UNSIGNALED_SENDS (32)
+
#define INIT_CQCOUNT(ep) atomic_set(&(ep)->rep_cqcount, (ep)->rep_cqinit)
#define DECR_CQCOUNT(ep) atomic_sub_return(1, &(ep)->rep_cqcount)
next prev parent reply other threads:[~2014-11-09 1:14 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-09 1:14 [PATCH v2 00/10] NFS/RDMA patches for 3.19 Chuck Lever
2014-11-09 1:14 ` [PATCH v2 01/10] xprtrdma: Return an errno from rpcrdma_register_external() Chuck Lever
2014-11-09 1:14 ` Chuck Lever [this message]
2014-11-09 10:13 ` [PATCH v2 02/10] xprtrdma: Cap req_cqinit Sagi Grimberg
2014-11-09 21:43 ` Chuck Lever
2014-11-09 1:14 ` [PATCH v2 03/10] xprtrdma: unmap all FMRs during transport disconnect Chuck Lever
2014-11-09 1:14 ` [PATCH v2 04/10] xprtrdma: Refactor tasklet scheduling Chuck Lever
2014-11-09 1:14 ` [PATCH v2 05/10] xprtrdma: Re-write rpcrdma_flush_cqs() Chuck Lever
2014-11-09 1:14 ` [PATCH v2 06/10] xprtrdma: Enable pad optimization Chuck Lever
2014-11-10 14:36 ` Anna Schumaker
2014-11-10 14:54 ` Chuck Lever
2014-11-10 15:05 ` J. Bruce Fields
2014-11-09 1:15 ` [PATCH v2 07/10] xprtrdma: Display async errors Chuck Lever
2014-11-11 14:30 ` Sagi Grimberg
2014-11-11 16:52 ` Chuck Lever
2014-11-11 18:49 ` Sagi Grimberg
2014-11-11 20:30 ` Or Gerlitz
2014-11-09 1:15 ` [PATCH v2 08/10] SUNRPC: serialize iostats updates Chuck Lever
2014-11-09 1:15 ` [PATCH v2 09/10] NFS: SETCLIENTID XDR buffer sizes are incorrect Chuck Lever
2014-11-10 15:22 ` Anna Schumaker
2014-11-10 16:21 ` Trond Myklebust
2014-11-09 1:15 ` [PATCH v2 10/10] NFS: Clean up nfs4_init_callback() Chuck Lever
2014-11-26 16:25 ` [PATCH v2 00/10] NFS/RDMA patches for 3.19 Anna Schumaker
2014-11-26 16:36 ` 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=20141109011420.8806.1849.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