+
+ def _allocate_cpu(self, flavor):
+ """
+ Allocate CPU time.
+ :param flavor: flavor dict
+ :return: cpu time fraction
+ """
+ fl_cu = flavor.get("compute")
+ # check for over provisioning
+ if self.dc_alloc_cu + fl_cu > self.dc_max_cu:
+ raise Exception("Not enough compute resources left.")
+ self.dc_alloc_cu += fl_cu
+ # get cpu time fraction for entire emulation
+ e_cpu = self.registrar.e_cpu
+ # calculate cpu time fraction of a single compute unit
+ cu = float(e_cpu) / sum([rm.dc_max_cu for rm in list(self.registrar.resource_models)])
+ # calculate cpu time fraction for container with given flavor
+ return cu * fl_cu
+
+ def _free_cpu(self, flavor):
+ """
+ Free CPU allocation.
+ :param flavor: flavor dict
+ :return:
+ """
+ self.dc_alloc_cu -= flavor.get("compute")
+
+ def _allocate_mem(self, flavor):
+ """
+ Allocate mem.
+ :param flavor: flavor dict
+ :return: mem limit in MB
+ """
+ fl_mu = flavor.get("memory")
+ # check for over provisioning
+ if self.dc_alloc_mu + fl_mu > self.dc_max_mu:
+ raise Exception("Not enough memory resources left.")
+ self.dc_alloc_mu += fl_mu
+ # get cpu time fraction for entire emulation
+ e_mem = self.registrar.e_mem
+ # calculate cpu time fraction of a single compute unit
+ mu = float(e_mem) / sum([rm.dc_max_mu for rm in list(self.registrar.resource_models)])
+ # calculate cpu time fraction for container with given flavor
+ return mu * fl_mu
+
+ def _free_mem(self, flavor):
+ """
+ Free memory allocation
+ :param flavor: flavor dict
+ :return:
+ """
+ self.dc_alloc_mu -= flavor.get("memory")