summaryrefslogtreecommitdiffstats
path: root/tools/perf/scripts
diff options
context:
space:
mode:
authorBen Hutchings <ben@decadent.org.uk>2013-05-20 10:45:42 -0400
committerDavid S. Miller <davem@davemloft.net>2013-05-22 18:10:10 -0400
commit0ce58bae851dc3728af1c0b83905cd6b4565417a (patch)
tree3fd036c3c7219f200cd45d859ae97e4e7989cce1 /tools/perf/scripts
parent326017c757e387007c6629797d7ae22fd33c1317 (diff)
perf: net_dropmonitor: Use bisection in symbol lookup
Signed-off-by: Ben Hutchings <ben@decadent.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'tools/perf/scripts')
-rwxr-xr-xtools/perf/scripts/python/net_dropmonitor.py22
1 files changed, 18 insertions, 4 deletions
diff --git a/tools/perf/scripts/python/net_dropmonitor.py b/tools/perf/scripts/python/net_dropmonitor.py
index 6acdc82ef47f..32fcee05c0f6 100755
--- a/tools/perf/scripts/python/net_dropmonitor.py
+++ b/tools/perf/scripts/python/net_dropmonitor.py
@@ -40,10 +40,24 @@ def get_kallsyms_table():
40 40
41def get_sym(sloc): 41def get_sym(sloc):
42 loc = int(sloc) 42 loc = int(sloc)
43 for symloc, name in kallsyms[::-1]: 43
44 if loc >= symloc: 44 # Invariant: kallsyms[i][0] <= loc for all 0 <= i <= start
45 return (name, loc - symloc) 45 # kallsyms[i][0] > loc for all end <= i < len(kallsyms)
46 return (None, 0) 46 start, end = -1, len(kallsyms)
47 while end != start + 1:
48 pivot = (start + end) // 2
49 if loc < kallsyms[pivot][0]:
50 end = pivot
51 else:
52 start = pivot
53
54 # Now (start == -1 or kallsyms[start][0] <= loc)
55 # and (start == len(kallsyms) - 1 or loc < kallsyms[start + 1][0])
56 if start >= 0:
57 symloc, name = kallsyms[start]
58 return (name, loc - symloc)
59 else:
60 return (None, 0)
47 61
48def print_drop_table(): 62def print_drop_table():
49 print "%25s %25s %25s" % ("LOCATION", "OFFSET", "COUNT") 63 print "%25s %25s %25s" % ("LOCATION", "OFFSET", "COUNT")