[haizea-commit] r550 - in trunk/src/haizea/resourcemanager: . enact
haizea-commit at mailman.cs.uchicago.edu
haizea-commit at mailman.cs.uchicago.edu
Thu Dec 4 17:09:26 CST 2008
Author: borja
Date: 2008-12-04 17:09:18 -0600 (Thu, 04 Dec 2008)
New Revision: 550
Modified:
trunk/src/haizea/resourcemanager/configfile.py
trunk/src/haizea/resourcemanager/enact/opennebula.py
trunk/src/haizea/resourcemanager/enact/simulated.py
trunk/src/haizea/resourcemanager/scheduler.py
Log:
* Fork suspendresume rate into separate suspend and resume rates
* Take into account enactment overhead in shutdown (this includes adding a delay when sending commands to OpenNebula)
Modified: trunk/src/haizea/resourcemanager/configfile.py
===================================================================
--- trunk/src/haizea/resourcemanager/configfile.py 2008-11-26 21:11:23 UTC (rev 549)
+++ trunk/src/haizea/resourcemanager/configfile.py 2008-12-04 23:09:18 UTC (rev 550)
@@ -192,6 +192,24 @@
- all: any lease can be suspended
"""),
+ Option(name = "suspend-rate",
+ getter = "suspend-rate",
+ type = OPTTYPE_FLOAT,
+ required = True,
+ doc = """
+ Rate at which VMs are assumed to suspend (in MB of
+ memory per second)
+ """),
+
+ Option(name = "resume-rate",
+ getter = "resume-rate",
+ type = OPTTYPE_FLOAT,
+ required = True,
+ doc = """
+ Rate at which VMs are assumed to resume (in MB of
+ memory per second)
+ """),
+
Option(name = "suspendresume-exclusion",
getter = "suspendresume-exclusion",
type = OPTTYPE_STRING,
@@ -237,6 +255,26 @@
situations where a lease starts and immediately gets suspended.
"""),
+ Option(name = "override-suspend-time",
+ getter = "override-suspend-time",
+ type = OPTTYPE_INT,
+ required = False,
+ default = None,
+ doc = """
+ Overrides the time it takes to suspend a VM to a fixed value
+ (i.e., not computed based on amount of memory, enactment overhead, etc.)
+ """),
+
+ Option(name = "override-resume-time",
+ getter = "override-resume-time",
+ type = OPTTYPE_INT,
+ required = False,
+ default = None,
+ doc = """
+ Overrides the time it takes to suspend a VM to a fixed value
+ (i.e., not computed based on amount of memory, enactment overhead, etc.)
+ """),
+
Option(name = "force-scheduling-threshold",
getter = "force-scheduling-threshold",
type = OPTTYPE_TIMEDELTA,
@@ -398,15 +436,6 @@
node where the images are stored.
"""),
- Option(name = "suspendresume-rate",
- getter = "simul.suspendresume-rate",
- type = OPTTYPE_FLOAT,
- required = True,
- doc = """
- Rate at which VMs are assumed to suspend (in MB of
- memory per second)
- """),
-
Option(name = "stop-when",
getter = "stop-when",
type = OPTTYPE_STRING,
@@ -635,16 +664,6 @@
doc = """
Location of OpenNebula "onevm" command.
"""),
-
- Option(name = "suspendresume-rate-estimate",
- getter = "one.suspendresume-rate-estimate",
- type = OPTTYPE_FLOAT,
- required = False,
- default = 32,
- doc = """
- Rate at which VMs are estimated to suspend (in MB of
- memory per second)
- """),
Option(name = "stop-when-no-more-leases",
getter = "stop-when-no-more-leases",
Modified: trunk/src/haizea/resourcemanager/enact/opennebula.py
===================================================================
--- trunk/src/haizea/resourcemanager/enact/opennebula.py 2008-11-26 21:11:23 UTC (rev 549)
+++ trunk/src/haizea/resourcemanager/enact/opennebula.py 2008-12-04 23:09:18 UTC (rev 550)
@@ -34,7 +34,6 @@
ResourcePoolInfo.__init__(self)
config = get_config()
self.logger = logging.getLogger("ENACT.ONE.INFO")
- self.suspendresumerate = config.get("one.suspendresume-rate-estimate")
# Get information about nodes from DB
conn = sqlite.connect(config.get("one.db"))
@@ -77,9 +76,6 @@
(constants.RES_DISK, constants.RESTYPE_INT, "Disk"),
(constants.RES_NETIN, constants.RESTYPE_INT, "Net (in)"),
(constants.RES_NETOUT, constants.RESTYPE_INT, "Net (out)")]
-
- def get_suspendresume_rate(self):
- return self.suspendresumerate
def get_bandwidth(self):
return 0
@@ -130,6 +126,10 @@
self.logger.debug("Command returned succesfully.")
else:
raise Exception, "Error when running onevm shutdown (status=%i, output='%s')" % (status, output)
+ # TODO: We should spawn out a thread to do this, so Haizea isn't
+ # blocking until all these commands end
+ interval = get_config().get("enactment-overhead").seconds
+ sleep(interval)
def suspend(self, action):
for vnode in action.vnodes:
Modified: trunk/src/haizea/resourcemanager/enact/simulated.py
===================================================================
--- trunk/src/haizea/resourcemanager/enact/simulated.py 2008-11-26 21:11:23 UTC (rev 549)
+++ trunk/src/haizea/resourcemanager/enact/simulated.py 2008-12-04 23:09:18 UTC (rev 550)
@@ -28,7 +28,6 @@
ResourcePoolInfo.__init__(self)
self.logger = logging.getLogger("ENACT.SIMUL.INFO")
config = get_config()
- self.suspendresumerate = config.get("simul.suspendresume-rate")
numnodes = config.get("simul.nodes")
@@ -57,9 +56,6 @@
resourcecapacity = r.split(",")[1]
capacity.set_by_type(desc2type[resourcename], int(resourcecapacity))
return capacity
-
- def get_suspendresume_rate(self):
- return self.suspendresumerate
def get_migration_bandwidth(self):
return 100 # TODO: Get from config file
Modified: trunk/src/haizea/resourcemanager/scheduler.py
===================================================================
--- trunk/src/haizea/resourcemanager/scheduler.py 2008-11-26 21:11:23 UTC (rev 549)
+++ trunk/src/haizea/resourcemanager/scheduler.py 2008-12-04 23:09:18 UTC (rev 550)
@@ -922,10 +922,10 @@
prev_end = t[1]
return times
-
+
def __schedule_shutdown(self, vmrr):
config = get_config()
- shutdown_time = config.get("shutdown-time")
+ shutdown_time = self.__estimate_shutdown_time(vmrr.lease)
start = vmrr.end - shutdown_time
end = vmrr.end
@@ -946,7 +946,7 @@
from haizea.resourcemanager.rm import ResourceManager
config = ResourceManager.get_singleton().config
susp_exclusion = config.get("suspendresume-exclusion")
- rate = self.resourcepool.info.get_suspendresume_rate()
+ rate = config.get("suspend-rate")
if suspend_by < vmrr.start or suspend_by > vmrr.end:
raise SchedException, "Tried to schedule a suspension by %s, which is outside the VMRR's duration (%s-%s)" % (suspend_by, vmrr.start, vmrr.end)
@@ -988,7 +988,7 @@
from haizea.resourcemanager.rm import ResourceManager
config = ResourceManager.get_singleton().config
resm_exclusion = config.get("suspendresume-exclusion")
- rate = self.resourcepool.info.get_suspendresume_rate()
+ rate = config.get("resume-rate")
if resume_at < vmrr.start or resume_at > vmrr.end:
raise SchedException, "Tried to schedule a resumption at %s, which is outside the VMRR's duration (%s-%s)" % (resume_at, vmrr.start, vmrr.end)
@@ -1076,14 +1076,14 @@
vmrr.pre_rrs.insert(0, migr_rr)
def __compute_suspend_resume_time(self, mem, rate):
+ force = get_config().get("suspendresume-exclusion")
time = float(mem) / rate
time = round_datetime_delta(TimeDelta(seconds = time))
return time
- def __estimate_suspend_resume_time(self, lease):
+ def __estimate_suspend_resume_time(self, lease, rate):
susp_exclusion = get_config().get("suspendresume-exclusion")
enactment_overhead = get_config().get("enactment-overhead")
- rate = self.resourcepool.info.get_suspendresume_rate()
mem = lease.requested_resources.get_by_type(constants.RES_MEM)
if susp_exclusion == constants.SUSPRES_EXCLUSION_GLOBAL:
return lease.numnodes * (self.__compute_suspend_resume_time(mem, rate) + enactment_overhead)
@@ -1092,14 +1092,24 @@
return lease.numnodes * (self.__compute_suspend_resume_time(mem, rate) + enactment_overhead)
def __estimate_shutdown_time(self, lease):
- # Always uses fixed value in configuration file
- return get_config().get("shutdown-time")
+ enactment_overhead = get_config().get("enactment-overhead").seconds
+ return get_config().get("shutdown-time") + (enactment_overhead * lease.numnodes)
def __estimate_suspend_time(self, lease):
- return self.__estimate_suspend_resume_time(lease)
+ rate = get_config().get("suspend-rate")
+ override = get_config().get("override-suspend-time")
+ if override != None:
+ return override
+ else:
+ return self.__estimate_suspend_resume_time(lease, rate)
def __estimate_resume_time(self, lease):
- return self.__estimate_suspend_resume_time(lease)
+ rate = get_config().get("resume-rate")
+ override = get_config().get("override-resume-time")
+ if override != None:
+ return override
+ else:
+ return self.__estimate_suspend_resume_time(lease, rate)
def __estimate_migration_time(self, lease):
More information about the Haizea-commit
mailing list