def getNewErrorSchedule(binary_file, thrille_root): assert os.path.exists(os.path.join(thrille_root, "bin/liblockrace.so")) assert os.path.exists(os.path.join(thrille_root, "bin/librandact.so")) binarydir, bin = os.path.split(binary_file) curr_dir = os.getcwd() if binarydir != "": os.chdir(binarydir) binflags = blockremoval.getBinaryFlags() binflags.insert(0, bin) print "NOTE: automatic race detection is disabled" # doRaceDetect(binary_file, binflags, thrille_root) assert os.path.exists("./thrille-randomactive") exit_status = 0 sched = [] enabled = [] error = "" count = 0 while True: clearOldThrilleSchedule() count += 1 if count > 1000: raw_input("100 iterations with no error--continue?") count = 0 exit_status = executePreload(thrille_root, "librandact.so", binary_file, binflags) print "Thrille Random Active Exit Status:", exit_status sched, enabled, addrlist, condlist = blockremoval.readInNewSchedule(thrille_output_schedule) error = blockremoval.recordFailure(thrille_output_schedule) if error != None: if blockremoval.testSchedule(sched, error, addrlist, binary_file, thrille_root): os.chdir(curr_dir) return sched, enabled, addrlist, condlist, error else: assert False, "Error in Thrille makes replay impossible"
def main(): checkEnvironment() input_schedule = sys.argv[1] output_schedule = sys.argv[2] binary_file = sys.argv[3] thrille_root = os.environ.get('THRILLE_ROOT') sched, enabled, addrlist, condlist = \ blockremoval.readInNewSchedule(sys.argv[1]) error = blockremoval.recordFailure(sys.argv[1]) assert blockremoval.testSchedule(sched, error, addrlist, \ binary_file, thrille_root) start_blocks = blockremoval.getTotalBlocks(sched) start_context = \ preemptremoval.countContextSwitches(sched, enabled, condlist) start_npcs = \ preemptremoval.countNonpreemptiveCS(sched, enabled, condlist) start_preemptions = \ preemptremoval.countPreemptions(sched, enabled, condlist) assert (start_npcs + start_preemptions) == start_context, "sanity fail" simpsched = noniterativeBB(output_schedule, binary_file,\ thrille_root, sched,\ enabled, addrlist, error) blockremoval.outputResult(simpsched, error, addrlist, \ binary_file, thrille_root, output_schedule) sched, enabled, addrlist, condlist = \ blockremoval.readInNewSchedule(output_schedule) end_blocks = blockremoval.getTotalBlocks(sched) end_context = \ preemptremoval.countContextSwitches(sched, enabled, condlist) end_npcs = \ preemptremoval.countNonpreemptiveCS(sched, enabled, condlist) end_preemptions = \ preemptremoval.countPreemptions(sched, enabled, condlist) assert (end_npcs + end_preemptions) == end_context, "sanity fail" print "Start:\n\tblocks:", start_blocks, print "\n\tcontext switches:", start_context, "\n\t\tpreemptions:", print start_preemptions, "\n\t\tnon-preemptive switches:", start_npcs print print "End:\n\tblocks:", end_blocks, print "\n\tcontext switches:", end_context, "\n\t\tpreemptions:", print end_preemptions, "\n\t\tnon-preemptive switches:", end_npcs
def main(): checkEnvironment() input_schedule = sys.argv[1] output_schedule = sys.argv[2] binary_file = sys.argv[3] thrille_root = os.environ.get('THRILLE_ROOT') sched, enabled, addrlist, condlist = \ blockremoval.readInNewSchedule(sys.argv[1]) error = blockremoval.recordFailure(sys.argv[1]) assert blockremoval.testSchedule(sched, error, addrlist, binary_file, \ thrille_root) start_blocks = blockremoval.getTotalBlocks(sched) start_context = \ preemptremoval.countContextSwitches(sched, enabled, condlist) start_npcs = \ preemptremoval.countNonpreemptiveCS(sched, enabled, condlist) start_preemptions = \ preemptremoval.countPreemptions(sched, enabled, condlist) assert (start_npcs + start_preemptions) == start_context, "sanity fail" simpsched = noniterativeAA(output_schedule, binary_file,\ thrille_root, sched,\ enabled, addrlist, error) blockremoval.outputResult(simpsched, error, addrlist,\ binary_file, thrille_root, output_schedule) sched, enabled, addrlist, condlist = \ blockremoval.readInNewSchedule(output_schedule) end_blocks = blockremoval.getTotalBlocks(sched) end_context = \ preemptremoval.countContextSwitches(sched, enabled, condlist) end_npcs = \ preemptremoval.countNonpreemptiveCS(sched, enabled, condlist) end_preemptions = \ preemptremoval.countPreemptions(sched, enabled, condlist) assert (end_npcs + end_preemptions) == end_context, "sanity fail" print "Start:\n\tblocks:", start_blocks, print "\n\tcontext switches:", start_context, "\n\t\tpreemptions:", print start_preemptions, "\n\t\tnon-preemptive switches:", start_npcs print print "End:\n\tblocks:", end_blocks, print "\n\tcontext switches:", end_context, "\n\t\tpreemptions:", print end_preemptions, "\n\t\tnon-preemptive switches:", end_npcs
def noniterativeBB(output_schedule, binary_file, thrille_root,\ sched, enabled, addrlist, error): brsched = blockremoval.blockRemovalAlgorithmB( \ binary_file, thrille_root, sched, enabled, addrlist, error) outdir, out = os.path.split(output_schedule) tmpout = os.path.join(outdir, "block-sched") blockremoval.outputResult(brsched, error, addrlist, binary_file,\ thrille_root, tmpout) newsched, newenabled, newaddrlist, newcondlist = \ blockremoval.readInNewSchedule(tmpout) assert blockremoval.recordFailure(tmpout) == error, "err fail" simpsched = preemptremoval.preemptRemovalAlgorithmB(binary_file, \ output_schedule, thrille_root, newsched, newenabled, \ newaddrlist, newcondlist, error) return simpsched