Ejemplo n.º 1
0
    def wait_for_initialization(self):
        """Wait for all dilated nodes to register themselves with Kronos."""

        print "Waiting for all nodes to register ..."
        if self.is_virtual == True:
            while kf.synchronizeAndFreeze(self.num_tracers) <= 0:
                print "Kronos >> Synchronize and Freeze failed. Retrying in 1 sec"
                time.sleep(1)
        print "Resuming ..."
Ejemplo n.º 2
0
    def start_synchronized_experiment(self):
        """Start a synchronized kronos experiment if kronos is enabled

        :return: None
        """

        if self.enable_kronos == 1:
            logging.info(
                "Kronos >> Synchronizing and freezing all processes ...")
            while kronos_functions.synchronizeAndFreeze() <= 0:
                logging.info(
                    "Kronos >> Synchronize and Freeze failed. Retrying in 1 sec"
                )
                time.sleep(1)
            logging.info("Kronos >> Synchronize and Freeze succeeded !")
            logging.info("Kronos >> Experiment started with REL_CPU_SPEED: %s",
                         self.rel_cpu_speed)
        else:
            self.start_time = time.time()
            logging.info(
                "Melody >> Experiment started with Kronos disabled ... ")
def main():

    parser = argparse.ArgumentParser()


    parser.add_argument('--cmds_to_run_file', dest='cmds_to_run_file',
                        help='path to file containing commands to run', \
                        type=str, default='cmds_to_run_file.txt')

    parser.add_argument('--progress_ns_per_round',
                        dest='progress_ns_per_round',
                        help='Number of insns per round',
                        type=int,
                        default=1000000)

    parser.add_argument('--num_progress_rounds',
                        dest='num_progress_rounds',
                        help='Number of rounds to run',
                        type=int,
                        default=1000)

    parser.add_argument('--exp_type',
                        dest='exp_type',
                        help='Number of rounds to run',
                        type=int,
                        default=EXP_CS)

    parser.add_argument('--num_timelines',
                        dest='num_timelines',
                        help='Number of timelines in CS experiment',
                        type=int,
                        default=1)

    args = parser.parse_args()
    log_fds = []
    tracer_pids = []
    cmds_to_run = []

    worker_threads = []

    logging.basicConfig(level=logging.INFO)

    if not os.path.isfile(args.cmds_to_run_file):
        logging.info("Commands file path is incorrect !")
        sys.exit(0)
    fd1 = open(args.cmds_to_run_file, "r")
    cmds_to_run = [x.strip() for x in fd1.readlines()]
    fd1.close()
    for i in range(0, len(cmds_to_run)):
        with open("/tmp/tracer_log_%d.txt" % (i), "w") as f:
            pass
    log_fds = [ os.open("/tmp/tracer_log_%d.txt" %(i), os.O_RDWR | os.O_CREAT ) \
        for i in range(0, len(cmds_to_run)) ]
    num_tracers = len(cmds_to_run)
    num_timelines = len(cmds_to_run)
    #num_timelines = args.num_timelines

    input('Press any key to continue !')
    for i in range(0, num_tracers):
        with open("/tmp/tracer_log_%d.txt" % (i), "w") as f:
            pass
    log_fds = [ os.open("/tmp/tracer_log_%d.txt" %(i), os.O_RDWR | os.O_CREAT ) \
        for i in range(0, num_tracers) ]

    logging.info("Initializing VT Module !")
    if kf.initializeVTExp(args.exp_type, num_timelines, num_tracers) < 0:
        logging.info(
            "VT module initialization failed ! Make sure you are running\
               the dilated kernel and kronos module is loaded !")
        sys.exit(0)

    input('Press any key to continue !')

    logging.info("Starting all commands to run !")

    for i in range(0, num_tracers):
        logging.info("Starting tracer: %d", i + 1)
        start_new_dilated_process(i % num_timelines, cmds_to_run[i],
                                  log_fds[i], args.exp_type)
    input('Press any key to continue !')

    logging.info("Synchronizing and freezing tracers ...")
    while kf.synchronizeAndFreeze() <= 0:
        logging.info("VT Module >> Synchronize and Freeze failed."
                     " Retrying in 1 sec")
        time.sleep(1)

    input('Press any key to continue !')

    for index in range(num_timelines):
        logging.info("Main    : create and start thread %d.", index)
        x = threading.Thread(target=worker_thread_fn,
                             args=(args.progress_ns_per_round,
                                   args.num_progress_rounds, index))
        worker_threads.append(x)
        x.start()

    for index, thread in enumerate(worker_threads):
        logging.info("Main    : before joining thread %d.", index)
        thread.join()
        logging.info("Main    : thread %d done", index)

    input("Press Enter to continue...")
    logging.info("Stopping Synchronized Experiment !")
    kf.stopExp()

    for fd in log_fds:
        os.close(fd)

    logging.info("Finished ! Logs of each ith tracer can be found "
                 "in /tmp/tracer_log_i.txt")
