xprtrdma: Trace unmap_sync calls
authorChuck Lever <chuck.lever@oracle.com>
Mon, 9 Nov 2020 19:40:08 +0000 (14:40 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Wed, 11 Nov 2020 15:49:12 +0000 (10:49 -0500)
->buf_free is called nearly once per RPC. Only rarely does
xprt_rdma_free() have to do anything, thus tracing every one of
these calls seems unnecessary. Instead, just throw a trace event
when that one occasional RPC still has MRs that need to be
released.

xprt_rdma_free() is further micro-optimized to reduce the amount of
work done in the common case.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
include/trace/events/rpcrdma.h
net/sunrpc/xprtrdma/transport.c

index 166bbee..69e1caf 100644 (file)
@@ -1167,6 +1167,28 @@ TRACE_EVENT(xprtrdma_decode_seg,
        )
 );
 
+TRACE_EVENT(xprtrdma_mrs_zap,
+       TP_PROTO(
+               const struct rpc_task *task
+       ),
+
+       TP_ARGS(task),
+
+       TP_STRUCT__entry(
+               __field(unsigned int, task_id)
+               __field(unsigned int, client_id)
+       ),
+
+       TP_fast_assign(
+               __entry->task_id = task->tk_pid;
+               __entry->client_id = task->tk_client->cl_clid;
+       ),
+
+       TP_printk("task:%u@%u",
+               __entry->task_id, __entry->client_id
+       )
+);
+
 /**
  ** Callback events
  **/
index 8915e42..bb3ed3d 100644 (file)
@@ -599,11 +599,12 @@ static void
 xprt_rdma_free(struct rpc_task *task)
 {
        struct rpc_rqst *rqst = task->tk_rqstp;
-       struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(rqst->rq_xprt);
        struct rpcrdma_req *req = rpcr_to_rdmar(rqst);
 
-       if (!list_empty(&req->rl_registered))
-               frwr_unmap_sync(r_xprt, req);
+       if (unlikely(!list_empty(&req->rl_registered))) {
+               trace_xprtrdma_mrs_zap(task);
+               frwr_unmap_sync(rpcx_to_rdmax(rqst->rq_xprt), req);
+       }
 
        /* XXX: If the RPC is completing because of a signal and
         * not because a reply was received, we ought to ensure