xprtrdma: Add trace points to instrument MR allocation and recovery
authorChuck Lever <chuck.lever@oracle.com>
Wed, 20 Dec 2017 21:31:21 +0000 (16:31 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Tue, 23 Jan 2018 14:44:36 +0000 (09:44 -0500)
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/verbs.c

index fadb4b687595da699f5eadcd98155f525cbe01ff..d296d5b084c290d3feafcdf2481ed7a0ec737c97 100644 (file)
@@ -51,6 +51,37 @@ DECLARE_EVENT_CLASS(xprtrdma_reply_event,
                                ),                                      \
                                TP_ARGS(rep))
 
+DECLARE_EVENT_CLASS(xprtrdma_rxprt,
+       TP_PROTO(
+               const struct rpcrdma_xprt *r_xprt
+       ),
+
+       TP_ARGS(r_xprt),
+
+       TP_STRUCT__entry(
+               __field(const void *, r_xprt)
+               __string(addr, rpcrdma_addrstr(r_xprt))
+               __string(port, rpcrdma_portstr(r_xprt))
+       ),
+
+       TP_fast_assign(
+               __entry->r_xprt = r_xprt;
+               __assign_str(addr, rpcrdma_addrstr(r_xprt));
+               __assign_str(port, rpcrdma_portstr(r_xprt));
+       ),
+
+       TP_printk("peer=[%s]:%s r_xprt=%p",
+               __get_str(addr), __get_str(port), __entry->r_xprt
+       )
+);
+
+#define DEFINE_RXPRT_EVENT(name)                                       \
+               DEFINE_EVENT(xprtrdma_rxprt, name,                      \
+                               TP_PROTO(                               \
+                                       const struct rpcrdma_xprt *r_xprt \
+                               ),                                      \
+                               TP_ARGS(r_xprt))
+
 DECLARE_EVENT_CLASS(xprtrdma_rdch_event,
        TP_PROTO(
                const struct rpc_task *task,
@@ -240,6 +271,31 @@ DECLARE_EVENT_CLASS(xprtrdma_mr,
  ** Call events
  **/
 
+TRACE_EVENT(xprtrdma_createmrs,
+       TP_PROTO(
+               const struct rpcrdma_xprt *r_xprt,
+               unsigned int count
+       ),
+
+       TP_ARGS(r_xprt, count),
+
+       TP_STRUCT__entry(
+               __field(const void *, r_xprt)
+               __field(unsigned int, count)
+       ),
+
+       TP_fast_assign(
+               __entry->r_xprt = r_xprt;
+               __entry->count = count;
+       ),
+
+       TP_printk("r_xprt=%p: created %u MRs",
+               __entry->r_xprt, __entry->count
+       )
+);
+
+DEFINE_RXPRT_EVENT(xprtrdma_nomrs);
+
 DEFINE_RDCH_EVENT(xprtrdma_read_chunk);
 DEFINE_WRCH_EVENT(xprtrdma_write_chunk);
 DEFINE_WRCH_EVENT(xprtrdma_reply_chunk);
@@ -423,6 +479,7 @@ DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake);
 DEFINE_MR_EVENT(xprtrdma_localinv);
 DEFINE_MR_EVENT(xprtrdma_dma_unmap);
 DEFINE_MR_EVENT(xprtrdma_remoteinv);
+DEFINE_MR_EVENT(xprtrdma_recover_mr);
 
 /**
  ** Reply events
index 0e89e5529d6cbb1546f326a65bbb8df7715d56d2..1addcc9477baab581427d9cd78cfbf1c01a76f4d 100644 (file)
@@ -998,7 +998,7 @@ rpcrdma_mr_recovery_worker(struct work_struct *work)
                mr = rpcrdma_mr_pop(&buf->rb_stale_mrs);
                spin_unlock(&buf->rb_recovery_lock);
 
-               dprintk("RPC:       %s: recovering MR %p\n", __func__, mr);
+               trace_xprtrdma_recover_mr(mr);
                mr->mr_xprt->rx_ia.ri_ops->ro_recover_mr(mr);
 
                spin_lock(&buf->rb_recovery_lock);
@@ -1054,7 +1054,7 @@ rpcrdma_mrs_create(struct rpcrdma_xprt *r_xprt)
        r_xprt->rx_stats.mrs_allocated += count;
        spin_unlock(&buf->rb_mrlock);
 
-       dprintk("RPC:       %s: created %u MRs\n", __func__, count);
+       trace_xprtrdma_createmrs(r_xprt, count);
 }
 
 static void
@@ -1310,7 +1310,7 @@ rpcrdma_mr_get(struct rpcrdma_xprt *r_xprt)
        return mr;
 
 out_nomrs:
-       dprintk("RPC:       %s: no MRs available\n", __func__);
+       trace_xprtrdma_nomrs(r_xprt);
        if (r_xprt->rx_ep.rep_connected != -ENODEV)
                schedule_delayed_work(&buf->rb_refresh_worker, 0);