Skip to content

Commit 2937fed

Browse files
chuckleveramschuma-ntap
authored andcommitted
xprtrdma: Add trace points to instrument memory invalidation
Signed-off-by: Chuck Lever <[email protected]> Signed-off-by: Anna Schumaker <[email protected]>
1 parent e11b7c9 commit 2937fed

File tree

4 files changed

+57
-16
lines changed

4 files changed

+57
-16
lines changed

include/trace/events/rpcrdma.h

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,41 @@ DECLARE_EVENT_CLASS(xprtrdma_frwr_done,
201201
), \
202202
TP_ARGS(wc, frwr))
203203

204+
DECLARE_EVENT_CLASS(xprtrdma_mr,
205+
TP_PROTO(
206+
const struct rpcrdma_mr *mr
207+
),
208+
209+
TP_ARGS(mr),
210+
211+
TP_STRUCT__entry(
212+
__field(const void *, mr)
213+
__field(u32, handle)
214+
__field(u32, length)
215+
__field(u64, offset)
216+
),
217+
218+
TP_fast_assign(
219+
__entry->mr = mr;
220+
__entry->handle = mr->mr_handle;
221+
__entry->length = mr->mr_length;
222+
__entry->offset = mr->mr_offset;
223+
),
224+
225+
TP_printk("mr=%p %u@0x%016llx:0x%08x",
226+
__entry->mr, __entry->length,
227+
(unsigned long long)__entry->offset,
228+
__entry->handle
229+
)
230+
);
231+
232+
#define DEFINE_MR_EVENT(name) \
233+
DEFINE_EVENT(xprtrdma_mr, name, \
234+
TP_PROTO( \
235+
const struct rpcrdma_mr *mr \
236+
), \
237+
TP_ARGS(mr))
238+
204239
/**
205240
** Call events
206241
**/
@@ -382,6 +417,12 @@ TRACE_EVENT(xprtrdma_wc_receive,
382417
);
383418

384419
DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg);
420+
DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li);
421+
DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake);
422+
423+
DEFINE_MR_EVENT(xprtrdma_localinv);
424+
DEFINE_MR_EVENT(xprtrdma_dma_unmap);
425+
DEFINE_MR_EVENT(xprtrdma_remoteinv);
385426

386427
/**
387428
** Reply events

net/sunrpc/xprtrdma/fmr_ops.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ fmr_op_recover_mr(struct rpcrdma_mr *mr)
148148
pr_err("rpcrdma: FMR reset failed (%d), %p released\n", rc, mr);
149149
r_xprt->rx_stats.mrs_orphaned++;
150150

151+
trace_xprtrdma_dma_unmap(mr);
151152
ib_dma_unmap_sg(r_xprt->rx_ia.ri_device,
152153
mr->mr_sg, mr->mr_nents, mr->mr_dir);
153154

@@ -273,6 +274,7 @@ fmr_op_unmap_sync(struct rpcrdma_xprt *r_xprt, struct list_head *mrs)
273274
list_for_each_entry(mr, mrs, mr_list) {
274275
dprintk("RPC: %s: unmapping fmr %p\n",
275276
__func__, &mr->fmr);
277+
trace_xprtrdma_localinv(mr);
276278
list_add_tail(&mr->fmr.fm_mr->list, &unmap_list);
277279
}
278280
r_xprt->rx_stats.local_inv_needed++;
@@ -285,8 +287,6 @@ fmr_op_unmap_sync(struct rpcrdma_xprt *r_xprt, struct list_head *mrs)
285287
*/
286288
while (!list_empty(mrs)) {
287289
mr = rpcrdma_mr_pop(mrs);
288-
dprintk("RPC: %s: DMA unmapping fmr %p\n",
289-
__func__, &mr->fmr);
290290
list_del(&mr->fmr.fm_mr->list);
291291
rpcrdma_mr_unmap_and_put(mr);
292292
}

net/sunrpc/xprtrdma/frwr_ops.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,11 @@ frwr_op_recover_mr(struct rpcrdma_mr *mr)
182182
int rc;
183183

184184
rc = __frwr_mr_reset(ia, mr);
185-
if (state != FRWR_FLUSHED_LI)
185+
if (state != FRWR_FLUSHED_LI) {
186+
trace_xprtrdma_dma_unmap(mr);
186187
ib_dma_unmap_sg(ia->ri_device,
187188
mr->mr_sg, mr->mr_nents, mr->mr_dir);
189+
}
188190
if (rc)
189191
goto out_release;
190192