def main():

    parser = argparse.ArgumentParser()


    parser.add_argument('--cmds_to_run_file', dest='cmds_to_run_file',
                        help='path to file containing commands to run', \
                        type=str, default='cmds_to_run_file.txt')

    parser.add_argument('--num_insns_per_round',
                        dest='num_insns_per_round',
                        help='Number of insns per round',
                        type=int,
                        default=1000000)

    parser.add_argument('--num_progress_rounds',
                        dest='num_progress_rounds',
                        help='Number of rounds to run',
                        type=int,
                        default=2000)

    parser.add_argument('--rel_cpu_speed', dest='rel_cpu_speed',
                        help='relative cpu speed', type=float, \
                        default=1.0)

    args = parser.parse_args()
    log_fds = []
    tracer_pids = []
    cmds_to_run = []

    if not os.path.isfile(args.cmds_to_run_file):
        print("Commands file path is incorrect !")
        sys.exit(0)
    fd1 = open(args.cmds_to_run_file, "r")
    cmds_to_run = [x.strip() for x in fd1.readlines()]
    fd1.close()
    for i in range(0, len(cmds_to_run)):
        with open("/tmp/tracer_log%d.txt" % (i), "w") as f:
            pass
    log_fds = [ os.open("/tmp/tracer_log%d.txt" %(i), os.O_RDWR | os.O_CREAT ) \
        for i in range(0, len(cmds_to_run)) ]
    num_tracers = len(cmds_to_run)

    input('Press any key to continue !')
    for i in range(0, num_tracers):
        with open("/tmp/tracer_log%d.txt" % (i), "w") as f:
            pass
    log_fds = [ os.open("/tmp/tracer_log%d.txt" %(i), os.O_RDWR | os.O_CREAT ) \
        for i in range(0, num_tracers) ]

    print("Initializing VT Module !")
    if kf.initializeExp(num_tracers) < 0:
        print("VT module initialization failed ! Make sure you are running "
              "the dilated kernel and kronos module is loaded !")
        sys.exit(0)

    input('Press any key to continue !')

    print("Starting all commands to run !")

    for i in range(0, num_tracers):
        print("Starting tracer: %d" % (i + 1))
        start_new_dilated_process(num_tracers, cmds_to_run[i], log_fds[i],
                                  args.rel_cpu_speed)

    print("Synchronizing anf freezing tracers ...")
    while kf.synchronizeAndFreeze() <= 0:
        print("VT Module >> Synchronize and Freeze failed. Retrying in 1 sec")
        time.sleep(1)

    input('Press any key to continue !')
    print("Starting Synchronized Experiment !")
    start_time = float(time.time())
    if args.num_progress_rounds > 0:
        print("Running for %d rounds ... " % (args.num_progress_rounds))
        num_finised_rounds = 0
        step_size = min(10, args.num_progress_rounds)
        while num_finised_rounds < args.num_progress_rounds:
            kf.progressBy(args.num_insns_per_round, step_size)
            num_finised_rounds += step_size
            #input("Press Enter to continue...")
            print("Ran %d rounds ..." % (num_finised_rounds),
                  " elapsed time ...",
                  float(time.time()) - start_time)

    elapsed_time = float(time.time()) - start_time
    print("Total time elapsed (secs) = ", elapsed_time)
    input("Press Enter to continue...")
    print("Stopping Synchronized Experiment !")
    kf.stopExp()

    for fd in log_fds:
        os.close(fd)

    print(
        "Finished ! Logs of each ith tracer can be found in /tmp/tracer_logi.txt"
    )
