# futex contention # (c) 2010, Arnaldo Carvalho de Melo <acme@redhat.com> # 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, 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 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 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) next.git/refs/?id=a96dfddbcc04336bbed50dc2b24823e45e09e80c'>refs</a><a href='/cgit.cgi/linux/net-next.git/log/include'>log</a><a href='/cgit.cgi/linux/net-next.git/tree/include?id=a96dfddbcc04336bbed50dc2b24823e45e09e80c'>tree</a><a href='/cgit.cgi/linux/net-next.git/commit/include?id=a96dfddbcc04336bbed50dc2b24823e45e09e80c'>commit</a><a class='active' href='/cgit.cgi/linux/net-next.git/diff/include?id=a96dfddbcc04336bbed50dc2b24823e45e09e80c'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit.cgi/linux/net-next.git/log/include'> <input type='hidden' name='id' value='a96dfddbcc04336bbed50dc2b24823e45e09e80c'/><select name='qt'> <option value='grep'>log msg</option> <option value='author'>author</option> <option value='committer'>committer</option> <option value='range'>range</option> </select> <input class='txt' type='search' size='10' name='q' value=''/> <input type='submit' value='search'/> </form> </td></tr></table> <div class='path'>path: <a href='/cgit.cgi/linux/net-next.git/diff/?id=a96dfddbcc04336bbed50dc2b24823e45e09e80c'>root</a>/<a href='/cgit.cgi/linux/net-next.git/diff/include?id=a96dfddbcc04336bbed50dc2b24823e45e09e80c'>include</a></div><div class='content'><div class='cgit-panel'><b>diff options</b><form method='get'><input type='hidden' name='id' value='a96dfddbcc04336bbed50dc2b24823e45e09e80c'/><table><tr><td colspan='2'/></tr><tr><td class='label'>context:</td><td class='ctrl'><select name='context' onchange='this.form.submit();'><option value='1'>1</option><option value='2'>2</option><option value='3' selected='selected'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option></select></td></tr><tr><td class='label'>space:</td><td class='ctrl'><select name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><div class='diffstat-header'><a href='/cgit.cgi/linux/net-next.git/diff/?id=a96dfddbcc04336bbed50dc2b24823e45e09e80c'>Diffstat</a> (limited to 'include')</div><table summary='diffstat' class='diffstat'><tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/cgit.cgi/linux/net-next.git/diff/include/linux/memory_hotplug.h?id=a96dfddbcc04336bbed50dc2b24823e45e09e80c'>include/linux/memory_hotplug.h</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='3%'><tr><td class='add' style='width: 66.7%;'/><td class='rem' style='width: 33.3%;'/><td class='none' style='width: 0.0%;'/></tr></table></td></tr> </table><div class='diffstat-summary'>1 files changed, 2 insertions, 1 deletions</div><table summary='diff' class='diff'><tr><td><div class='head'>diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h