def executeBenchmarkInCloud(benchmark, outputHandler): # build input for cloud cloudInput = getCloudInput(benchmark) cloudInputFile = os.path.join(benchmark.logFolder, 'cloudInput.txt') filewriter.writeFile(cloudInput, cloudInputFile) outputHandler.allCreatedFiles.append(cloudInputFile) # install cloud and dependencies ant = subprocess.Popen(["ant", "resolve-benchmark-dependencies"]) ant.communicate() ant.wait() # start cloud and wait for exit logging.debug("Starting cloud.") if config.debug: logLevel = "FINER" else: logLevel = "INFO" libDir = os.path.abspath("./lib/java-benchmark") cmdLine = ["java", "-jar", libDir + "/vcloud.jar", "benchmark", "--loglevel", logLevel] if config.cloudMaster: cmdLine.extend(["--master", config.cloudMaster]) cloud = subprocess.Popen(cmdLine, stdin=subprocess.PIPE) try: (out, err) = cloud.communicate(cloudInput.encode('utf-8')) except KeyboardInterrupt: killScriptCloud() returnCode = cloud.wait() if returnCode and not STOPPED_BY_INTERRUPT: logging.warn("Cloud return code: {0}".format(returnCode)) handleCloudResults(benchmark, outputHandler) if config.commit and not STOPPED_BY_INTERRUPT: Util.addFilesToGitRepository(OUTPUT_PATH, outputHandler.allCreatedFiles, config.commitMessage+'\n\n'+outputHandler.description) return returnCode
def executeBenchmarkLocaly(benchmark, outputHandler): runSetsExecuted = 0 logging.debug("I will use {0} threads.".format(benchmark.numOfThreads)) # iterate over run sets for runSet in benchmark.runSets: if STOPPED_BY_INTERRUPT: break (mod, rest) = config.moduloAndRest if not runSet.shouldBeExecuted() \ or (runSet.index % mod != rest): outputHandler.outputForSkippingRunSet(runSet) elif not runSet.runs: outputHandler.outputForSkippingRunSet(runSet, "because it has no files") else: runSetsExecuted += 1 # get times before runSet ruBefore = resource.getrusage(resource.RUSAGE_CHILDREN) wallTimeBefore = time.time() outputHandler.outputBeforeRunSet(runSet) # put all runs into a queue for run in runSet.runs: Worker.workingQueue.put(run) # create some workers for i in range(benchmark.numOfThreads): WORKER_THREADS.append(Worker(i, outputHandler)) # wait until all tasks are done, # instead of queue.join(), we use a loop and sleep(1) to handle KeyboardInterrupt finished = False while not finished and not STOPPED_BY_INTERRUPT: try: Worker.workingQueue.all_tasks_done.acquire() finished = (Worker.workingQueue.unfinished_tasks == 0) finally: Worker.workingQueue.all_tasks_done.release() try: time.sleep(0.1) # sleep some time except KeyboardInterrupt: killScriptLocal() # get times after runSet wallTimeAfter = time.time() usedWallTime = wallTimeAfter - wallTimeBefore ruAfter = resource.getrusage(resource.RUSAGE_CHILDREN) usedCpuTime = (ruAfter.ru_utime + ruAfter.ru_stime) \ - (ruBefore.ru_utime + ruBefore.ru_stime) outputHandler.outputAfterRunSet(runSet, usedCpuTime, usedWallTime) outputHandler.outputAfterBenchmark(STOPPED_BY_INTERRUPT) if config.commit and not STOPPED_BY_INTERRUPT and runSetsExecuted > 0: Util.addFilesToGitRepository(OUTPUT_PATH, outputHandler.allCreatedFiles, config.commitMessage+'\n\n'+outputHandler.description)