diff options
author | Frank Ch. Eigler <fche@elastic.org> | 2008-04-25 16:33:24 -0400 |
---|---|---|
committer | Frank Ch. Eigler <fche@elastic.org> | 2008-04-25 16:33:24 -0400 |
commit | 76d647dc1fdf1d6bb4397f4a3b819003492dfda6 (patch) | |
tree | 51b9d7a1f0ee75a41c487828d5e62c6a70b7fd28 /testsuite/systemtap.examples/futexes.stp | |
parent | c47ccf304e6560cb50c86c2a5213c8de56678449 (diff) | |
parent | 9f99b110fbee8a6935ca60c152cc3c7cd809461b (diff) | |
download | systemtap-steved-76d647dc1fdf1d6bb4397f4a3b819003492dfda6.tar.gz systemtap-steved-76d647dc1fdf1d6bb4397f4a3b819003492dfda6.tar.xz systemtap-steved-76d647dc1fdf1d6bb4397f4a3b819003492dfda6.zip |
Merge branch 'master' of ssh://sources.redhat.com/git/systemtap into pr6429-comp-unwindsyms
* 'master' of ssh://sources.redhat.com/git/systemtap:
simplify systemtap.spec configuration vars
Handles markers with no format string.
Fixed task_finder.c kernel 2.6.25 change.
PR6454: fix "stap -l" listing of space-laden probe point names
Move examples to testsuite/systemtap.examples.
PR6451: avoid one class of staprun shutdown deadlock (module/.ctl filehandle = 0)
Made kernel 2.6.25 changes in task_finder.c.
Move examples to testsuite/systemtap.examples
PR6416: extend probing blacklist with more init/exit sections
Diffstat (limited to 'testsuite/systemtap.examples/futexes.stp')
-rwxr-xr-x | testsuite/systemtap.examples/futexes.stp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/testsuite/systemtap.examples/futexes.stp b/testsuite/systemtap.examples/futexes.stp new file mode 100755 index 00000000..16c62937 --- /dev/null +++ b/testsuite/systemtap.examples/futexes.stp @@ -0,0 +1,36 @@ +#! /usr/bin/env stap + +# This script tries to identify contended user-space locks by hooking +# into the futex system call. + +global thread_thislock # short +global thread_blocktime # +global FUTEX_WAIT = 0 /*, FUTEX_WAKE = 1 */ + +global lock_waits # long-lived stats on (tid,lock) blockage elapsed time +global process_names # long-lived pid-to-execname mapping + +probe syscall.futex { + if (op != FUTEX_WAIT) next # we don't care about originators of WAKE events + t = tid () + process_names[pid()] = execname() + thread_thislock[t] = $uaddr + thread_blocktime[t] = gettimeofday_us() +} + +probe syscall.futex.return { + t = tid() + ts = thread_blocktime[t] + if (ts) { + elapsed = gettimeofday_us() - ts + lock_waits[pid(), thread_thislock[t]] <<< elapsed + delete thread_blocktime[t] + delete thread_thislock[t] + } +} + +probe end { + foreach ([pid+, lock] in lock_waits) + printf ("%s[%d] lock %p contended %d times, %d avg us\n", + process_names[pid], pid, lock, @count(lock_waits[pid,lock]), @avg(lock_waits[pid,lock])) +} |