summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Dickson <steved@redhat.com>2012-01-23 14:36:28 -0500
committerSteve Dickson <steved@redhat.com>2012-01-23 14:36:28 -0500
commit1be52c0b9f8ade90aaa5d955ae655d5d9d8d8461 (patch)
treeae2e00382c407fb34d3ebc68985f1a7d2d45b540
parent8dc5f487ec8f810704bdc70191d7b4e71f5f6174 (diff)
downloadsystemtap-1be52c0b9f8ade90aaa5d955ae655d5d9d8d8461.tar.gz
systemtap-1be52c0b9f8ade90aaa5d955ae655d5d9d8d8461.tar.xz
systemtap-1be52c0b9f8ade90aaa5d955ae655d5d9d8d8461.zip
Added in new sunrpc sched trace points.
Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--sunrpc/sunrpc.stp40
-rw-r--r--tapset/rpc_clnt.stp42
-rw-r--r--tapset/task.stp2
-rw-r--r--tracepoints/rpc_sched_events.stp32
4 files changed, 75 insertions, 41 deletions
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 <linux/sunrpc/sched.h>
-#include <linux/sunrpc/clnt.h>
-%}
-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 <linux/sunrpc/sched.h>
+#include <linux/sunrpc/clnt.h>
+%}
+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") }