diff options
| author | Ingo Molnar <[email protected]> | 2020-11-07 12:50:48 +0100 | 
|---|---|---|
| committer | Ingo Molnar <[email protected]> | 2020-11-07 13:20:17 +0100 | 
| commit | 666fab4a3ea143315a9c059fad9f3a0f1365d54b (patch) | |
| tree | e9e4be3b0eeac79346d52a86183326617d0c9999 /tools/perf/scripts/python/futex-contention.py | |
| parent | 0a986ea81e1aa8ac17e82cda53cc95158217956e (diff) | |
| parent | 659caaf65dc9c7150aa3e80225ec6e66b25ab3ce (diff) | |
Merge branch 'linus' into perf/kprobes
Conflicts:
	include/asm-generic/atomic-instrumented.h
	kernel/kprobes.c
Use the upstream atomic-instrumented.h checksum, and pick
the kprobes version of kernel/kprobes.c, which effectively
reverts this upstream workaround:
  645f224e7ba2: ("kprobes: Tell lockdep about kprobe nesting")
Since the new code *should* be fine without nesting.
Knock on wood ...
Signed-off-by: Ingo Molnar <[email protected]>
Diffstat (limited to 'tools/perf/scripts/python/futex-contention.py')
| -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)) |