Example #1
0
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"
Example #2
0
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
Example #4
0
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