forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
perf python scripting: Add futex-contention script
The equivalent to this SystemTAP script: http://sourceware.org/systemtap/wiki/WSFutexContention [root@doppio ~]# perf trace futex-contention Press control+C to stop and show the summary ^Cnpviewer.bin[15242] lock 7f0a8be19104 contended 29 times, 72806 avg ns npviewer.bin[15242] lock 7f0a8be19130 contended 2 times, 1355 avg ns synergyc[17245] lock f127f4 contended 1 times, 1830569 avg ns firefox[15116] lock 7f2b7238af0c contended 168 times, 1230390 avg ns synergyc[17245] lock f2fc20 contended 1 times, 33149 avg ns npviewer.bin[15255] lock 7f0a8be19074 contended 155 times, 73047 avg ns npviewer.bin[15255] lock 7f0a8be190a0 contended 127 times, 7088 avg ns synergyc[17247] lock f12854 contended 1 times, 46741 avg ns synergyc[17245] lock f12610 contended 1 times, 7358 avg ns [root@doppio ~]# Cc: Frederic Weisbecker <[email protected]> Cc: Mike Galbraith <[email protected]> Cc: Paul Mackerras <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Stephane Eranian <[email protected]> Cc: Tom Zanussi <[email protected]> LKML-Reference: <new-submission> Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
- Loading branch information
Showing
4 changed files
with
74 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
#!/bin/bash | ||
perf record -a -e syscalls:sys_enter_futex -e syscalls:sys_exit_futex $@ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#!/bin/bash | ||
# description: futext contention measurement | ||
|
||
perf trace $@ -s "$PERF_EXEC_PATH"/scripts/python/futex-contention.py |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
# futex contention | ||
# (c) 2010, Arnaldo Carvalho de Melo <[email protected]> | ||
# Licensed under the terms of the GNU GPL License version 2 | ||
# | ||
# Translation of: | ||
# | ||
# http://sourceware.org/systemtap/wiki/WSFutexContention | ||
# | ||
# to perf python scripting. | ||
# | ||
# Measures futex contention | ||
|
||
import os, sys | ||
sys.path.append(os.environ['PERF_EXEC_PATH'] + '/scripts/python/Perf-Trace-Util/lib/Perf/Trace') | ||
from Util import * | ||
|
||
process_names = {} | ||
thread_thislock = {} | ||
thread_blocktime = {} | ||
|
||
lock_waits = {} # long-lived stats on (tid,lock) blockage elapsed time | ||
process_names = {} # long-lived pid-to-execname mapping | ||
|
||
def syscalls__sys_enter_futex(event, ctxt, cpu, s, ns, tid, comm, | ||
nr, uaddr, op, val, utime, uaddr2, val3): | ||
cmd = op & FUTEX_CMD_MASK | ||
if cmd != FUTEX_WAIT: | ||
return # we don't care about originators of WAKE events | ||
|
||
process_names[tid] = comm | ||
thread_thislock[tid] = uaddr | ||
thread_blocktime[tid] = nsecs(s, ns) | ||
|
||
def syscalls__sys_exit_futex(event, ctxt, cpu, s, ns, tid, comm, | ||
nr, ret): | ||
if thread_blocktime.has_key(tid): | ||
elapsed = nsecs(s, ns) - thread_blocktime[tid] | ||
add_stats(lock_waits, (tid, thread_thislock[tid]), elapsed) | ||
del thread_blocktime[tid] | ||
del thread_thislock[tid] | ||
|
||
def trace_begin(): | ||
print "Press control+C to stop and show the summary" | ||
|
||
def trace_end(): | ||
for (tid, lock) in lock_waits: | ||
min, max, avg, count = lock_waits[tid, lock] | ||
print "%s[%d] lock %x contended %d times, %d avg ns" % \ | ||
(process_names[tid], tid, lock, count, avg) | ||
|