Commit 0ce58bae authored by Ben Hutchings's avatar Ben Hutchings Committed by David S. Miller

perf: net_dropmonitor: Use bisection in symbol lookup

Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 326017c7
...@@ -40,10 +40,24 @@ def get_kallsyms_table(): ...@@ -40,10 +40,24 @@ def get_kallsyms_table():
def get_sym(sloc): def get_sym(sloc):
loc = int(sloc) loc = int(sloc)
for symloc, name in kallsyms[::-1]:
if loc >= symloc: # Invariant: kallsyms[i][0] <= loc for all 0 <= i <= start
return (name, loc - symloc) # kallsyms[i][0] > loc for all end <= i < len(kallsyms)
return (None, 0) 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(): def print_drop_table():
print "%25s %25s %25s" % ("LOCATION", "OFFSET", "COUNT") print "%25s %25s %25s" % ("LOCATION", "OFFSET", "COUNT")
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment