diff options
author | Dave Brolley <brolley@redhat.com> | 2008-08-08 15:15:19 -0400 |
---|---|---|
committer | Dave Brolley <brolley@redhat.com> | 2008-08-08 15:15:19 -0400 |
commit | 71906647386a9684086b0542318b536d95ae089c (patch) | |
tree | fb0348d7bb34095e95ad830da8e832bad9187a55 /testsuite/systemtap.examples/process/sleepingBeauties.stp | |
parent | d5658775da9fa0ac792eb3f874df9f7c4d60de7e (diff) | |
parent | f1118e1032612170cae8cd979cd529722ad95fdb (diff) | |
download | systemtap-steved-71906647386a9684086b0542318b536d95ae089c.tar.gz systemtap-steved-71906647386a9684086b0542318b536d95ae089c.tar.xz systemtap-steved-71906647386a9684086b0542318b536d95ae089c.zip |
Merge branch 'master' of ssh://sources.redhat.com/git/systemtap
Conflicts:
ChangeLog
testsuite/ChangeLog
Diffstat (limited to 'testsuite/systemtap.examples/process/sleepingBeauties.stp')
-rw-r--r-- | testsuite/systemtap.examples/process/sleepingBeauties.stp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/testsuite/systemtap.examples/process/sleepingBeauties.stp b/testsuite/systemtap.examples/process/sleepingBeauties.stp new file mode 100644 index 00000000..64c563a3 --- /dev/null +++ b/testsuite/systemtap.examples/process/sleepingBeauties.stp @@ -0,0 +1,58 @@ +#! /usr/bin/stap + +function time () { return gettimeofday_ms() } +global time_name = "ms" +global boredom = 10 # in time units +global name, back, backtime, bored + +/* Note: the order that the probes are listed should not matter. + However, the following order for + probe kernel.function("wait_for_completion").return and + probe kernel.function("wait_for_completion").call + avoids have the kretprobe stuff in the backtrace. + for more information see: + http://sources.redhat.com/bugzilla/show_bug.cgi?id=6436 +*/ + + +probe kernel.function("wait_for_completion").return +{ + t=tid() + + if ([t] in bored) { + patience = time() - backtime[t] + printf ("thread %d (%s) bored for %d %s\n", + t, name[t], patience, time_name) + } + + delete bored[t] + delete back[t] + delete name[t] + delete backtime[t] +} + + +probe kernel.function("wait_for_completion").call +{ + t=tid() + back[t]=backtrace() + name[t]=execname() + backtime[t]=time() + delete bored[t] +} + + +probe timer.profile { + foreach (tid+ in back) { + if ([tid] in bored) continue + + patience = time() - backtime[tid] + if (patience >= boredom) { + printf ("thread %d (%s) impatient after %d %s\n", + tid, name[tid], patience, time_name) + print_stack (back[tid]) + printf ("\n") + bored[tid] = 1 # defer further reports to wakeup + } + } +} |