[haizea-commit] r768 - in branches/1.1/src/haizea/core: . scheduler
haizea-commit at mailman.cs.uchicago.edu
haizea-commit at mailman.cs.uchicago.edu
Fri Jan 15 03:25:21 CST 2010
Author: borja
Date: 2010-01-15 03:25:21 -0600 (Fri, 15 Jan 2010)
New Revision: 768
Modified:
branches/1.1/src/haizea/core/leases.py
branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
Log:
Saner handling of premature ends in simulations.
Modified: branches/1.1/src/haizea/core/leases.py
===================================================================
--- branches/1.1/src/haizea/core/leases.py 2010-01-15 08:21:24 UTC (rev 767)
+++ branches/1.1/src/haizea/core/leases.py 2010-01-15 09:25:21 UTC (rev 768)
@@ -543,6 +543,7 @@
vmrr -- The VM RR to add.
"""
self.vm_rrs.append(vmrr)
+ self._update_prematureend()
def remove_vmrr(self, vmrr):
"""Removes a VM resource reservation from the lease.
@@ -736,6 +737,29 @@
# Overestimating
return self.numnodes * enactment_overhead + compute_suspend_resume_time(mem, rate)
+ # ONLY for simulation
+ def _update_prematureend(self):
+ known = self.duration.known
+ acc = TimeDelta(0)
+ for vmrr in self.vm_rrs:
+ if known != None:
+ rrdur = vmrr.end - vmrr.start
+ if known - acc < rrdur:
+ vmrr.prematureend = vmrr.start + (known-acc)
+ # Kludgy, but this corner case actually does happen
+ # (because of preemptions, it may turn out that
+ # the premature end time coincides with the
+ # starting time of the VMRR)
+ if vmrr.prematureend == vmrr.start:
+ vmrr.prematureend += 1
+ break
+ else:
+ vmrr.prematureend = None
+ acc += rrdur
+ else:
+ vmrr.prematureend = None
+
+
class LeaseStateMachine(StateMachine):
"""A lease state machine
Modified: branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/vm_scheduler.py 2010-01-15 08:21:24 UTC (rev 767)
+++ branches/1.1/src/haizea/core/scheduler/vm_scheduler.py 2010-01-15 09:25:21 UTC (rev 768)
@@ -731,6 +731,7 @@
self.slottable.add_reservation(l_vmrr)
for rr in l_vmrr.post_rrs:
self.slottable.add_reservation(rr)
+ l.append_vmrr(l_vmrr)
scheduled.add(l)
restored_leases.add(l)
@@ -751,7 +752,8 @@
self.slottable.add_reservation(rr)
self.slottable.add_reservation(l_vmrr)
for rr in l_vmrr.post_rrs:
- self.slottable.add_reservation(rr)
+ self.slottable.add_reservation(rr)
+ l.append_vmrr(l_vmrr)
restored_leases.add(l)
print "Skipped re-scheduling %i leases (out of %i)" % (len(restored_leases), len(leases))
@@ -1539,38 +1541,18 @@
self.nodes = nodes # { vnode -> pnode }
self.pre_rrs = []
self.post_rrs = []
+ self.prematureend = None
- # ONLY for simulation
- self.__update_prematureend()
-
def update_start(self, time):
self.start = time
# ONLY for simulation
- self.__update_prematureend()
+ self.lease._update_prematureend()
def update_end(self, time):
self.end = time
# ONLY for simulation
- self.__update_prematureend()
+ self.lease._update_prematureend()
- # ONLY for simulation
- def __update_prematureend(self):
- if self.lease.duration.known != None:
- remdur = self.lease.duration.get_remaining_known_duration()
- rrdur = self.end - self.start
- if remdur < rrdur:
- self.prematureend = self.start + remdur
- # Kludgy, but this corner case actually does happen
- # (because of preemptions, it may turn out that
- # the premature end time coincides with the
- # starting time of the VMRR)
- if self.prematureend == self.start:
- self.prematureend += 1
- else:
- self.prematureend = None
- else:
- self.prematureend = None
-
def get_final_end(self):
if len(self.post_rrs) == 0:
return self.end
More information about the Haizea-commit
mailing list