diff options
author | Ben Hutchings <ben@decadent.org.uk> | 2013-05-20 10:45:42 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-05-22 18:10:10 -0400 |
commit | 0ce58bae851dc3728af1c0b83905cd6b4565417a (patch) | |
tree | 3fd036c3c7219f200cd45d859ae97e4e7989cce1 /tools/perf/scripts | |
parent | 326017c757e387007c6629797d7ae22fd33c1317 (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-x | tools/perf/scripts/python/net_dropmonitor.py | 22 |
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 | ||
41 | def get_sym(sloc): | 41 | def 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 | ||
48 | def print_drop_table(): | 62 | def print_drop_table(): |
49 | print "%25s %25s %25s" % ("LOCATION", "OFFSET", "COUNT") | 63 | print "%25s %25s %25s" % ("LOCATION", "OFFSET", "COUNT") |