summaryrefslogtreecommitdiffstats
path: root/testsuite/systemtap.examples/profiling/timeout.stp
diff options
context:
space:
mode:
authorDave Brolley <brolley@redhat.com>2009-01-28 17:32:26 -0500
committerDave Brolley <brolley@redhat.com>2009-01-28 17:32:26 -0500
commit83e08fc5458e8196d5f0ed5790f9f7de77a80bb6 (patch)
tree15618178034c68be6af0c84800935d9f542de151 /testsuite/systemtap.examples/profiling/timeout.stp
parentcbac7162a67d401506a35757b057aae43bf79e73 (diff)
parent852b1d5c70186dbadd55d081d8547c76bcdf1d29 (diff)
downloadsystemtap-steved-83e08fc5458e8196d5f0ed5790f9f7de77a80bb6.tar.gz
systemtap-steved-83e08fc5458e8196d5f0ed5790f9f7de77a80bb6.tar.xz
systemtap-steved-83e08fc5458e8196d5f0ed5790f9f7de77a80bb6.zip
Merge branch 'master' of git://sources.redhat.com/git/systemtap
Diffstat (limited to 'testsuite/systemtap.examples/profiling/timeout.stp')
-rw-r--r--testsuite/systemtap.examples/profiling/timeout.stp102
1 files changed, 102 insertions, 0 deletions
diff --git a/testsuite/systemtap.examples/profiling/timeout.stp b/testsuite/systemtap.examples/profiling/timeout.stp
new file mode 100644
index 00000000..48d6d21d
--- /dev/null
+++ b/testsuite/systemtap.examples/profiling/timeout.stp
@@ -0,0 +1,102 @@
+#! /usr/bin/env stap
+# Copyright (C) 2009 Red Hat, Inc.
+# Written by Ulrich Drepper <drepper@redhat.com>
+# Modified by William Cohen <wcohen@redhat.com>
+
+global process, timeout_count, to
+global poll_timeout, epoll_timeout, select_timeout, itimer_timeout
+global nanosleep_timeout, futex_timeout, signal_timeout
+
+probe syscall.poll, syscall.epoll_wait {
+ if (timeout) to[pid()]=timeout
+}
+
+probe syscall.poll.return {
+ p = pid()
+ if ($return == 0 && to[p] > 0 ) {
+ poll_timeout[p]++
+ timeout_count[p]++
+ process[p] = execname()
+ delete to[p]
+ }
+}
+
+probe syscall.epoll_wait.return {
+ p = pid()
+ if ($return == 0 && to[p] > 0 ) {
+ epoll_timeout[p]++
+ timeout_count[p]++
+ process[p] = execname()
+ delete to[p]
+ }
+}
+
+probe syscall.select.return {
+ if ($return == 0) {
+ p = pid()
+ select_timeout[p]++
+ timeout_count[p]++
+ process[p] = execname()
+ }
+}
+
+probe syscall.futex.return {
+ if (errno_str($return) == "ETIMEDOUT") {
+ p = pid()
+ futex_timeout[p]++
+ timeout_count[p]++
+ process[p] = execname()
+ }
+}
+
+probe syscall.nanosleep.return {
+ if ($return == 0) {
+ p = pid()
+ nanosleep_timeout[p]++
+ timeout_count[p]++
+ process[p] = execname()
+ }
+}
+
+probe kernel.function("it_real_fn") {
+ p = pid()
+ itimer_timeout[p]++
+ timeout_count[p]++
+ process[p] = execname()
+}
+
+probe syscall.rt_sigtimedwait.return {
+ if (errno_str($return) == "EAGAIN") {
+ p = pid()
+ signal_timeout[p]++
+ timeout_count[p]++
+ process[p] = execname()
+ }
+}
+
+probe syscall.exit {
+ p = pid()
+ if (p in process) {
+ delete process[p]
+ delete timeout_count[p]
+ delete poll_timeout[p]
+ delete epoll_timeout[p]
+ delete select_timeout[p]
+ delete itimer_timeout[p]
+ delete futex_timeout[p]
+ delete nanosleep_timeout[p]
+ delete signal_timeout[p]
+ }
+}
+
+probe timer.s(1) {
+ printf("\033[2J\033[1;1H") /* clear screen */
+ printf (" uid | poll select epoll itimer futex nanosle signal| process\n")
+ foreach (p in timeout_count- limit 20) {
+ printf ("%5d |%7d %7d %7d %7d %7d %7d %7d| %-.38s\n", p,
+ poll_timeout[p], select_timeout[p],
+ epoll_timeout[p], itimer_timeout[p],
+ futex_timeout[p], nanosleep_timeout[p],
+ signal_timeout[p], process[p])
+ }
+}