profiler.py 3.16 KB
Newer Older
German Leon's avatar
German Leon committed
1
import gdb
German Leon's avatar
German Leon committed
2
import os
3
4
5
import time
import re
import sys
German Leon's avatar
German Leon committed
6
import copy
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import common_functions as cf 
from classes.BitFlip import BitFlip

def exit_handler(event):
   global nosalir
   nosalir=False
   print(str("event type: exit"))
   try:
        print("exit code: {}".format(str(event.exit_code)))
   except Exception as err:
        err_str = "ERROR: {}".format(str(err))
        print(err_str)

"""
Handler that will put a breakpoint on the kernel after
signal
"""

def set_event(event):
      global trun,ocurrencias,t,primera
      
      print ("Es mi primera vez"+ str(primera)+"  "+str(ocurrencias))
      if (isinstance(event, gdb.BreakpointEvent)):
        if (primera):
          
          t=time.time()
          print ("Tomo tiempo " + str (t))
          ocurrencias=ocurrencias+1
        else:  
          print ("Para tiempo " + str (time.time()))
          trun=(time.time()-t)
        primera=not primera  
    #  else:  
    #      trun=(time.clock()-t)  
German Leon's avatar
German Leon committed
41
42
43
"""
Main function
"""
44
45
46
47
48
49
50
51
52
53
54
def main():
  global ocurrencias,t,nosalir,trun,primera
  primera=True	;
  ocurrencias=0;


  # Initialize GDB to run the app
  gdb.execute("set confirm off")
  gdb.execute("set pagination off")
  gdb.execute("set target-async off")
  gdb.execute("set non-stop off")
German Leon's avatar
German Leon committed
55

56
57
  # Connecting to a exit handler event
  gdb.events.exited.connect(exit_handler)
German Leon's avatar
German Leon committed
58

59
60
  # Connecting to a stop signal event
  gdb.events.stop.connect(set_event)
German Leon's avatar
German Leon committed
61

62
63
  # gdb_init_strings = str(os.environ["CAROL_FI_INFO"])
  gdb_init_strings = arg0
German Leon's avatar
German Leon committed
64
  cadena=gdb_init_strings.split(";",4)
65
 
German Leon's avatar
German Leon committed
66
  print >>sys.stderr, (gdb_init_strings+"---0:"+cadena[0]+"\n-1:"+cadena[1],"\n-2:",cadena[2],"\n-3:", cadena[3],"\n-4:", cadena[4])
67
68
69
  section =cadena[0]=="True" 
  onlycount=cadena[1]=="True" 
  #print ("B "+section+"ke "+kernel_end+" ....")
German Leon's avatar
German Leon committed
70
71
72
  print (cadena[3].split(";"))
  print("INIT_str {}".format(cadena[4].split(";")))
  for init_str in  cadena[4].split(";"):
German Leon's avatar
German Leon committed
73
     gdb.execute(init_str)
74
75
76
  maxi=0.  
  gdb.execute("r")
  if (onlycount):     
German Leon's avatar
German Leon committed
77
   
78
    ks=cadena[2].split(",") 
German Leon's avatar
German Leon committed
79
80
    #print >>sys.stderr, ("=====================Kernels ")
    #print ("=====================Kernels {}".format(cadena[2]))
81
    listreg=set ()
German Leon's avatar
German Leon committed
82
83
84
85
86
    f=open("tmpxxx/kernels.conf","w")
    f.write("[Kernels]\n")
    print(cadena[2])
    f.write("Nombres={}\n".format(cadena[2]))
    f.write("trace={}\n".format(cadena[3]))    
87
    for x in ks:
German Leon's avatar
German Leon committed
88
89
90
91
92
93
94
95
      f.write("[{}] \n".format(x))
      nm=BitFlip.numreg(x)
      listreg.update(nm) 
      f.write("Registro={}\n".format(len(nm)))
      f.write("Principio={}\n".format(BitFlip.principiokernel(x)))
      f.write("Tamano={}\n".format(BitFlip.lenkernel(x)))
      
    f.close()
96
97
98
    print(listreg)
    maxi=len(listreg)
    print("Maximo..."+str (maxi)+" o  "+str(max([int(x) for x in listreg] ) ))
German Leon's avatar
German Leon committed
99
    #os.system("chmod 444 tmpxxx/kernels.conf")
100
101
  else:
     if (section):
German Leon's avatar
German Leon committed
102
       print("Break & continue");
103
104
       gdb.execute("c")
     else:
German Leon's avatar
German Leon committed
105
106
107
108
109
       print("Finish.........");
       if( len (cadena[2])==0):
         gdb.execute("quit")
       else:
         gdb.execute("finish")
110
  
German Leon's avatar
German Leon committed
111
     f=open("tmpxxx/return_profiler.conf","w")
112
     f.write("[DEFAULT] \nOcurrencias = "+str(ocurrencias)+"\nTiempo = "+str(trun)+"\n")
German Leon's avatar
German Leon committed
113
     
114
115
     f.close()	
  sys.exit(maxi)  
German Leon's avatar
German Leon committed
116

117
main()