#!/usr/bin/python import sys, os, subprocess, random, time, datetime import pexpect, re import os.path from os import path import fnmatch import serial import watchdog import config from config import * if inject: from config_inject import * global w def configurate_serie(): #os.system("sudo stop ttyS0") Puerto=0 Puerto="/dev/ttyS0" try: serie = serial.Serial(Puerto, 115200) serie.timeout=1; except serial.SerialException: #-- Error al abrir el puerto serie sys.stderr.write("Error al abrir puerto (%s)\n" % str(Puerto)) return serie #mantener vivos los watdog softwre y hardware def KeepWatchdog(): #cab=os.environ.get("MYHOME") #if (cab==None): # cab=os.environ.get("HOME") w.keepalive() #os.system(cab+"/bin/refresh_watchdog > watchsoft.test") #os.system("touch watchsoft.test") # Comprime los ficheros con extension .tar def gzipFiles(): listOfFiles = os.listdir('results') for entry in listOfFiles: if fnmatch.fnmatch(entry, "*.tar") or fnmatch.fnmatch(entry, "*.log"): os.system("gzip -f results/" + entry) def writeOutput(serie, output, elapsedTime, outputFileName, fileName): if verbose: print("\n***Elapsed time: %s ms. ***\n" % (elapsedTime)) serie.write("\n***Elapsed time: %s ms. ***\n" % (elapsedTime)) # if verbose: # print("%s " % (output) ) # serie.write("%s " % (output) ) output += "\n\n***Elapsed time: " + `elapsedTime` + " ms. ***\n\n" outputFile = open(outputFileName, "w") outputFile.write(output) outputFile.flush() outputFile.close() # os.system("tar -rvf results/" + fileName + ".tar " + outputFileName) # os.system("rm " + outputFileName) def runBenchmark(fiIni, fileName, tIni): serie=configurate_serie() w=watchdog.watchdog() numTimeouts = 0 if (totalFiNumber == -1): # bucle infinito forever = True else: forever = False if log: stdLogFile = open("results/"+fileName+"_"+tIni+".log", "w") fiNumber = fiIni - 1 while forever or ( (fiNumber+1) < totalFiNumber+1): fiNumber = fiNumber + 1 # KeepWatchdog() w.keepalive() # if (fiNumber > 100): # tout = 90 # else: # tout = timeout if inject: generateFiPointFromGroupedLines() try: x = datetime.datetime.now() outputFileName = "results/"+fileName + x.strftime("_%H%M%S.err") ti = x.strftime("%m/%d/%Y %H:%M:%S") # Measure execution time startTime = time.time() # os.system("sudo /home/ubuntu/bin/gpufreq-info") # os.system("cpufreq-info | grep 'current CPU' | cut -d's' -f2 | cut -d'(' -f1") # print("./"+outputExeFile+" "+inputParameters) p = pexpect.spawn("./"+outputExeFile+" "+inputParameters, timeout=timeout) p.expect(pexpect.EOF) # Process elspased time elapsedTime = 1000*(time.time() - startTime) p.close() if (p.exitstatus == 0): if verbose: print("(%d) %s; PASS in %.2f ms." % (fiNumber, ti, elapsedTime) ) print(p.before) sys.stdout.flush() if log: stdLogFile.write("(%d) %s; PASS in %.2f ms.\n" % (fiNumber, ti, elapsedTime) ) stdLogFile.write("%s\n" % (p.before) ) stdLogFile.flush() # serie.write("(%d) %s; PASS in %.2f ms.\n\r" % (fiNumber, ti, elapsedTime) ) # serie.write("%s\n" % (p.before) ) # serie.flush() elif (p.exitstatus == 4): if verbose: print("(%d) %s; CRASH in %.2f ms." % (fiNumber, ti, elapsedTime) ) sys.stdout.flush() if log: stdLogFile.write("(%d) %s; CRASH in %.2f ms.; %s\n" % (fiNumber, ti, elapsedTime, outputFileName) ) stdLogFile.write("%s\n" % (p.before) ) stdLogFile.flush() # serie.write("(%d) %s; CRASH in %.2f ms.; %s\n\r" % (fiNumber, ti, elapsedTime, outputFileName) ) # serie.flush() if log: writeOutput(serie, p.before, elapsedTime, outputFileName, fileName+"_"+tIni) elif (p.exitstatus == 1): if verbose: print("(%d) %s; SDC in %.2f ms." % (fiNumber, ti, elapsedTime) ) print(p.before) sys.stdout.flush() if log: stdLogFile.write("(%d) %s; SDC in %.2f ms.; %s\n" % (fiNumber, ti, elapsedTime, outputFileName) ) stdLogFile.write("%s\n" % (p.before) ) stdLogFile.flush() # serie.write("(%d) %s; SDC in %.2f ms.; %s\n\r" % (fiNumber, ti, elapsedTime, outputFileName) ) # serie.flush() if log: writeOutput(serie, p.before, elapsedTime, outputFileName, fileName+"_"+tIni) else: if verbose: print("(%d) %s; Exit status: %d in %.2f ms." % (fiNumber, ti, p.exitstatus, elapsedTime) ) sys.stdout.flush() if log: stdLogFile.write("(%d) %s; Exit status: %d in %.2f ms.\n" % (fiNumber, ti, p.exitstatus, elapsedTime) ) stdLogFile.write("%s\n" % (p.before) ) stdLogFile.flush() # serie.write("(%d) %s; Exit status: %d in %.2f ms.\n\r" % (fiNumber, ti, p.exitstatus, elapsedTime) ) # serie.flush() if log: writeOutput(serie, p.before, elapsedTime, outputFileName, fileName+"_"+tIni) numTimeouts = 0 except KeyboardInterrupt: print("KeyboardInterrupt") sys.stdout.flush() lastFile = open("lastFiNumber", "w") lastFile.write("%d" % fiNumber) lastFile.flush() lastFile.close() if log: stdLogFile.flush() stdLogFile.close() sys.exit(2) except pexpect.EOF, e: print("Fin de archivo") except pexpect.TIMEOUT, e: terminated = p.terminate(force=True) elapsedTime = time.time() - startTime if verbose: print("(%d) %s; Timeout after %.2f ms." % (fiNumber, ti, elapsedTime) ) sys.stdout.flush() if log: stdLogFile.write("(%d) %s; Timeout after %.2f ms.\n" % (fiNumber, ti, elapsedTime) ) stdLogFile.write("%s\n" % (p.before) ) stdLogFile.flush() serie.write("(%d) %s; Timeout after %.2f ms.\n\r" % (fiNumber, ti, elapsedTime) ) serie.flush() # sys.stdout.flush() # stdLogFile.close() numTimeouts += 1 # Si se dan 3 timeouts seguidos, suponemoe que no se recuperara y rearrancamos la Jetson lastFile = open("lastFiNumber", "w") if (numTimeouts == 3): fiNumber = fiNumber - 2 # contamos los tres ultimos timeouts consecutivos como un solo error no recuperable lastFile.write("%d" % fiNumber) lastFile.flush() lastFile.close() time.sleep(1) sys.exit(3) else: lastFile.write("%d" % fiNumber) lastFile.flush() lastFile.close() finally: lastFile = open("lastFiNumber", "w") lastFile.write("%d" % fiNumber) lastFile.flush() lastFile.close() # time.sleep(1) # end while if log: stdLogFile.close() #end runBenchmark def main(argv): fileName = sys.argv[1] fiIni = int( sys.argv[2] ) tIni = sys.argv[3] # w=watchdog.watchdog() # if ( os.path.exists('lastFiNumber') ): # lastFile = open("lastFiNumber", "r") # fiIni = int( lastFile.read() ) + 1 # lastFile.close() # else: # fiIni = 1 # gzipFiles() if inject: groupProfileLines() # x = datetime.datetime.now() # fileName = bmName + x.strftime("_%H%M%S") runBenchmark(fiIni, fileName, tIni) # os.system("rm lastFiNumber") # os.system("mv /home/ubuntu/startup_script.sh /home/ubuntu/startup_script_noactivo.sh") ############################################################################## #main() if __name__ == "__main__": main(sys.argv)