コード例 #1
0
    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()
コード例 #2
0
    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)
コード例 #3
0
    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)