def __init__(self, args): """ This reads runtime configuration files, massages them into formats that the rest of the manager expects, and keeps track of other info. """ self.launch_time = strftime("%Y-%m-%d--%H-%M-%S", gmtime()) # construct pythonic db of hardware configurations available to us at # runtime. self.runtimehwdb = RuntimeHWDB(args.hwdbconfigfile) rootLogger.debug(self.runtimehwdb) self.innerconf = InnerRuntimeConfiguration(args.runtimeconfigfile, args.overrideconfigdata) rootLogger.debug(self.innerconf) # construct a privateip -> instance obj mapping for later use #self.instancelookuptable = instance_privateip_lookup_table( # f1_16_instances + f1_2_instances + m4_16_instances) # setup workload config obj, aka a list of workloads that can be assigned # to a server self.workload = WorkloadConfig(self.innerconf.workload_name, self.launch_time, self.innerconf.suffixtag) self.runfarm = RunFarm(self.innerconf.f1_16xlarges_requested, self.innerconf.f1_4xlarges_requested, self.innerconf.f1_2xlarges_requested, self.innerconf.m4_16xlarges_requested, self.innerconf.runfarmtag, self.innerconf.run_instance_market, self.innerconf.spot_interruption_behavior, self.innerconf.spot_max_price, self.innerconf.launch_timeout, self.innerconf.always_expand) # start constructing the target configuration tree self.firesim_topology_with_passes = FireSimTopologyWithPasses( self.innerconf.topology, self.innerconf.no_net_num_nodes, self.runfarm, self.runtimehwdb, self.innerconf.defaulthwconfig, self.workload, self.innerconf.linklatency, self.innerconf.switchinglatency, self.innerconf.netbandwidth, self.innerconf.profileinterval, self.innerconf.trace_enable, self.innerconf.trace_select, self.innerconf.trace_start, self.innerconf.trace_end, self.innerconf.trace_output_format, self.innerconf.autocounter_readrate, self.innerconf.terminateoncompletion, self.innerconf.zerooutdram, self.innerconf.disable_asserts, self.innerconf.print_start, self.innerconf.print_end, self.innerconf.print_cycle_prefix)
class RuntimeConfig: """ This class manages the overall configuration of the manager for running simulation tasks. """ def __init__(self, args): """ This reads runtime configuration files, massages them into formats that the rest of the manager expects, and keeps track of other info. """ self.launch_time = strftime("%Y-%m-%d--%H-%M-%S", gmtime()) # construct pythonic db of hardware configurations available to us at # runtime. self.runtimehwdb = RuntimeHWDB(args.hwdbconfigfile) rootLogger.debug(self.runtimehwdb) self.innerconf = InnerRuntimeConfiguration(args.runtimeconfigfile, args.overrideconfigdata) rootLogger.debug(self.innerconf) # construct a privateip -> instance obj mapping for later use #self.instancelookuptable = instance_privateip_lookup_table( # f1_16_instances + f1_2_instances + m4_16_instances) # setup workload config obj, aka a list of workloads that can be assigned # to a server self.workload = WorkloadConfig(self.innerconf.workload_name, self.launch_time) self.runfarm = RunFarm(self.innerconf.f1_16xlarges_requested, self.innerconf.f1_4xlarges_requested, self.innerconf.f1_2xlarges_requested, self.innerconf.m4_16xlarges_requested, self.innerconf.runfarmtag, self.innerconf.run_instance_market, self.innerconf.spot_interruption_behavior, self.innerconf.spot_max_price) # start constructing the target configuration tree self.firesim_topology_with_passes = FireSimTopologyWithPasses( self.innerconf.topology, self.innerconf.no_net_num_nodes, self.runfarm, self.runtimehwdb, self.innerconf.defaulthwconfig, self.workload, self.innerconf.linklatency, self.innerconf.switchinglatency, self.innerconf.netbandwidth, self.innerconf.profileinterval, self.innerconf.trace_enable, self.innerconf.trace_start, self.innerconf.trace_end, self.innerconf.terminateoncompletion) def launch_run_farm(self): """ directly called by top-level launchrunfarm command. """ self.runfarm.launch_run_farm() def terminate_run_farm(self, terminatesomef1_16, terminatesomef1_4, terminatesomef1_2, terminatesomem4_16, forceterminate): """ directly called by top-level terminaterunfarm command. """ self.runfarm.terminate_run_farm(terminatesomef1_16, terminatesomef1_4, terminatesomef1_2, terminatesomem4_16, forceterminate) def infrasetup(self): """ directly called by top-level infrasetup command. """ # set this to True if you want to use mock boto3 instances for testing # the manager. use_mock_instances_for_testing = False self.firesim_topology_with_passes.infrasetup_passes( use_mock_instances_for_testing) def boot(self): """ directly called by top-level boot command. """ use_mock_instances_for_testing = False self.firesim_topology_with_passes.boot_simulation_passes( use_mock_instances_for_testing) def kill(self): use_mock_instances_for_testing = False self.firesim_topology_with_passes.kill_simulation_passes( use_mock_instances_for_testing) def run_workload(self): use_mock_instances_for_testing = False self.firesim_topology_with_passes.run_workload_passes( use_mock_instances_for_testing)