|
@@ -212,6 +212,51 @@ DEFINE_EVENT(rpc_task_queued, rpc_task_wakeup,
|
|
|
|
|
|
);
|
|
|
|
|
|
+TRACE_EVENT(rpc_stats_latency,
|
|
|
+
|
|
|
+ TP_PROTO(
|
|
|
+ const struct rpc_task *task,
|
|
|
+ ktime_t backlog,
|
|
|
+ ktime_t rtt,
|
|
|
+ ktime_t execute
|
|
|
+ ),
|
|
|
+
|
|
|
+ TP_ARGS(task, backlog, rtt, execute),
|
|
|
+
|
|
|
+ TP_STRUCT__entry(
|
|
|
+ __field(u32, xid)
|
|
|
+ __field(int, version)
|
|
|
+ __string(progname, task->tk_client->cl_program->name)
|
|
|
+ __string(procname, rpc_proc_name(task))
|
|
|
+ __field(unsigned long, backlog)
|
|
|
+ __field(unsigned long, rtt)
|
|
|
+ __field(unsigned long, execute)
|
|
|
+ __string(addr,
|
|
|
+ task->tk_xprt->address_strings[RPC_DISPLAY_ADDR])
|
|
|
+ __string(port,
|
|
|
+ task->tk_xprt->address_strings[RPC_DISPLAY_PORT])
|
|
|
+ ),
|
|
|
+
|
|
|
+ TP_fast_assign(
|
|
|
+ __entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
|
|
|
+ __entry->version = task->tk_client->cl_vers;
|
|
|
+ __assign_str(progname, task->tk_client->cl_program->name)
|
|
|
+ __assign_str(procname, rpc_proc_name(task))
|
|
|
+ __entry->backlog = ktime_to_us(backlog);
|
|
|
+ __entry->rtt = ktime_to_us(rtt);
|
|
|
+ __entry->execute = ktime_to_us(execute);
|
|
|
+ __assign_str(addr,
|
|
|
+ task->tk_xprt->address_strings[RPC_DISPLAY_ADDR]);
|
|
|
+ __assign_str(port,
|
|
|
+ task->tk_xprt->address_strings[RPC_DISPLAY_PORT]);
|
|
|
+ ),
|
|
|
+
|
|
|
+ TP_printk("peer=[%s]:%s xid=0x%08x %sv%d %s backlog=%lu rtt=%lu execute=%lu",
|
|
|
+ __get_str(addr), __get_str(port), __entry->xid,
|
|
|
+ __get_str(progname), __entry->version, __get_str(procname),
|
|
|
+ __entry->backlog, __entry->rtt, __entry->execute)
|
|
|
+);
|
|
|
+
|
|
|
/*
|
|
|
* First define the enums in the below macros to be exported to userspace
|
|
|
* via TRACE_DEFINE_ENUM().
|