From 1be52c0b9f8ade90aaa5d955ae655d5d9d8d8461 Mon Sep 17 00:00:00 2001 From: Steve Dickson Date: Mon, 23 Jan 2012 14:36:28 -0500 Subject: Added in new sunrpc sched trace points. Signed-off-by: Steve Dickson --- sunrpc/sunrpc.stp | 40 -------------------------------------- tapset/rpc_clnt.stp | 42 ++++++++++++++++++++++++++++++++++++++++ tapset/task.stp | 2 +- tracepoints/rpc_sched_events.stp | 32 ++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 41 deletions(-) create mode 100644 tapset/rpc_clnt.stp create mode 100644 tracepoints/rpc_sched_events.stp diff --git a/sunrpc/sunrpc.stp b/sunrpc/sunrpc.stp index 689577c..d94076f 100644 --- a/sunrpc/sunrpc.stp +++ b/sunrpc/sunrpc.stp @@ -1,43 +1,3 @@ -%{ -#include -#include -%} -function rpcprocnum:long(_msg:long) -%{ - struct rpc_message *msg = (struct rpc_message *)(long) kread(&(THIS->_msg)); - struct rpc_procinfo *rpc_proc = - (struct rpc_procinfo *)(long) kread(&(msg->rpc_proc)); - - THIS->__retvalue = rpc_proc->p_proc; - - CATCH_DEREF_FAULT(); -%} -function rpcprocname:string(_msg:long) -%{ - struct rpc_message *msg = (struct rpc_message *)(long) kread(&(THIS->_msg)); - struct rpc_procinfo *rpc_proc = - (struct rpc_procinfo *)(long) kread(&(msg->rpc_proc)); - char *p_name = kread(&(rpc_proc->p_name)); - char buf[MAXSTRINGLEN]; - - snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s(%d)", - p_name ? p_name : "NULL" , rpc_proc->p_proc); - - CATCH_DEREF_FAULT(); -%} -function rpcprogname:string(_clnt:long) -%{ - struct rpc_clnt *clnt = (struct rpc_clnt *)(long) kread(&(THIS->_clnt)); - char *cl_server = kread(&(clnt->cl_server)); - char *cl_protname = kread(&(clnt->cl_protname)); - char buf[MAXSTRINGLEN]; - - snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s:%s", - cl_server ? cl_server : "NULL" , - cl_protname ? cl_protname : "NULL" ); - - CATCH_DEREF_FAULT(); -%} global syn_clnt, syn_msg, syn_flags global asyn_clnt, asyn_msg, asyn_flags global show_all diff --git a/tapset/rpc_clnt.stp b/tapset/rpc_clnt.stp new file mode 100644 index 0000000..587a67b --- /dev/null +++ b/tapset/rpc_clnt.stp @@ -0,0 +1,42 @@ +%{ +#include +#include +%} +function rpcprocnum:long(_msg:long) +%{ + struct rpc_message *msg = (struct rpc_message *)(long) kread(&(THIS->_msg)); + struct rpc_procinfo *rpc_proc = + (struct rpc_procinfo *)(long) kread(&(msg->rpc_proc)); + + THIS->__retvalue = rpc_proc->p_proc; + + CATCH_DEREF_FAULT(); +%} +function rpcprocname:string(_msg:long) +%{ + struct rpc_message *msg = (struct rpc_message *)(long) kread(&(THIS->_msg)); + struct rpc_procinfo *rpc_proc = + (struct rpc_procinfo *)(long) kread(&(msg->rpc_proc)); + char *p_name = kread(&(rpc_proc->p_name)); + char buf[MAXSTRINGLEN]; + + snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s(%d)", + p_name ? p_name : "NULL" , rpc_proc->p_proc); + + CATCH_DEREF_FAULT(); +%} +function rpcprogname:string(_clnt:long) +%{ + struct rpc_clnt *clnt = (struct rpc_clnt *)(long) kread(&(THIS->_clnt)); + char *cl_server = kread(&(clnt->cl_server)); + char *cl_protname = kread(&(clnt->cl_protname)); + char buf[MAXSTRINGLEN]; + + snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s:%s(%d)", + cl_server ? cl_server : "NULL" , + cl_protname ? cl_protname : "NULL", + clnt->cl_vers); + + CATCH_DEREF_FAULT(); +%} + diff --git a/tapset/task.stp b/tapset/task.stp index bb74118..f98d7be 100644 --- a/tapset/task.stp +++ b/tapset/task.stp @@ -171,7 +171,7 @@ function cl_server:string(_task:long) %{ struct rpc_task *task = (struct rpc_task *)(long) kread(&(THIS->_task)); struct rpc_clnt *clnt; - char *cl_server; + char *cl_server = NULL; if (task) { clnt = (struct rpc_clnt *)(long) kread(&(task->tk_client)); diff --git a/tracepoints/rpc_sched_events.stp b/tracepoints/rpc_sched_events.stp new file mode 100644 index 0000000..1189f07 --- /dev/null +++ b/tracepoints/rpc_sched_events.stp @@ -0,0 +1,32 @@ +/* + * stap -g -I ../tapset rpc_sched_events.stp + */ +probe kernel.trace("rpc_task_begin") +{ + printf("%s[%d]:%s:%s: %s\n", + execname(), pid(), $$name, rpcprogname($clnt), $$parms); + +} +probe kernel.trace("rpc_task_complete") +{ + printf("%s[%d]:%s:%s: %s\n", + execname(), pid(), $$name, rpcprogname($clnt), $$parms); +} +probe kernel.trace("rpc_task_sleep") +{ + printf("%s[%d]:%s:%s: %s\n", + execname(), pid(), $$name, rpcprogname($clnt), $$parms); +} +probe kernel.trace("rpc_task_wakeup") +{ + printf("%s[%d]:%s:%s: %s\n", + execname(), pid(), $$name, rpcprogname($clnt), $$parms); +} +probe kernel.trace("rpc_task_run_action") +{ + printf("%s[%d]:%s:%s: %s\n", + execname(), pid(), $$name, rpcprogname($clnt), $$parms); +} + +probe begin { log("starting rpc sched events probe") } +probe end { log("ending rpc events events probe") } -- cgit