22 May 2013 22:04
[PATCH] fix aggregate stats in mutex-contention example
Peter Feiner <peter <at> gridcentric.ca>
2013-05-22 20:04:27 GMT
2013-05-22 20:04:27 GMT
Stats that were supposed to be collected per FUTEX_WAIT call site were being collected per mutex init stack. So, in the "aggregate stats" section of the report, you'd see a bunch of stacks with pthread_mutex_init at the top ... which was very confusing because a futex isn't contended when it's created(Continue reading)--- .../process/mutex-contention.stp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/testsuite/systemtap.examples/process/mutex-contention.stp b/testsuite/systemtap.examples/process/mutex-contention.stp index 4bd0486..eec4b4c 100755 --- a/testsuite/systemtap.examples/process/mutex-contention.stp +++ b/testsuite/systemtap.examples/process/mutex-contention.stp <at> <at> -65,26 +65,22 <at> <at> probe syscall.futex.return { if (keep_stats) { mutex_contention[$uaddr] <<< elapsed stack = sprint_ubacktrace() + mutex_cont_stack[stack] <<< elapsed mutex_last_cont_stack[$uaddr] = stack if ($uaddr in mutex_init_stack) { if (verbose) { printf("contention time %d on mutex %p initialized at\n%s\n", elapsed, $uaddr, mutex_init_stack[$uaddr]) } - stack = mutex_init_stack[$uaddr] - mutex_cont_stack[stack] <<< elapsed } else if ($uaddr in mutex_uninit) { if (verbose) { printf("contention time %d on popup mutex %p at\n%s\n", elapsed, $uaddr, stack) } - stack = mutex_uninit[$uaddr] - mutex_cont_stack[stack] <<< elapsed
---
.../process/mutex-contention.stp | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/testsuite/systemtap.examples/process/mutex-contention.stp b/testsuite/systemtap.examples/process/mutex-contention.stp
index 4bd0486..eec4b4c 100755
--- a/testsuite/systemtap.examples/process/mutex-contention.stp
+++ b/testsuite/systemtap.examples/process/mutex-contention.stp
<at> <at> -65,26 +65,22 <at> <at> probe syscall.futex.return {
if (keep_stats) {
mutex_contention[$uaddr] <<< elapsed
stack = sprint_ubacktrace()
+ mutex_cont_stack[stack] <<< elapsed
mutex_last_cont_stack[$uaddr] = stack
if ($uaddr in mutex_init_stack) {
if (verbose) {
printf("contention time %d on mutex %p initialized at\n%s\n", elapsed, $uaddr, mutex_init_stack[$uaddr])
}
- stack = mutex_init_stack[$uaddr]
- mutex_cont_stack[stack] <<< elapsed
} else if ($uaddr in mutex_uninit) {
if (verbose) {
printf("contention time %d on popup mutex %p at\n%s\n", elapsed, $uaddr, stack)
}
- stack = mutex_uninit[$uaddr]
- mutex_cont_stack[stack] <<< elapsed
RSS Feed