Esempio n. 1
0
    def run_test(self, settings, output_path):
        settings = settings.copy()
        settings.load_test()
        res = resultset.new(settings)
        if settings.EXTENDED_METADATA:
            record_extended_metadata(res, settings.REMOTE_METADATA)

        if not settings.HOSTS:
            raise RuntimeError("Must specify host (-H option).")

        self.agg = aggregators.new(settings)
        res = self.agg.postprocess(self.agg.aggregate(res))
        if self.killed:
            return
        res.dump_dir(output_path)

        formatter = formatters.new(settings)
        formatter.format([res])

        self.tests_run += 1
Esempio n. 2
0
    def run_test(self, settings, output_path):
        settings = settings.copy()
        settings.load_test()
        res = resultset.new(settings)
        if settings.EXTENDED_METADATA:
            record_extended_metadata(res, settings.REMOTE_METADATA)

        if not settings.HOSTS:
            raise RuntimeError("Must specify host (-H option).")

        self.agg = aggregators.new(settings)
        res = self.agg.postprocess(self.agg.aggregate(res))
        if self.killed:
            return
        if settings.EXTENDED_METADATA:
            record_postrun_metadata(res, settings.REMOTE_METADATA)
        res.dump_dir(output_path)

        formatter = formatters.new(settings)
        formatter.format([res])

        self.tests_run += 1
Esempio n. 3
0
def load():
    (dummy,args) = parser.parse_args(values=settings)

    # If run with no args and no controlling TTY, launch the GUI by default
    if not sys.stdin.isatty() and not sys.stdout.isatty() and not sys.stderr.isatty() \
        and len(sys.argv) < 2:
        settings.GUI = True

    if hasattr(settings, 'LIST_TESTS') and settings.LIST_TESTS:
        list_tests()

    if hasattr(settings, 'PLOT'):
        settings.FORMAT = 'plot'

    for a in args:
        if os.path.exists(a):
            if settings.SCALE_MODE and settings.INPUT:
                settings.SCALE_DATA.append(a)
            else:
                settings.INPUT.append(a)
        else:
            settings.load_test_or_host(a)

    settings.load_rcfile()

    if settings.INPUT:
        results = []
        test_name = None
        for filename in settings.INPUT:
            r = ResultSet.load_file(filename)
            if test_name is not None and test_name != r.meta("NAME"):
                raise RuntimeError("Result sets must be from same test (found %s/%s)" % (test_name, r.meta("NAME")))
            test_name = r.meta("NAME")
            results.append(r)

        if settings.GUI:
            load_gui(settings)

        settings.update(results[0].meta())
        settings.load_test()
    elif settings.GUI:
        load_gui(settings)
    else:
        settings.load_test()
        results = [ResultSet(NAME=settings.NAME,
                            HOST=settings.HOST,
                            HOSTS=settings.HOSTS,
                            TIME=settings.TIME,
                            LOCAL_HOST=settings.LOCAL_HOST,
                            TITLE=settings.TITLE,
                            NOTE=settings.NOTE,
                            LENGTH=settings.LENGTH,
                            TOTAL_LENGTH=settings.TOTAL_LENGTH,
                            STEP_SIZE=settings.STEP_SIZE,
                            NETPERF_WRAPPER_VERSION=VERSION,
                            IP_VERSION=settings.IP_VERSION)]
        if settings.EXTENDED_METADATA:
            record_extended_metadata(results[0], settings.REMOTE_METADATA)

    if settings.SCALE_DATA:
        scale_data = []
        for filename in settings.SCALE_DATA:
            if filename == settings.INPUT:
                # Do not load input file twice - makes it easier to select a set
                # of files for plot scaling and supply each one to -i without
                # having to change the other command line options each time.
                continue
            r = ResultSet.load_file(filename)
            if r.meta("NAME") != settings.NAME:
                raise RuntimeError("Setting name mismatch between test "
                                   "data and scale file %s" % filename)
            scale_data.append(r)
        settings.SCALE_DATA = scale_data


    if hasattr(settings, 'LIST_PLOTS') and settings.LIST_PLOTS:
        list_plots()

    if not settings.HOSTS and not results[0]:
        raise RuntimeError("Must specify host (-H option).")

    return settings, results
