def increase(self, servers, length, dummy): servers.sort(key=lambda x: x.utilization, reverse=False) from collections import namedtuple # pylint: disable-msg=C0103 IdleTask = namedtuple('IdleTask', ['utilization', 'deadline', 'name']) idle = length - sum([s.utilization for s in servers]) packed_servers = [] for server in servers: packed_servers.sort(key=lambda x: x.utilization, reverse=False) for p_server in packed_servers: if p_server.utilization + server.utilization <= 1: p_server.add_child(server) # Add dummy to complete server utilization if p_server.utilization < 1 and idle > 0: d = IdleTask(min(1 - p_server.utilization, idle), 0, 'IdleTask') t = TaskServer(d) update_deadline2(self.sim, t, INFINITO) self.Tdummy.append(t) p_server.add_child(t) idle -= d.utilization break else: p_server = EDFServer() p_server.add_child(server) packed_servers.append(p_server) return packed_servers
def decrease(self, servers, length, dummy): servers.sort(key=lambda x: x.utilization, reverse=True) from collections import namedtuple # pylint: disable-msg=C0103 IdleTask = namedtuple('IdleTask', ['utilization', 'deadline', 'name']) idle = length - sum([s.utilization for s in servers]) packed_servers = [] for server in servers: #Try to place the item in the fullest bin that will accommodate it, i.e., the one that will leave the least space remaining packed_servers.sort(key=lambda x: x.utilization, reverse=True) for p_server in packed_servers: if p_server.utilization + server.utilization <= 1: p_server.add_child(server) # Add dummy to complete server utilization if p_server.utilization < 1 and idle > 0: d = IdleTask(min(1 - p_server.utilization, idle), 0, 'IdleTask') t = TaskServer(d) update_deadline2(self.sim, t, INFINITO) self.Tdummy.append(t) p_server.add_child(t) idle -= d.utilization break else: p_server = EDFServer() p_server.add_child(server) packed_servers.append(p_server) return packed_servers
def pack_FF(servers): """ Create a list of EDF Servers by packing servers. First-Fit packing algorithm. """ packed_servers = [] for server in servers: for p_server in packed_servers: if p_server.utilization + server.utilization <= 1: p_server.add_child(server) break else: p_server = EDFServer() p_server.add_child(server) packed_servers.append(p_server) return packed_servers
def pack(servers): """ Create a list of EDF Servers by packing servers. Currently use a First-Fit but the original article states they used a Worst-Fit packing algorithm. According to the article, a First-Fit should also work. """ packed_servers = [] for server in servers: for p_server in packed_servers: if p_server.utilization + server.utilization <= 1: p_server.add_child(server) break else: p_server = EDFServer() p_server.add_child(server) packed_servers.append(p_server) return packed_servers
def add_idle_tasks(self, servers): """ Create IdleTasks in order to reach 100% system utilization. """ from collections import namedtuple # pylint: disable-msg=C0103 IdleTask = namedtuple('IdleTask', ['utilization']) idle = len(self.processors) - sum([s.utilization for s in servers]) for server in servers: if server.utilization < 1 and idle > 0: task = IdleTask(min(1 - server.utilization, idle)) server.add_child(TaskServer(task)) idle -= task.utilization while idle > 0: task = IdleTask(min(1, idle)) server = EDFServer() server.add_child(TaskServer(task)) idle -= task.utilization servers.append(server)
def pack_BF(servers): """ Create a list of EDF Servers by packing servers. Best-Fit packing algorithm. """ # Find packed servers if there is one (EDFServer) packed_servers = [] #[s for s in servers if s is EDFServer()] for server in servers: #Try to place the item in the fullest bin that will accommodate it, i.e., the one that will leave the least space remaining packed_servers.sort(key=lambda x: x.utilization, reverse=True) for p_server in packed_servers: if p_server.utilization + server.utilization <= 1: p_server.add_child(server) break else: p_server = EDFServer() p_server.add_child(server) packed_servers.append(p_server) return packed_servers