def _generateRequiredResources(self): np = NetworkProvider().getInstance() for sp in np.getServiceProviders(): for opt in sp.getOptions(): for ct in opt.getContainers(): ct.setCpuReq(self.reqResources[0].generate()) ct.setRamReq(self.reqResources[1].generate())
def _generateContainers(self): np = NetworkProvider().getInstance() for sp in np.getServiceProviders(): for opt in sp.getOptions(): rjob = random_job.random_job() for task in rjob.itertuples(): opt.addContainer(Container(task.CPU*100, task.memory*100))
def _generateBandwidthSaving(self): np = NetworkProvider().getInstance() totalResources = np.getTotalResources() for sp in np.getServiceProviders(): for opt in sp.getOptions(): resources = opt.getTotalResources() opt.setBandwidthSaving(self.bandwidth.generate(resources, totalResources))
def _generateServiceProviders(self): np = NetworkProvider().getInstance() [ np.addServiceProvider( ServiceProvider(self.execution_time.generate() if self. execution_time else None)) for _ in range(self.nbServiceProviders) ]
def _generateAvailableResources(self): np = NetworkProvider().getInstance() [ np.addServer( Server(self.resources[0].generate(), self.resources[1].generate())) for _ in range(self.nbServers) ]
def _generateContainers(self): np = NetworkProvider().getInstance() for sp in np.getServiceProviders(): for opt in sp.getOptions(): [ opt.addContainer(Container(0, 0)) for _ in range(self.containers.generate()) ]
def generateServiceProviders(self): np = NetworkProvider().getInstance() totalResources = np.getTotalResources() #while(self._K * np.getTotalResources()[0] > np.getSumAverageRequiredResources()[0] or # while k_ram < 1.8 || k_cpu < 1.8 # k_ram = k_cpu for _ in range(self.serviceProviders.generate()): # self._K * np.getTotalResources()[1] > np.getSumAverageRequiredResources()[1]): sp = np.addServiceProvider(ServiceProvider(self.execution_time.generate() if self.execution_time else None)) for _ in range(self.options.generate()): opt = sp.addOption(Option(sp)) rjob = random_job.random_job() for count, task in enumerate(rjob.itertuples()): opt.addContainer(Container(task.CPU, task.memory)) resources = opt.getTotalResources() opt.setBandwidthSaving(self.bandwidth.generate(resources, totalResources)) avgZ = 0 for sp in np.getServiceProviders(): for opt in sp.getOptions(): avgZ += len(opt.getContainers()) avgZ /= len(np.getServiceProviders()) * len(np.getServiceProviders()[0].getOptions()) self._K = \ ( np.getSumAverageRequiredResources()[0]/np.getTotalResources()[0] * len(np.getServiceProviders()) * avgZ, np.getSumAverageRequiredResources()[1]/np.getTotalResources()[1] * len(np.getServiceProviders()) * avgZ )
def generateServiceProviders(self): np = NetworkProvider().getInstance() totalResources = np.getTotalResources() for _ in range(self.serviceProviders.generate()): sp = np.addServiceProvider( ServiceProvider(self.execution_time.generate() if self. execution_time else None)) for _ in range(self.options.generate()): opt = sp.addOption(Option(sp)) for _ in range(self.containers.generate()): opt.addContainer( Container(self.reqResources[0].generate(), self.reqResources[1].generate())) resources = opt.getTotalResources() opt.setBandwidthSaving( self.bandwidth.generate(resources, totalResources))
def generate(self): NetworkProvider().getInstance().clean() self._generateServiceProviders() self._generateAvailableResources() self._generateOptions() self._generateContainers() self._generateRequiredResources() self._generateBandwidthSaving()
def generate(self, service_providers=True): NetworkProvider().getInstance().clean() #self._generateServiceProviders() self._generateAvailableResources() #self._generateOptions() #self._generateContainers() #self._generateRequiredResources() if service_providers: self.generateServiceProviders()
def save_to_csv(self, suffix=""): np = NetworkProvider().getInstance() df = pd.DataFrame(columns=["sp", "opt", "container", "cpu", "ram", "cpu_tot_opt", "ram_tot_opt", "utility_opt"]) for i, sp in enumerate(np.getServiceProviders()): for j, opt in enumerate(sp.getOptions()): for k, container in enumerate(opt.getContainers()): df.loc[len(df)] = { "sp": i, "opt": j, "container": k, "cpu": container.getCpuReq(), "ram": container.getRamReq(), "cpu_tot_opt": opt.getCpuReq(), "ram_tot_opt": opt.getRamReq(), "utility_opt": opt.getBandwidthSaving() } df.to_csv("results/google_traces_scenario_%d_sp_%d_opt_%s.csv" % (len(np.getServiceProviders()), len(np.getServiceProviders()[0].getOptions()), suffix))
def computeEfficiency(self): # Return 0 if computing efficiency to jump to itself if (self is self.getServiceProvider().getDefaultOption()): return 0 denominator = 0 numerator = self.getBandwidthSaving() numerator -= self.getServiceProvider().getDefaultOption().getBandwidthSaving() if \ self.getServiceProvider().getDefaultOption() else 0 h_cpu, h_ram = NetworkProvider().getInstance().get_h_l() tcpu = self.getServiceProvider().getDefaultOption().getCpuReq( ) if self.getServiceProvider().getDefaultOption() else 0 tram = self.getServiceProvider().getDefaultOption().getRamReq( ) if self.getServiceProvider().getDefaultOption() else 0 denominator += (self.getCpuReq() - tcpu) * h_cpu denominator += (self.getRamReq() - tram) * h_ram self.__efficiency = numerator / denominator
def save_for_ilp(self, options_slice=1): np = NetworkProvider().getInstance() f = open("scenario.dat", "w+") f.write(f"param K := {self._K};\n") f.write(f"param nbServers := {len(np.getServers())};\n") f.write(f"param nbResources := 2;\n") f.write( f"param nbServiceProviders := {len(np.getServiceProviders())};\n") f.write("param availableResources :=") availableResources = {} for i, server in enumerate(np.getServers()): availableResources[i, 0] = server.getTotalCpu() availableResources[i, 1] = server.getTotalRam() f.write(self._printDict(availableResources)) f.write("\n;\nparam nbOptions :=") options = [] for i, sp in enumerate(np.getServiceProviders()): options.append(len(sp.getOptions()[0:options_slice])) f.write(self._printArray(options)) f.write("\n;\nparam bandwidthSaving :=") bandwidthSaving = {} for i, sp in enumerate(np.getServiceProviders()): for j, opt in enumerate(sp.getOptions()[0:options_slice]): bandwidthSaving[i, j] = opt.getBandwidthSaving() f.write(self._printDict(bandwidthSaving)) f.write("\n;\nparam nbContainers :=") containers = {} for i, sp in enumerate(np.getServiceProviders()): for j, opt in enumerate(sp.getOptions()[0:options_slice]): containers[i, j] = len(opt.getContainers()) f.write(self._printDict(containers)) f.write("\n;\nparam requiredResources :=") requiredResources = {} for i, sp in enumerate(np.getServiceProviders()): for j, opt in enumerate(sp.getOptions()[0:options_slice]): for k, container in enumerate(opt.getContainers()): requiredResources[i, j, k, 0] = container.getCpuReq() requiredResources[i, j, k, 1] = container.getRamReq() f.write(self._printDict(requiredResources)) f.write("\n;\n\r") f.close()
def generateServiceProviders(self): print("Generating Service providers") np = NetworkProvider().getInstance() totalResources = np.getTotalResources() #while(self._K * np.getTotalResources()[0] > np.getSumAverageRequiredResources()[0] or # while k_ram < 1.8 || k_cpu < 1.8 # k_ram = k_cpu container_meta = pd.read_csv("datasets-alibaba/container_meta.csv", header=None) container_usage = pd.read_csv( "datasets-alibaba/container_usage_5mins.csv", header=None) print("CSVs read") apps = list(container_meta.loc[:, 3].unique()) print("Entering the loop") for _ in range(self.serviceProviders.generate()): # self._K * np.getTotalResources()[1] > np.getSumAverageRequiredResources()[1]): sp = np.addServiceProvider( ServiceProvider(self.execution_time.generate() if self. execution_time else None)) for _ in range(self.options.generate()): print("Generating option") notFound = True opt = sp.addOption(Option(sp)) while (notFound): app_du = apps.pop(Random.randint(0, len(apps))) containers = container_meta.loc[container_meta[3] == app_du] containers_ids = list(containers.loc[:, 0].unique()) #rjob = random_job.random_job() bw = 0 for container in containers_ids: print("Inserting container") ctmp = containers.loc[containers[0] == container].head( 1) ctmp2 = container_usage[container_usage[0] == container] if len(ctmp2) == 0: continue notFound = False opt.addContainer( Container( #int(ctmp2[3].mean()), int(ctmp2[4].mean()))) int(ctmp[5]), int(ctmp[7]))) bw += ctmp2[8].mean() + ctmp2[9].mean() opt.setBandwidthSaving(bw) avgZ = 0 for sp in np.getServiceProviders(): for opt in sp.getOptions(): avgZ += len(opt.getContainers()) avgZ /= len(np.getServiceProviders()) * len( np.getServiceProviders()[0].getOptions()) self._K = \ ( np.getSumAverageRequiredResources()[0]/np.getTotalResources()[0] * len(np.getServiceProviders()) * avgZ, np.getSumAverageRequiredResources()[1]/np.getTotalResources()[1] * len(np.getServiceProviders()) * avgZ )
def _generateOptions(self): np = NetworkProvider().getInstance() for sp in np.getServiceProviders(): for i in range(self.options.generate()): sp.addOption(Option(sp))