Merge branch 'perf_net_dropmonitor'
Ben Hutchings says: ==================== Somewhat surprisingly, the net_dropmonitor reporting script doesn't work at all. This series fixes it and then makes it slightly more efficient. ==================== Signed-off-by: David S. Miller <davem@davemloft.net> Acked-by: Neil Horman <nhorman@tuxdriver.com>
This commit is contained in:
commit
09fd61d3e6
|
@ -15,35 +15,38 @@ kallsyms = []
|
|||
|
||||
def get_kallsyms_table():
|
||||
global kallsyms
|
||||
|
||||
try:
|
||||
f = open("/proc/kallsyms", "r")
|
||||
linecount = 0
|
||||
for line in f:
|
||||
linecount = linecount+1
|
||||
f.seek(0)
|
||||
except:
|
||||
return
|
||||
|
||||
|
||||
j = 0
|
||||
for line in f:
|
||||
loc = int(line.split()[0], 16)
|
||||
name = line.split()[2]
|
||||
j = j +1
|
||||
if ((j % 100) == 0):
|
||||
print "\r" + str(j) + "/" + str(linecount),
|
||||
kallsyms.append({ 'loc': loc, 'name' : name})
|
||||
|
||||
print "\r" + str(j) + "/" + str(linecount)
|
||||
kallsyms.append((loc, name))
|
||||
kallsyms.sort()
|
||||
return
|
||||
|
||||
def get_sym(sloc):
|
||||
loc = int(sloc)
|
||||
for i in kallsyms:
|
||||
if (i['loc'] >= loc):
|
||||
return (i['name'], i['loc']-loc)
|
||||
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")
|
||||
|
@ -64,7 +67,7 @@ def trace_end():
|
|||
|
||||
# called from perf, when it finds a correspoinding event
|
||||
def skb__kfree_skb(name, context, cpu, sec, nsec, pid, comm,
|
||||
skbaddr, protocol, location):
|
||||
skbaddr, location, protocol):
|
||||
slocation = str(location)
|
||||
try:
|
||||
drop_log[slocation] = drop_log[slocation] + 1
|
||||
|
|
Loading…
Reference in New Issue