def main():

    parser = argparse.ArgumentParser()

    parser.add_argument('--cmds_to_run_file', dest='cmds_to_run_file',
                        help='path to file containing commands to run', \
                        type=str, default='cmds_to_run_file.txt')

    parser.add_argument(
        '--run_in_one_tracer',
        dest='run_in_one_tracer',
        help='True/False runs all commands in one tracer if True',
        default="False")

    parser.add_argument('--rel_cpu_speed', dest='rel_cpu_speed',
                        help='relative cpu speed', type=float, \
                        default=1.5)

    parser.add_argument('--num_insns_per_round',
                        dest='num_insns_per_round',
                        help='Number of insns per round',
                        type=int,
                        default=10000)

    parser.add_argument('--num_progress_rounds',
                        dest='num_progress_rounds',
                        help='Number of rounds to run',
                        type=int,
                        default=10000)
    parser.add_argument('--num_times',
                        dest='num_times',
                        help='Number of times to re-run experiment',
                        type=int,
                        default=1)
    parser.add_argument('--output_dir',
                        dest='output_dir',
                        type=str,
                        default='/tmp')
    args = parser.parse_args()

    count = 1
    while count <= args.num_times:

        log_fds = []
        tracer_pids = []
        cmds_to_run = []

        if args.run_in_one_tracer == "True":
            fd = os.open("/tmp/tracer_log.txt", os.O_RDWR | os.O_CREAT)
            log_fds.append(fd)
            num_tracers = 1
        else:
            if not os.path.isfile(args.cmds_to_run_file):
                print "Commands file path is incorrect !"
                sys.exit(0)
            fd1 = open(args.cmds_to_run_file, "r")
            cmds_to_run = [x.strip() for x in fd1.readlines()]
            fd1.close()
            for i in xrange(0, len(cmds_to_run)):
                with open("/tmp/tracer_log%d.txt" % (i), "w") as f:
                    pass
            log_fds = [ os.open("/tmp/tracer_log%d.txt" %(i), os.O_RDWR | os.O_CREAT ) \
                      for i in xrange(0, len(cmds_to_run)) ]
            num_tracers = len(cmds_to_run)

        print "Initializing Kronos !"
        if kf.initializeExp(1) < 0:
            print "Kronos initialization failed ! Make sure you are running\
                the dilated kernel and kronos module is loaded !"

            sys.exit(0)

        print "Starting all commands to run !"
        if args.run_in_one_tracer == "True":
            start_all_cmds_in_one_tracer(args.cmds_to_run_file, args.rel_cpu_speed,\
                args.num_insns_per_round, log_fds[0])
        else:
            for i in xrange(0, len(cmds_to_run)):
                print "Starting tracer for cmd: %s" % (cmds_to_run[i])
                start_new_dilated_process(cmds_to_run[i], args.rel_cpu_speed, \
                    args.num_insns_per_round, log_fds[i])

        print "Synchronizing anf freezing tracers ..."
        while kf.synchronizeAndFreeze(num_tracers) <= 0:
            print "Kronos >> Synchronize and Freeze failed. Retrying in 1 sec"
            time.sleep(1)

        print "Starting Synchronized Experiment !"
        kf.startExp()

        if args.num_progress_rounds > 0:
            print "Running for %d rounds ... " % (args.num_progress_rounds)

            num_finised_rounds = 0
            step_size = min(100, args.num_progress_rounds)
            start_time = float(time.time())
            kf.progress_n_rounds(args.num_progress_rounds)
            #while num_finised_rounds < args.num_progress_rounds:
            #    kf.progress_n_rounds(step_size)
            #    num_finised_rounds += step_size
            #    print "Ran %d rounds ..." %(num_finised_rounds)
        elapsed_time = float(time.time()) - start_time
        total_elapsed_virtual_time = float(
            args.num_progress_rounds * args.num_insns_per_round) / 1000000000.0
        print "Stopping Synchronized Experiment !"
        kf.stopExp()
        with open('/tmp/exp_stats.txt', 'w') as f:
            f.write('overhead ratio: %f\n' %
                    (elapsed_time / total_elapsed_virtual_time))
            f.write('total_elapsed_virtual_time: %f\n' %
                    (total_elapsed_virtual_time))
            f.write('elapsed_time: %f\n' % (elapsed_time))

        for fd in log_fds:
            os.close(fd)

        os.system('mkdir -p %s/run_%d' % (args.output_dir, count))
        os.system('cp /tmp/tracer* %s/run_%d' % (args.output_dir, count))
        os.system('cp /tmp/exp_stats.txt %s/run_%d' % (args.output_dir, count))
        print "Finished ! Logs of each ith tracer can be found in %s/run_%d" % (
            args.output_dir, count)
        count += 1