hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/tools/perf/scripts/python/futex-contention.py
....@@ -10,41 +10,48 @@
1010 #
1111 # Measures futex contention
1212
13
-import os, sys
14
-sys.path.append(os.environ['PERF_EXEC_PATH'] + '/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
13
+from __future__ import print_function
14
+
15
+import os
16
+import sys
17
+sys.path.append(os.environ['PERF_EXEC_PATH'] +
18
+ '/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
1519 from Util import *
1620
1721 process_names = {}
1822 thread_thislock = {}
1923 thread_blocktime = {}
2024
21
-lock_waits = {} # long-lived stats on (tid,lock) blockage elapsed time
22
-process_names = {} # long-lived pid-to-execname mapping
25
+lock_waits = {} # long-lived stats on (tid,lock) blockage elapsed time
26
+process_names = {} # long-lived pid-to-execname mapping
27
+
2328
2429 def syscalls__sys_enter_futex(event, ctxt, cpu, s, ns, tid, comm, callchain,
25
- nr, uaddr, op, val, utime, uaddr2, val3):
26
- cmd = op & FUTEX_CMD_MASK
27
- if cmd != FUTEX_WAIT:
28
- return # we don't care about originators of WAKE events
30
+ nr, uaddr, op, val, utime, uaddr2, val3):
31
+ cmd = op & FUTEX_CMD_MASK
32
+ if cmd != FUTEX_WAIT:
33
+ return # we don't care about originators of WAKE events
2934
30
- process_names[tid] = comm
31
- thread_thislock[tid] = uaddr
32
- thread_blocktime[tid] = nsecs(s, ns)
35
+ process_names[tid] = comm
36
+ thread_thislock[tid] = uaddr
37
+ thread_blocktime[tid] = nsecs(s, ns)
38
+
3339
3440 def syscalls__sys_exit_futex(event, ctxt, cpu, s, ns, tid, comm, callchain,
35
- nr, ret):
36
- if thread_blocktime.has_key(tid):
37
- elapsed = nsecs(s, ns) - thread_blocktime[tid]
38
- add_stats(lock_waits, (tid, thread_thislock[tid]), elapsed)
39
- del thread_blocktime[tid]
40
- del thread_thislock[tid]
41
+ nr, ret):
42
+ if tid in thread_blocktime:
43
+ elapsed = nsecs(s, ns) - thread_blocktime[tid]
44
+ add_stats(lock_waits, (tid, thread_thislock[tid]), elapsed)
45
+ del thread_blocktime[tid]
46
+ del thread_thislock[tid]
47
+
4148
4249 def trace_begin():
43
- print "Press control+C to stop and show the summary"
50
+ print("Press control+C to stop and show the summary")
51
+
4452
4553 def trace_end():
46
- for (tid, lock) in lock_waits:
47
- min, max, avg, count = lock_waits[tid, lock]
48
- print "%s[%d] lock %x contended %d times, %d avg ns" % \
49
- (process_names[tid], tid, lock, count, avg)
50
-
54
+ for (tid, lock) in lock_waits:
55
+ min, max, avg, count = lock_waits[tid, lock]
56
+ print("%s[%d] lock %x contended %d times, %d avg ns [max: %d ns, min %d ns]" %
57
+ (process_names[tid], tid, lock, count, avg, max, min))