diff options
author | Steve Dickson <steved@redhat.com> | 2008-01-29 15:02:30 -0500 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2008-01-29 15:02:30 -0500 |
commit | a0630d519e87f5c5d851d3127085a50592bb20b4 (patch) | |
tree | 589aff766c2131f715b595de40ed19b57719b0cb /stap_tutorial-1.0/examples/cmd-eval/cmd-eval-futexes.stp | |
download | systemtap-a0630d519e87f5c5d851d3127085a50592bb20b4.tar.gz systemtap-a0630d519e87f5c5d851d3127085a50592bb20b4.tar.xz systemtap-a0630d519e87f5c5d851d3127085a50592bb20b4.zip |
Initial Commit
Diffstat (limited to 'stap_tutorial-1.0/examples/cmd-eval/cmd-eval-futexes.stp')
-rwxr-xr-x | stap_tutorial-1.0/examples/cmd-eval/cmd-eval-futexes.stp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/stap_tutorial-1.0/examples/cmd-eval/cmd-eval-futexes.stp b/stap_tutorial-1.0/examples/cmd-eval/cmd-eval-futexes.stp new file mode 100755 index 0000000..8f2b414 --- /dev/null +++ b/stap_tutorial-1.0/examples/cmd-eval/cmd-eval-futexes.stp @@ -0,0 +1,44 @@ +#!/usr/bin/env stap + +global target_pids, target_execs +global thread_thislock, thread_blocktime +global FUTEX_WAIT = 0, FUTEX_WAKE = 1 +global lock_waits + +probe process.exec_complete { + if (success && (ppid() in target_pids || pid() == target())) + target_pids[pid()] = kernel_string($filename) +} + +probe syscall.futex { + if (!(pid() in target_pids)) next + + if (op != FUTEX_WAIT) next # ignore originators of WAKE events + + t = tid() + thread_thislock[t] = $uaddr + thread_blocktime[t] = gettimeofday_us() +} + +probe syscall.futex.return { + if (!(pid() in target_pids)) next + + if (op != FUTEX_WAIT) next # ignore originators of WAKE events + + 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 %5d times, %9d avg us\n", + target_pids[pid], pid, lock, + @count(lock_waits[pid, lock]), + @avg(lock_waits[pid, lock])) +} |