xprtrdma: Refine trace_xprtrdma_fixup

Slightly reduce overhead and display more useful information.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
Chuck Lever 2019-10-23 10:02:03 -04:00 committed by Anna Schumaker
parent 7b020f17bb
commit d4957f01d2
2 changed files with 15 additions and 50 deletions

View File

@ -1084,66 +1084,32 @@ DEFINE_REPLY_EVENT(xprtrdma_reply_hdr);
TRACE_EVENT(xprtrdma_fixup, TRACE_EVENT(xprtrdma_fixup,
TP_PROTO( TP_PROTO(
const struct rpc_rqst *rqst, const struct rpc_rqst *rqst,
int len, unsigned long fixup
int hdrlen
), ),
TP_ARGS(rqst, len, hdrlen), TP_ARGS(rqst, fixup),
TP_STRUCT__entry( TP_STRUCT__entry(
__field(unsigned int, task_id) __field(unsigned int, task_id)
__field(unsigned int, client_id) __field(unsigned int, client_id)
__field(const void *, base) __field(unsigned long, fixup)
__field(int, len) __field(size_t, headlen)
__field(int, hdrlen) __field(unsigned int, pagelen)
__field(size_t, taillen)
), ),
TP_fast_assign( TP_fast_assign(
__entry->task_id = rqst->rq_task->tk_pid; __entry->task_id = rqst->rq_task->tk_pid;
__entry->client_id = rqst->rq_task->tk_client->cl_clid; __entry->client_id = rqst->rq_task->tk_client->cl_clid;
__entry->base = rqst->rq_rcv_buf.head[0].iov_base; __entry->fixup = fixup;
__entry->len = len; __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len;
__entry->hdrlen = hdrlen; __entry->pagelen = rqst->rq_rcv_buf.page_len;
__entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len;
), ),
TP_printk("task:%u@%u base=%p len=%d hdrlen=%d", TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu",
__entry->task_id, __entry->client_id, __entry->task_id, __entry->client_id, __entry->fixup,
__entry->base, __entry->len, __entry->hdrlen __entry->headlen, __entry->pagelen, __entry->taillen
)
);
TRACE_EVENT(xprtrdma_fixup_pg,
TP_PROTO(
const struct rpc_rqst *rqst,
int pageno,
const void *pos,
int len,
int curlen
),
TP_ARGS(rqst, pageno, pos, len, curlen),
TP_STRUCT__entry(
__field(unsigned int, task_id)
__field(unsigned int, client_id)
__field(const void *, pos)
__field(int, pageno)
__field(int, len)
__field(int, curlen)
),
TP_fast_assign(
__entry->task_id = rqst->rq_task->tk_pid;
__entry->client_id = rqst->rq_task->tk_client->cl_clid;
__entry->pos = pos;
__entry->pageno = pageno;
__entry->len = len;
__entry->curlen = curlen;
),
TP_printk("task:%u@%u pageno=%d pos=%p len=%d curlen=%d",
__entry->task_id, __entry->client_id,
__entry->pageno, __entry->pos, __entry->len, __entry->curlen
) )
); );

View File

@ -1086,7 +1086,6 @@ rpcrdma_inline_fixup(struct rpc_rqst *rqst, char *srcp, int copy_len, int pad)
curlen = rqst->rq_rcv_buf.head[0].iov_len; curlen = rqst->rq_rcv_buf.head[0].iov_len;
if (curlen > copy_len) if (curlen > copy_len)
curlen = copy_len; curlen = copy_len;
trace_xprtrdma_fixup(rqst, copy_len, curlen);
srcp += curlen; srcp += curlen;
copy_len -= curlen; copy_len -= curlen;
@ -1106,8 +1105,6 @@ rpcrdma_inline_fixup(struct rpc_rqst *rqst, char *srcp, int copy_len, int pad)
if (curlen > pagelist_len) if (curlen > pagelist_len)
curlen = pagelist_len; curlen = pagelist_len;
trace_xprtrdma_fixup_pg(rqst, i, srcp,
copy_len, curlen);
destp = kmap_atomic(ppages[i]); destp = kmap_atomic(ppages[i]);
memcpy(destp + page_base, srcp, curlen); memcpy(destp + page_base, srcp, curlen);
flush_dcache_page(ppages[i]); flush_dcache_page(ppages[i]);
@ -1139,6 +1136,8 @@ rpcrdma_inline_fixup(struct rpc_rqst *rqst, char *srcp, int copy_len, int pad)
rqst->rq_private_buf.tail[0].iov_base = srcp; rqst->rq_private_buf.tail[0].iov_base = srcp;
} }
if (fixup_copy_count)
trace_xprtrdma_fixup(rqst, fixup_copy_count);
return fixup_copy_count; return fixup_copy_count;
} }