linux_dsm_epyc7002/net/sunrpc/xprtrdma
Chuck Lever 58d1dcf5a8 xprtrdma: Split rb_lock
/proc/lock_stat showed contention between rpcrdma_buffer_get/put
and the MR allocation functions during I/O intensive workloads.

Now that MRs are no longer allocated in rpcrdma_buffer_get(),
there's no reason the rb_mws list has to be managed using the
same lock as the send/receive buffers. Split that lock. The
new lock does not need to disable interrupts because buffer
get/put is never called in an interrupt context.

struct rpcrdma_buffer is re-arranged to ensure rb_mwlock and rb_mws
are always in a different cacheline than rb_lock and the buffer
pointers.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: Steve Wise <swise@opengridcomputing.com>
Reviewed-by: Sagi Grimberg <sagig@mellanox.com>
Tested-By: Devesh Sharma <devesh.sharma@avagotech.com>
Reviewed-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
2015-06-12 13:10:37 -04:00
..
fmr_ops.c xprtrdma: Split rb_lock 2015-06-12 13:10:37 -04:00
frwr_ops.c xprtrdma: Split rb_lock 2015-06-12 13:10:37 -04:00
Makefile xprtrdma: Add vector of ops for each memory registration strategy 2015-03-31 09:52:52 -04:00
physical_ops.c xprtrdma: Remove ->ro_reset 2015-06-12 13:10:37 -04:00
rpc_rdma.c xprtrdma: Acquire MRs in rpcrdma_register_external() 2015-06-12 13:10:37 -04:00
svc_rdma_marshal.c svcrdma: Clean up read chunk counting 2015-01-15 15:01:44 -05:00
svc_rdma_recvfrom.c svcrdma: Handle additional inline content 2015-01-15 15:01:49 -05:00
svc_rdma_sendto.c svcrdma: Find rmsgp more reliably 2015-01-15 15:01:45 -05:00
svc_rdma_transport.c svcrdma: Plant reader function in struct svcxprt_rdma 2015-01-15 15:01:46 -05:00
svc_rdma.c net: Convert uses of typedef ctl_table to struct ctl_table 2013-06-13 02:36:09 -07:00
transport.c xprtrdma: Introduce an FRMR recovery workqueue 2015-06-12 13:10:36 -04:00
verbs.c xprtrdma: Split rb_lock 2015-06-12 13:10:37 -04:00
xprt_rdma.h xprtrdma: Split rb_lock 2015-06-12 13:10:37 -04:00