summaryrefslogtreecommitdiffstats
path: root/stap_tutorial-1.0/examples/cmd-eval/cmd-eval-opens.stp
diff options
context:
space:
mode:
Diffstat (limited to 'stap_tutorial-1.0/examples/cmd-eval/cmd-eval-opens.stp')
-rwxr-xr-xstap_tutorial-1.0/examples/cmd-eval/cmd-eval-opens.stp73
1 files changed, 73 insertions, 0 deletions
diff --git a/stap_tutorial-1.0/examples/cmd-eval/cmd-eval-opens.stp b/stap_tutorial-1.0/examples/cmd-eval/cmd-eval-opens.stp
new file mode 100755
index 0000000..a040059
--- /dev/null
+++ b/stap_tutorial-1.0/examples/cmd-eval/cmd-eval-opens.stp
@@ -0,0 +1,73 @@
+#!/usr/bin/env stap
+
+global target_pids, target_execs
+global opens_by_file_success, opens_by_exec_success, total_opens_success
+global opens_by_file_fail, opens_by_exec_fail, total_opens_fail
+global closes_by_exec, total_closes
+global open_failure_by_type
+
+probe process.exec_complete {
+ if (success && (ppid() in target_pids || pid() == target())) {
+ target_pids[pid()] = kernel_string($filename)
+ target_execs[kernel_string($filename)] ++
+ }
+}
+
+probe syscall.open.return {
+ if (!(pid() in target_pids)) next
+
+ if ($return >= 0) {
+ opens_by_exec_success[target_pids[pid()]] ++
+ opens_by_file_success[user_string($filename)] ++
+ total_opens_success ++
+ } else {
+ opens_by_exec_fail[target_pids[pid()]] ++
+ opens_by_file_fail[user_string($filename)] ++
+ open_failure_by_type[retstr] ++
+ total_opens_fail ++
+ }
+}
+
+probe syscall.close {
+ if (!(pid() in target_pids)) next
+
+ closes_by_exec[target_pids[pid()]] ++
+ total_closes ++
+}
+
+probe end {
+ prt_limit = 10
+
+ printf ("Total opens: %d (%d succeeded, %d failed)\n",
+ total_opens_success + total_opens_fail,
+ total_opens_success, total_opens_fail)
+ printf ("Total closes: %d\n\n", total_closes)
+
+ printf ("# Binary Instances:\n")
+ foreach(name in target_execs)
+ printf("%d\t%s\n", target_execs[name], name)
+
+ printf("\n# Successful Opens by Binary:\n")
+ foreach (name in opens_by_exec_success-)
+ printf("%d\t%s\n", opens_by_exec_success[name], name)
+
+ printf("\n# Failed Opens by Binary:\n")
+ foreach (name in opens_by_exec_fail-)
+ printf("%d\t%s\n", opens_by_exec_fail[name], name)
+
+ printf("\n# Successful Opens by File (top %d):\n", prt_limit)
+ foreach (name in opens_by_file_success- limit prt_limit)
+ printf("%d\t%s\n", opens_by_file_success[name], name)
+
+ printf("\n# Failed Opens by File: (top %d)\n", prt_limit)
+ foreach (name in opens_by_file_fail- limit prt_limit)
+ printf("%d\t%s\n", opens_by_file_fail[name], name)
+
+ printf("\n# Closes by Binary:\n")
+ foreach (name in closes_by_exec-)
+ printf("%d\t%s\n", closes_by_exec[name], name)
+
+ printf("\n# Open Failures by Type:\n")
+ foreach (type in open_failure_by_type-)
+ printf("%d\t%s\n", open_failure_by_type[type], type)
+}