[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