@@ -307,16 +309,16 @@ frwr_wc_fastreg(struct ib_cq *cq, struct ib_wc *wc)
307309
static void
308310
frwr_wc_localinv(struct ib_cq *cq, struct ib_wc *wc)
309311
{
310-
struct rpcrdma_frwr *frwr;
311-
struct ib_cqe *cqe;
312+
struct ib_cqe *cqe = wc->wr_cqe;
313+
struct rpcrdma_frwr *frwr = container_of(cqe, struct rpcrdma_frwr,
314+
fr_cqe);
312315

313316
/* WARNING: Only wr_cqe and status are reliable at this point */
314317
if (wc->status != IB_WC_SUCCESS) {
315-
cqe = wc->wr_cqe;
316-
frwr = container_of(cqe, struct rpcrdma_frwr, fr_cqe);
317318
frwr->fr_state = FRWR_FLUSHED_LI;
318319
__frwr_sendcompletion_flush(wc, "localinv");
319320
}
321+
trace_xprtrdma_wc_li(wc, frwr);
320322
}
321323

322324
/**
@@ -329,17 +331,17 @@ frwr_wc_localinv(struct ib_cq *cq, struct ib_wc *wc)
329331
static void
330332
frwr_wc_localinv_wake(struct ib_cq *cq, struct ib_wc *wc)
331333
{
332-
struct rpcrdma_frwr *frwr;
333-
struct ib_cqe *cqe;
334+
struct ib_cqe *cqe = wc->wr_cqe;
335+
struct rpcrdma_frwr *frwr = container_of(cqe, struct rpcrdma_frwr,
336+
fr_cqe);
334337

335338
/* WARNING: Only wr_cqe and status are reliable at this point */
336-
cqe = wc->wr_cqe;
337-
frwr = container_of(cqe, struct rpcrdma_frwr, fr_cqe);
338339
if (wc->status != IB_WC_SUCCESS) {
339340
frwr->fr_state = FRWR_FLUSHED_LI;
340341
__frwr_sendcompletion_flush(wc, "localinv");
341342
}
342343
complete(&frwr->fr_linv_done);
344+
trace_xprtrdma_wc_li_wake(wc, frwr);
343345
}
344346

345347
/* Post a REG_MR Work Request to register a memory region
@@ -457,6 +459,7 @@ frwr_op_reminv(struct rpcrdma_rep *rep, struct list_head *mrs)
457459
list_for_each_entry(mr, mrs, mr_list)
458460
if (mr->mr_handle == rep->rr_inv_rkey) {
459461
list_del(&mr->mr_list);
462+
trace_xprtrdma_remoteinv(mr);
460463
mr->frwr.fr_state = FRWR_IS_INVALID;
461464
rpcrdma_mr_unmap_and_put(mr);
462465
break; /* only one invalidated MR per RPC */
@@ -492,9 +495,7 @@ frwr_op_unmap_sync(struct rpcrdma_xprt *r_xprt, struct list_head *mrs)
492495
mr->frwr.fr_state = FRWR_IS_INVALID;
493496

494497
frwr = &mr->frwr;
495-
496-
dprintk("RPC: %s: invalidating frwr %p\n",
497-
__func__, frwr);
498+
trace_xprtrdma_localinv(mr);
498499

499500
frwr->fr_cqe.done = frwr_wc_localinv;
500501
last = &frwr->fr_invwr;
@@ -536,8 +537,6 @@ frwr_op_unmap_sync(struct rpcrdma_xprt *r_xprt, struct list_head *mrs)
536537
unmap:
537538
while (!list_empty(mrs)) {
538539
mr = rpcrdma_mr_pop(mrs);
539-
dprintk("RPC: %s: DMA unmapping frwr %p\n",
540-
__func__, &mr->frwr);
541540
rpcrdma_mr_unmap_and_put(mr);
542541
}
543542
return;

net/sunrpc/xprtrdma/verbs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,6 +1349,7 @@ rpcrdma_mr_unmap_and_put(struct rpcrdma_mr *mr)
13491349
{
13501350
struct rpcrdma_xprt *r_xprt = mr->mr_xprt;
13511351

1352+
trace_xprtrdma_dma_unmap(mr);
13521353
ib_dma_unmap_sg(r_xprt->rx_ia.ri_device,
13531354
mr->mr_sg, mr->mr_nents, mr->mr_dir);
13541355
__rpcrdma_mr_put(&r_xprt->rx_buf, mr);

0 commit comments

Comments
 (0)