2011-07-04 13:40:17 -04:00
# Monitor the system for dropped packets and proudce a report of drop locations and counts
import os
import sys
sys . path . append ( os . environ [ ' PERF_EXEC_PATH ' ] + \
' /scripts/python/Perf-Trace-Util/lib/Perf/Trace ' )
from perf_trace_context import *
from Core import *
from Util import *
drop_log = { }
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 ) ,
2013-05-20 14:45:34 +00:00
kallsyms . append ( ( loc , name ) )
2011-07-04 13:40:17 -04:00
print " \r " + str ( j ) + " / " + str ( linecount )
kallsyms . sort ( )
return
def get_sym ( sloc ) :
loc = int ( sloc )
2013-05-20 14:45:34 +00:00
for symloc , name in kallsyms [ : : - 1 ] :
if loc > = symloc :
return ( name , loc - symloc )
2011-07-04 13:40:17 -04:00
return ( None , 0 )
def print_drop_table ( ) :
print " %25s %25s %25s " % ( " LOCATION " , " OFFSET " , " COUNT " )
for i in drop_log . keys ( ) :
( sym , off ) = get_sym ( i )
if sym == None :
sym = i
print " %25s %25s %25s " % ( sym , off , drop_log [ i ] )
def trace_begin ( ) :
print " Starting trace (Ctrl-C to dump results) "
def trace_end ( ) :
print " Gathering kallsyms data "
get_kallsyms_table ( )
print_drop_table ( )
# called from perf, when it finds a correspoinding event
def skb__kfree_skb ( name , context , cpu , sec , nsec , pid , comm ,
2013-05-20 14:44:43 +00:00
skbaddr , location , protocol ) :
2011-07-04 13:40:17 -04:00
slocation = str ( location )
try :
drop_log [ slocation ] = drop_log [ slocation ] + 1
except :
drop_log [ slocation ] = 1