Skip to content

Commit 104f635

Browse files
trondmypdJ. Bruce Fields
authored andcommitted
SUNRPC: Add tracepoints for dropped and deferred requests
Dropping and/or deferring requests has an impact on performance. Let's make sure we can trace those events. Signed-off-by: Trond Myklebust <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
1 parent 82ea2d7 commit 104f635

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

include/trace/events/sunrpc.h

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,39 @@ TRACE_EVENT(svc_recv,
473473
show_rqstp_flags(__entry->flags))
474474
);
475475

476+
DECLARE_EVENT_CLASS(svc_rqst_event,
477+
478+
TP_PROTO(struct svc_rqst *rqst),
479+
480+
TP_ARGS(rqst),
481+
482+
TP_STRUCT__entry(
483+
__field(__be32, xid)
484+
__field(unsigned long, flags)
485+
__dynamic_array(unsigned char, addr, rqst->rq_addrlen)
486+
),
487+
488+
TP_fast_assign(
489+
__entry->xid = rqst->rq_xid;
490+
__entry->flags = rqst->rq_flags;
491+
memcpy(__get_dynamic_array(addr),
492+
&rqst->rq_addr, rqst->rq_addrlen);
493+
),
494+
495+
TP_printk("addr=%pIScp rq_xid=0x%x flags=%s",
496+
(struct sockaddr *)__get_dynamic_array(addr),
497+
be32_to_cpu(__entry->xid),
498+
show_rqstp_flags(__entry->flags))
499+
);
500+
501+
DEFINE_EVENT(svc_rqst_event, svc_defer,
502+
TP_PROTO(struct svc_rqst *rqst),
503+
TP_ARGS(rqst));
504+
505+
DEFINE_EVENT(svc_rqst_event, svc_drop,
506+
TP_PROTO(struct svc_rqst *rqst),
507+
TP_ARGS(rqst));
508+
476509
DECLARE_EVENT_CLASS(svc_rqst_status,
477510

478511
TP_PROTO(struct svc_rqst *rqst, int status),
@@ -636,6 +669,34 @@ TRACE_EVENT(svc_handle_xprt,
636669
(struct sockaddr *)__get_dynamic_array(addr) : NULL,
637670
__entry->len, show_svc_xprt_flags(__entry->flags))
638671
);
672+
673+
674+
DECLARE_EVENT_CLASS(svc_deferred_event,
675+
TP_PROTO(struct svc_deferred_req *dr),
676+
677+
TP_ARGS(dr),
678+
679+
TP_STRUCT__entry(
680+
__field(__be32, xid)
681+
__dynamic_array(unsigned char, addr, dr->addrlen)
682+
),
683+
684+
TP_fast_assign(
685+
__entry->xid = *(__be32 *)(dr->args + (dr->xprt_hlen>>2));
686+
memcpy(__get_dynamic_array(addr), &dr->addr, dr->addrlen);
687+
),
688+
689+
TP_printk("addr=%pIScp xid=0x%x",
690+
(struct sockaddr *)__get_dynamic_array(addr),
691+
be32_to_cpu(__entry->xid))
692+
);
693+
694+
DEFINE_EVENT(svc_deferred_event, svc_drop_deferred,
695+
TP_PROTO(struct svc_deferred_req *dr),
696+
TP_ARGS(dr));
697+
DEFINE_EVENT(svc_deferred_event, svc_revisit_deferred,
698+
TP_PROTO(struct svc_deferred_req *dr),
699+
TP_ARGS(dr));
639700
#endif /* _TRACE_SUNRPC_H */
640701

641702
#include <trace/define_trace.h>

net/sunrpc/svc_xprt.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -875,6 +875,7 @@ EXPORT_SYMBOL_GPL(svc_recv);
875875
*/
876876
void svc_drop(struct svc_rqst *rqstp)
877877
{
878+
trace_svc_drop(rqstp);
878879
dprintk("svc: xprt %p dropped request\n", rqstp->rq_xprt);
879880
svc_xprt_release(rqstp);
880881
}
@@ -1152,6 +1153,7 @@ static void svc_revisit(struct cache_deferred_req *dreq, int too_many)
11521153
spin_unlock(&xprt->xpt_lock);
11531154
dprintk("revisit canceled\n");
11541155
svc_xprt_put(xprt);
1156+
trace_svc_drop_deferred(dr);
11551157
kfree(dr);
11561158
return;
11571159
}
@@ -1209,6 +1211,7 @@ static struct cache_deferred_req *svc_defer(struct cache_req *req)
12091211
set_bit(RQ_DROPME, &rqstp->rq_flags);
12101212

12111213
dr->handle.revisit = svc_revisit;
1214+
trace_svc_defer(rqstp);
12121215
return &dr->handle;
12131216
}
12141217

@@ -1249,6 +1252,7 @@ static struct svc_deferred_req *svc_deferred_dequeue(struct svc_xprt *xprt)
12491252
struct svc_deferred_req,
12501253
handle.recent);
12511254
list_del_init(&dr->handle.recent);
1255+
trace_svc_revisit_deferred(dr);
12521256
} else
12531257
clear_bit(XPT_DEFERRED, &xprt->xpt_flags);
12541258
spin_unlock(&xprt->xpt_lock);

0 commit comments

Comments
 (0)