diff options
Diffstat (limited to 'tools/perf/scripts/python')
| -rw-r--r-- | tools/perf/scripts/python/futex-contention.py | 51 | 
1 files changed, 28 insertions, 23 deletions
| diff --git a/tools/perf/scripts/python/futex-contention.py b/tools/perf/scripts/python/futex-contention.py index 0c4841acf75d..7e884d46f920 100644 --- a/tools/perf/scripts/python/futex-contention.py +++ b/tools/perf/scripts/python/futex-contention.py @@ -12,41 +12,46 @@  from __future__ import print_function -import os, sys -sys.path.append(os.environ['PERF_EXEC_PATH'] + '/scripts/python/Perf-Trace-Util/lib/Perf/Trace') +import os +import 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 +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, callchain, -			      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 +                              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) -	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, callchain, -			     nr, ret): -	if tid in thread_blocktime: -		elapsed = nsecs(s, ns) - thread_blocktime[tid] -		add_stats(lock_waits, (tid, thread_thislock[tid]), elapsed) -		del thread_blocktime[tid] -		del thread_thislock[tid] +                             nr, ret): +    if tid in thread_blocktime: +        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") +    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)) +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 [max: %d ns, min %d ns]" % +              (process_names[tid], tid, lock, count, avg, max, min)) |