Esempio n. 4
0
def load():
    global LOGFILE_HANDLE
    (dummy,args) = parser.parse_args(values=settings)

    if settings.LOG_FILE:
        LOGFILE_HANDLE = open(settings.LOG_FILE, "a")
    writeLog("logfile opened")

    # If run with no args and no controlling TTY, launch the GUI by default
    if not sys.stdin.isatty() and not sys.stdout.isatty() and not sys.stderr.isatty() \
        and len(sys.argv) < 2:
        settings.GUI = True

    if hasattr(settings, 'LIST_TESTS') and settings.LIST_TESTS:
        list_tests()

    if hasattr(settings, 'PLOT'):
        settings.FORMAT = 'plot'

    for a in args:
        if os.path.exists(a):
            if settings.SCALE_MODE and settings.INPUT:
                settings.SCALE_DATA.append(a)
            else:
                settings.INPUT.append(a)
        else:
            settings.load_test_or_host(a)

    settings.load_rcfile()

    if settings.INPUT:
        results = []
        test_name = None
        for filename in settings.INPUT:
            r = ResultSet.load_file(filename)
            if test_name is not None and test_name != r.meta("NAME"):
                raise RuntimeError("Result sets must be from same test (found %s/%s)" % (test_name, r.meta("NAME")))
            test_name = r.meta("NAME")
            #print "Appending results for test %s" % (test_name)
            results.append(r)

        if settings.GUI:
            load_gui(settings)

        settings.update(results[0].meta())

        settings.load_test()
    elif settings.GUI:
        load_gui(settings)
    else:
        settings.RESULT_LOCATION_BASE2 = '${HOME}/tempResult%s' % (timeStamped(t=settings.TIME).strip().replace(' ', ''))
        settings.SERVERS = settings.HOSTS

        if settings.TOTAL_CLIENTS > 0 :
            if len(settings.CLIENTS) >= settings.TOTAL_CLIENTS:
                settings.CLIENTS = settings.CLIENTS[:settings.TOTAL_CLIENTS]
            else:
                client_count = len(settings.CLIENTS)
                for i in range(0, (settings.TOTAL_CLIENTS - client_count)) :
                    settings.CLIENTS.append(settings.CLIENTS[i % client_count])
        else :
            settings.TOTAL_CLIENTS = len(settings.CLIENTS)

        print "Final client list is %s" % (settings.CLIENTS)
        for m in settings.SERVERS:
            settings.MINFO_SERVER[m] = record_machine_metadata(m, settings.TARGET)
            settings.SERVERS_IF[m] = settings.MINFO_SERVER[m]["EGRESS_INFO"]["iface"]
            settings.SERVERS_DRV[m] = settings.MINFO_SERVER[m]["EGRESS_INFO"]["driver"]
            settings.SERVERS_CORECOUNT[m] = int(settings.MINFO_SERVER[m]['CORECOUNT'])

        for m in settings.CLIENTS:
            settings.MINFO_CLIENT[m] = record_machine_metadata(m, settings.TARGET)
            settings.CLIENTS_IF[m] = settings.MINFO_CLIENT[m]["EGRESS_INFO"]["iface"]
            settings.CLIENTS_CORECOUNT[m] = int(settings.MINFO_CLIENT[m]['CORECOUNT'])

        if settings.SERVER_ONLOAD_LATENCY:
            settings.SERVER_ONLOAD_CMDLINE = "onload --profile=latency --preload=/usr/lib64/libonload.so"
        elif settings.SERVER_ONLOAD_ENABLED :
            settings.SERVER_ONLOAD_CMDLINE = "onload  --preload=/usr/lib64/libonload.so"
        else :
            settings.SERVER_ONLOAD_CMDLINE = ""

        if len(settings.SERVERS) > 1 :
            print "ERROR: More than one server specified.  This is not supporte d yet"
            sys.exit(1)

        srvname = settings.SERVERS[0]
        for i in range(0, settings.SERVERS_INSTANCES):
            settings.RUN_CONF[0] = {}
            settings.RUN_CONF[0]['SERVER'] = {}

        settings.BRUST_SIZE = settings.CONCURRENCY
        settings.TCONCURRENCY =  (settings.CONCURRENCY * settings.CLIENT_CORES
                        * (len(settings.CLIENTS) - settings.SPECIAL_CLIENTS_COUNT))


        settings.load_test()
        results = [ResultSet(NAME=settings.NAME,
                            HOST=settings.HOST,
                            HOSTS=settings.HOSTS,
                            SERVERS=settings.SERVERS,
                            MINFO_SERVER=settings.MINFO_SERVER,
                            MINFO_CLIENT=settings.MINFO_CLIENT,
                            RESULT_LOCATION_BASE2=settings.RESULT_LOCATION_BASE2,
                            TOOLS_LOCATION=settings.TOOLS_LOCATION,
                            PKT_SIZE=settings.PKT_SIZE,
                            TARGET=settings.TARGET,
                            USE_TCP=settings.USE_TCP,
                            SERVER_CORES=settings.SERVER_CORES,
                            HWQUEUES=settings.HWQUEUES,
                            SPECIAL_CLIENTS_COUNT = settings.SPECIAL_CLIENTS_COUNT,
                            SPECIAL_SERVERS_COUNT = settings.SPECIAL_SERVERS_COUNT,
                            BRUST_SIZE=settings.BRUST_SIZE,
                            CONCURRENCY = settings.CONCURRENCY,
                            TCONCURRENCY = settings.TCONCURRENCY,
                            CLIENT_CORES=settings.CLIENT_CORES,
                            CLIENT_PORTS_SHIFT=settings.CLIENT_PORTS_SHIFT,
                            CLIENTS=settings.CLIENTS,
                            TOTAL_CLIENTS=settings.TOTAL_CLIENTS,
                            CLIENTS_IF=settings.CLIENTS_IF,
                            CLIENTS_CORECOUNT=settings.CLIENTS_CORECOUNT,
                            SERVERS_IF=settings.SERVERS_IF,
                            SERVERS_DRV=settings.SERVERS_DRV,
                            SERVERS_CORECOUNT=settings.SERVERS_CORECOUNT,
                            SERVERS_INSTANCES=settings.SERVERS_INSTANCES,
                            SERVER_CORESHIFT=settings.SERVER_CORESHIFT,
                            TIME=settings.TIME,
                            LOCAL_HOST=settings.LOCAL_HOST,
                            TITLE=settings.TITLE,
                            NOTE=settings.NOTE,
                            SERVER_ONLOAD_LATENCY=settings.SERVER_ONLOAD_LATENCY,
                            DRAGONET_COST_FUNCTION=settings.DRAGONET_COST_FUNCTION,
                            SERVER_ONLOAD_ENABLED=settings.SERVER_ONLOAD_ENABLED,
                            SERVER_ONLOAD_CMDLINE=settings.SERVER_ONLOAD_CMDLINE,
                            LENGTH=settings.LENGTH,
                            TOTAL_LENGTH=settings.TOTAL_LENGTH,
                            DELAY=settings.DELAY,
                            STEP_SIZE=settings.STEP_SIZE,
                            ITERATIONS=settings.ITERATIONS,
                            ECHO_SERVER=settings.ECHO_SERVER,
                            NETPERF_WRAPPER_VERSION=VERSION,
                            IP_VERSION=settings.IP_VERSION)]
        if settings.EXTENDED_METADATA:
            record_extended_metadata(results[0], settings.REMOTE_METADATA)

    if settings.SCALE_DATA:
        scale_data = []
        for filename in settings.SCALE_DATA:
            if filename == settings.INPUT:
                # Do not load input file twice - makes it easier to select a set
                # of files for plot scaling and supply each one to -i without
                # having to change the other command line options each time.
                continue
            r = ResultSet.load_file(filename)
            if r.meta("NAME") != settings.NAME:
                raise RuntimeError("Setting name mismatch between test "
                                   "data and scale file %s" % filename)
            scale_data.append(r)
        settings.SCALE_DATA = scale_data


    if hasattr(settings, 'LIST_PLOTS') and settings.LIST_PLOTS:
        list_plots()

    if not settings.HOSTS and not results[0]:
        raise RuntimeError("Must specify host (-H option).")

    print "Running experiment for time of %d" % (settings.TOTAL_LENGTH)
    return settings, results