summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsrikar <srikar>2007-09-04 10:36:59 +0000
committersrikar <srikar>2007-09-04 10:36:59 +0000
commit86963113d4e3b10cd08389873c0eff62ba79f516 (patch)
tree1a7dd6fc33e2475dc26a2c298a6b8f599ce1d640
parentc4830239d5dc029bd935e0903a417815b894c96a (diff)
downloadsystemtap-steved-86963113d4e3b10cd08389873c0eff62ba79f516.tar.gz
systemtap-steved-86963113d4e3b10cd08389873c0eff62ba79f516.tar.xz
systemtap-steved-86963113d4e3b10cd08389873c0eff62ba79f516.zip
Added open_file_handles tapset function and man page for task tapsets.
-rw-r--r--man/ChangeLog5
-rw-r--r--man/stapprobes.task.5.in207
-rw-r--r--tapset/task.stp34
-rwxr-xr-xtestsuite/buildok/task_test.stp2
4 files changed, 248 insertions, 0 deletions
diff --git a/man/ChangeLog b/man/ChangeLog
index 8423dc27..98c22b84 100644
--- a/man/ChangeLog
+++ b/man/ChangeLog
@@ -1,3 +1,8 @@
+
+2007-09-04 Srinivasa DS <srinivasa@in.ibm.com>
+
+ * stapprobes.task.5.in: New task tapset man page.
+
2007-01-23 Mike Mason <mmlnx@us.ibm.com>
* stapprobes.socket.5.in: New sockets tapset man page.
diff --git a/man/stapprobes.task.5.in b/man/stapprobes.task.5.in
new file mode 100644
index 00000000..83d887e6
--- /dev/null
+++ b/man/stapprobes.task.5.in
@@ -0,0 +1,207 @@
+.\" -*- nroff -*-
+.TH STAPPROBES.TASK 5 @DATE@ "IBM"
+.SH NAME
+stapprobes.task \- systemtap task information
+
+.\" macros
+.de SAMPLE
+.br
+.RS
+.nf
+.nh
+..
+.de ESAMPLE
+.hy
+.fi
+.RE
+..
+
+.SH DESCRIPTION
+
+This family of tapset functions is used to collect information about tasks.
+It contains the following functions.
+
+.P
+.TP
+.B task_current:long()
+
+Return the task_struct of the current process.
+
+.P
+.TP
+.B task_parent:long(task:long)
+
+Return the parent task_struct of the given task.
+
+.B Arguments:
+
+.I task
+ task_struct of the task.
+
+.P
+.TP
+.B task_state:long(task:long)
+
+Return the state of the given task. State of the task could be, one among the following.
+
+ TASK_RUNNING 0
+ TASK_INTERRUPTIBLE 1
+ TASK_UNINTERRUPTIBLE 2
+ TASK_STOPPED 4
+ TASK_TRACED 8
+ EXIT_ZOMBIE 16
+ EXIT_DEAD 32
+
+
+.B Arguments:
+
+.I task
+ task_struct of the task.
+
+.P
+.TP
+.B task_execname:string(task:long)
+
+Return the name of the given task.
+
+.B Arguments:
+
+.I task
+ task_struct of the task.
+
+
+.P
+.TP
+.B task_pid:long(task:long)
+
+Return the process id of the given task.
+
+.B Arguments:
+
+.I task
+ task_struct of the task.
+
+.P
+.TP
+.B task_tid:long(task:long)
+
+Return the thread id of the given task.
+
+.B Arguments:
+
+.I task
+ task_struct of the task.
+
+.P
+.TP
+
+.B task_gid:long(task:long)
+
+Return the group id of the given task.
+
+.B Arguments:
+
+.I task
+ task_struct of the task.
+
+.P
+.TP
+
+.B task_egid:long(task:long)
+
+Return the effective group id of the given task.
+
+.B Arguments:
+
+.I task
+ task_struct of the task.
+
+.P
+.TP
+
+.B task_uid:long(task:long)
+
+Return the user id of the given task.
+
+.B Arguments:
+
+.I task
+ task_struct of the task.
+
+.P
+.TP
+
+.B task_euid:long(task:long)
+
+Return the effective user id of the given task.
+
+.B Arguments:
+
+.I task
+ task_struct of the task.
+
+.P
+.TP
+
+.B task_prio:long(task:long)
+
+Return the priority of the given task.
+
+.B Arguments:
+
+.I task
+ task_struct of the task.
+
+.P
+.TP
+
+.B task_nice:long(task:long)
+
+Return the nice value of the given task.
+
+.B Arguments:
+
+.I task
+ task_struct of the task.
+
+.P
+.TP
+
+.B task_cpu:long(task:long)
+
+Return the scheduled cpu for the given task.
+
+.B Arguments:
+
+.I task
+ task_struct of the task.
+
+.P
+.TP
+
+.B task_open_file_handles:long(task:long)
+
+Return the number of open file handles for the given task.
+
+.B Arguments:
+
+.I task
+ task_struct of the task.
+
+.P
+.TP
+
+.B task_max_file_handles:long(task:long)
+
+Return the maximum number of file handles for the given task.
+
+.B Arguments:
+
+.I task
+ task_struct of the task.
+
+
+.SH SEE ALSO
+.IR stap (1),
+.IR stapprobes (5),
+
diff --git a/tapset/task.stp b/tapset/task.stp
index 97ae5c7e..947351c6 100644
--- a/tapset/task.stp
+++ b/tapset/task.stp
@@ -6,6 +6,10 @@
// Public License (GPL); either version 2, or (at your option) any
// later version.
+%{
+#include <linux/version.h>
+#include <linux/file.h>
+%}
// Return the task_struct representing the current process
function task_current:long () %{ /* pure */
@@ -125,3 +129,33 @@ function task_cpu:long (task:long)
CATCH_DEREF_FAULT();
%}
%)
+
+
+// Return the number of open file handlers for the given task
+function task_open_file_handles:long (task:long) %{ /* pure */
+ struct task_struct *t = (struct task_struct *)(long)THIS->task;
+ struct files_struct *f = kread(&(t->files));
+ struct fdtable *fdt = kread(&(f->fdt));
+ unsigned int count=0, fd, max;
+ rcu_read_lock();
+ max = kread(&(fdt->max_fds));
+ for (fd = 0; fd < max; fd++) {
+ if ( kread(&(fdt->fd[fd])) != NULL)
+ count ++;
+ }
+ rcu_read_unlock();
+ THIS->__retvalue = count;
+ CATCH_DEREF_FAULT();
+%}
+
+
+// Return the maximum number of file handlers for the given task
+function task_max_file_handles:long (task:long) %{ /* pure */
+ struct task_struct *t = (struct task_struct *)(long)THIS->task;
+ struct files_struct *f = kread (&(t->files));
+ struct fdtable *fdt = kread(&(f->fdt));
+ rcu_read_lock();
+ THIS->__retvalue = kread(&(fdt->max_fds));
+ rcu_read_unlock();
+ CATCH_DEREF_FAULT();
+%}
diff --git a/testsuite/buildok/task_test.stp b/testsuite/buildok/task_test.stp
index 17fa7fb3..c8da7da5 100755
--- a/testsuite/buildok/task_test.stp
+++ b/testsuite/buildok/task_test.stp
@@ -14,5 +14,7 @@ probe begin {
log(sprint(task_prio(c)))
log(sprint(task_nice(c)))
log(sprint(task_cpu(c)))
+ log(sprint(task_open_file_handles(c)))
+ log(sprint(task_max_file_handles(c)))
exit()
}