From 3ec5b94a347cdd450949444a433abbd2bcff1aa5 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Mon, 20 May 2013 14:45:42 +0000 Subject: [PATCH] --- yaml --- r: 376164 b: refs/heads/master c: 0ce58bae851dc3728af1c0b83905cd6b4565417a h: refs/heads/master v: v3 --- [refs] | 2 +- .../perf/scripts/python/net_dropmonitor.py | 22 +++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 653156080d01..aef0e9f56588 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 326017c757e387007c6629797d7ae22fd33c1317 +refs/heads/master: 0ce58bae851dc3728af1c0b83905cd6b4565417a diff --git a/trunk/tools/perf/scripts/python/net_dropmonitor.py b/trunk/tools/perf/scripts/python/net_dropmonitor.py index 6acdc82ef47f..32fcee05c0f6 100755 --- a/trunk/tools/perf/scripts/python/net_dropmonitor.py +++ b/trunk/tools/perf/scripts/python/net_dropmonitor.py @@ -40,10 +40,24 @@ def get_kallsyms_table(): def get_sym(sloc): loc = int(sloc) - for symloc, name in kallsyms[::-1]: - if loc >= symloc: - return (name, loc - symloc) - return (None, 0) + + # Invariant: kallsyms[i][0] <= loc for all 0 <= i <= start + # kallsyms[i][0] > loc for all end <= i < len(kallsyms) + start, end = -1, len(kallsyms) + while end != start + 1: + pivot = (start + end) // 2 + if loc < kallsyms[pivot][0]: + end = pivot + else: + start = pivot + + # Now (start == -1 or kallsyms[start][0] <= loc) + # and (start == len(kallsyms) - 1 or loc < kallsyms[start + 1][0]) + if start >= 0: + symloc, name = kallsyms[start] + return (name, loc - symloc) + else: + return (None, 0) def print_drop_table(): print "%25s %25s %25s" % ("LOCATION", "OFFSET", "COUNT")