def sched(self, requests): global epoch global C #self.t_now = self.t_now + 1 if self.debug == True: print "\nt_now = ", self.t_now if self.debug == True: for f in self.flows: p = self.topo.paths[(self.flows[f].src, self.flows[f].dst)] print "flow", f, " with links :", p, " Ralloc, te: ", self.flows[ f].Ralloc, " ", self.flows[f].te if len(requests) == 0: #no new reuest return 0 involved_paths = [] involved_flows_id = [] involved_links_id = [] for req in requests: #find the path p = self.topo.paths[(req.src, req.dst)] self.no_request = self.no_request + 1 involved_paths.append(p) new_f = flow(self.no_request, req.size, req.td, req.src, req.dst, self.t_now) # the new flow to schedul self.flows[new_f.flow_id] = new_f if self.debug == True: print "new request: flow", new_f.flow_id, " size ", req.size, " td ", req.td, " src,dst ", req.src, req.dst self.success_count = self.success_count + 1 for i in p: l = self.topo.Link_set[i] l.flows.append(new_f.flow_id) self.find_max_rate_per_flow()
def sched(self, requests): global epoch global C self.t_now = self.t_now + 1 if self.debug == True: print "\nt_now = ", self.t_now if self.log == True: self.log_link_utilization() #remove finished flows and update current flow status self.update_current_flows() if self.debug == True: for f in self.flows: p = self.topo.paths[(self.flows[f].src, self.flows[f].dst)] print "flow ", f, " with links :", p, " Ralloc, te: ", self.flows[ f].Ralloc, " ", self.flows[f].te if len(requests) == 0: #no new reuest return 0 for req in requests: #find the path p = self.topo.paths[(req.src, req.dst)] self.no_request = self.no_request + 1 #new_f.flow_id = self.no_request new_f = flow(self.no_request, req.size, req.td, req.src, req.dst, self.t_now) # the new flow to schedul if self.debug == True: print "new request id: ", new_f.flow_id, " size ", req.size, " td ", req.td, " src,dst ", req.src, req.dst, "path is ", p # find Rresidual bandwidth in the path p avail_rate = [] for i in p: l = self.topo.Link_set[i] temp_sum = 0 if len(l.flows) == 0: avail_rate.append(C) else: for f in l.flows: temp_sum = temp_sum + self.flows[f].Ralloc avail_rate.append((C - temp_sum)) #update link Rresid to use it in pacing if needed (to avoid recomputation) l.Rresid = C - temp_sum Rresid = min(avail_rate) if (Rresid < new_f.Rmin): #print "no enogh bandwidth, need to pace" self.pace(new_f, p) else: new_f.Ralloc = Rresid #new_f.update() new_f.te = int(self.t_now + ceil((new_f.size / (new_f.Ralloc * 1.0)) / epoch)) if new_f.te > new_f.td: new_f.te = new_f.td if int(new_f.te) == int(self.t_now): print "te = t_now inside ceil", ( (new_f.size) / new_f.Ralloc) / epoch, "result of ceil", ceil( ((new_f.size) / new_f.Ralloc) / epoch) new_f.slack = new_f.Ralloc - new_f.Rmin self.flows[new_f.flow_id] = new_f if self.debug == True: print "Success, flow has been scheduled with rate ", new_f.Ralloc, " te = ", new_f.te self.success_count = self.success_count + 1 for i in p: l = self.topo.Link_set[i] l.flows.append(new_f.flow_id)
def sched(self, requests): global epoch global C #self.t_now = self.t_now + 1 if self.debug == True: print "\nt_now = ", self.t_now if self.debug == True: for f in self.flows: p = self.topo.paths[(self.flows[f].src, self.flows[f].dst)] print "flow", f, " with links :", p, " Ralloc, te: ", self.flows[ f].Ralloc, " ", self.flows[f].te if len(requests) == 0: #no new reuest return 0 for req in requests: #find the path p = self.topo.paths[(req.src, req.dst)] self.no_request = self.no_request + 1 #new_f.flow_id = self.no_request new_f = flow(self.no_request, req.size, req.td, req.src, req.dst, self.t_now) # the new flow to schedul if self.debug == True: print "new request: flow", new_f.flow_id, " size ", req.size, " td ", req.td, " src,dst ", req.src, req.dst # find Rresidual bandwidth in the path p avail_rate = [] for i in p: l = self.topo.Link_set[i] temp_sum = 0 if len(l.flows) == 0: avail_rate.append(C) else: for f in l.flows: temp_sum = temp_sum + self.flows[f].Ralloc avail_rate.append((C - temp_sum)) #update link Rresid to use it in pacing if needed (to avoid recomputation) l.Rresid = C - temp_sum Rresid = min(avail_rate) if Rresid < new_f.Rmin: if self.debug == True: print "flow", new_f.flow_id, "is rejected" self.reject_count = self.reject_count + 1 return 0 else: new_f.Ralloc = new_f.Rmin new_f.te = self.t_now + (new_f.size / (new_f.Ralloc * 1.0)) if new_f.te > new_f.td: new_f.te = new_f.td if new_f.te == int(self.t_now): new_f.te = new_f.te + 1 new_f.slack = new_f.Ralloc - new_f.Rmin self.flows[new_f.flow_id] = new_f if self.debug == True: print "Success, flow has been scheduled with rate ", new_f.Ralloc, " te = ", new_f.te self.success_count = self.success_count + 1 for i in p: l = self.topo.Link_set[i] l.flows.append(new_f.flow_id)