[haizea-commit] r778 - in branches/1.1/src/haizea: core core/scheduler pluggable/policies

haizea-commit at mailman.cs.uchicago.edu haizea-commit at mailman.cs.uchicago.edu
Sun Jan 17 21:51:33 CST 2010


Author: borja
Date: 2010-01-17 21:51:32 -0600 (Sun, 17 Jan 2010)
New Revision: 778

Modified:
   branches/1.1/src/haizea/core/leases.py
   branches/1.1/src/haizea/core/scheduler/lease_scheduler.py
   branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
   branches/1.1/src/haizea/pluggable/policies/preemption.py
Log:
Multiple small fixes


Modified: branches/1.1/src/haizea/core/leases.py
===================================================================
--- branches/1.1/src/haizea/core/leases.py	2010-01-16 01:49:02 UTC (rev 777)
+++ branches/1.1/src/haizea/core/leases.py	2010-01-18 03:51:32 UTC (rev 778)
@@ -485,7 +485,7 @@
         """
         vmrr_at = None
         for vmrr in self.vm_rrs:
-            if time >= vmrr.start and time < vmrr.end:
+            if time >= vmrr.get_first_start() and time < vmrr.get_final_end():
                 vmrr_at = vmrr
                 break
         return vmrr_at
@@ -496,7 +496,7 @@
         """
         vmrr_after = []
         for vmrr in self.vm_rrs:
-            if vmrr.start > time:
+            if vmrr.get_first_start() > time:
                 vmrr_after.append(vmrr)
         return vmrr_after    
 
@@ -785,7 +785,7 @@
                     # the premature end time coincides with the
                     # starting time of the VMRR)
                     if vmrr.prematureend == vmrr.start:
-                        vmrr.prematureend += 1    
+                        vmrr.prematureend += TimeDelta(seconds=1)    
                     break                 
                 else:
                     vmrr.prematureend = None

Modified: branches/1.1/src/haizea/core/scheduler/lease_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/lease_scheduler.py	2010-01-16 01:49:02 UTC (rev 777)
+++ branches/1.1/src/haizea/core/scheduler/lease_scheduler.py	2010-01-18 03:51:32 UTC (rev 778)
@@ -502,7 +502,7 @@
         leases.sort(key= lambda l: (l.deadline - nexttime) / l.get_remaining_duration_at(nexttime))
         if len(leases) > 0:
             self.logger.debug("Rescheduling future deadline leases")
-            self.slottable.save(leases)
+            #self.slottable.save(leases)
             feasible = True
             node_ids = self.slottable.nodes.keys()
             earliest = {}
@@ -514,10 +514,14 @@
 
             dirtynodes, cleanleases = self.vm_scheduler.find_dirty_nodes(leases, dirtynodes, orig_vmrrs)
 
+            dirtyleases = [l for l in leases if l not in cleanleases]
+
+            print "Would have to reschedule %i leases" % len(dirtyleases)
+            return
+
             for vmrr in [vmrr2 for vmrr2 in future_vmrrs if vmrr2.lease not in cleanleases]:
                 self.vm_scheduler.cancel_vm(vmrr)
     
-            dirtyleases = [l for l in leases if l not in cleanleases]
 
             try:
                 (scheduled, add_vmrrs, dirtytime) = self.vm_scheduler.reschedule_deadline_leases(dirtyleases, orig_vmrrs, nexttime, earliest, nexttime, dirtytime=None)
@@ -534,6 +538,7 @@
                     lease2.append_vmrr(vmrr)            
             else:
                 self.slottable.restore()
+            print "FOO2"
 
 
 
@@ -833,14 +838,13 @@
                         cancel = True
                     else:
                         self.logger.debug("Lease %i will be suspended." % lease_to_preempt.id)
-
                         
             after_vmrrs = lease_to_preempt.get_vmrr_after(preemption_time)
 
             if not cancel:
                 # Preempting
                 durs[lease_to_preempt] = lease_to_preempt.get_remaining_duration_at(preemption_time)             
-                self.vm_scheduler.preempt_vm(preempt_vmrr, preemption_time)
+                self.vm_scheduler.preempt_vm(preempt_vmrr, min(preemption_time,preempt_vmrr.end))
                 susp_time = preempt_vmrr.post_rrs[-1].end - preempt_vmrr.post_rrs[0].start
                 durs[lease_to_preempt] += susp_time
                                         
@@ -858,7 +862,6 @@
                         lease_to_preempt.remove_vmrr(after_vmrr)
                         self.vm_scheduler.cancel_vm(after_vmrr)                   
                     after_vmrrs=[]
-
                     if preempt_vmrr.state == ResourceReservation.STATE_ACTIVE:
                         last_vmrr = lease_to_preempt.get_last_vmrr()
                         if last_vmrr != None and last_vmrr.is_suspending():
@@ -866,8 +869,6 @@
                         else:
                             # The VMRR we're preempting is the active one
                             new_state[lease_to_preempt] = Lease.STATE_READY
-
-                    self.vm_scheduler.cancel_vm(preempt_vmrr)
                 else:
                     durs[lease_to_preempt] = lease_to_preempt.get_remaining_duration_at(preemption_time)             
                     lease_state = lease_to_preempt.get_state()
@@ -908,7 +909,7 @@
                     for node in node_ids:
                         earliest[node] = EarliestStartingTime(preemption_time, EarliestStartingTime.EARLIEST_NOPREPARATION)                
                     (new_vmrr, preemptions) = self.vm_scheduler.reschedule_deadline(lease_to_preempt, dur, nexttime, earliest, override_state = Lease.STATE_SUSPENDED_PENDING)
-    
+
                 # Add VMRR to lease
                 lease_to_preempt.append_vmrr(new_vmrr)
                 

Modified: branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/vm_scheduler.py	2010-01-16 01:49:02 UTC (rev 777)
+++ branches/1.1/src/haizea/core/scheduler/vm_scheduler.py	2010-01-18 03:51:32 UTC (rev 778)
@@ -252,15 +252,18 @@
         t -- Time by which the VM must be preempted
         """
         vmrr = lease.get_vmrr_at(t)
+        if t < vmrr.start:
+            return False # t could be during a resume
+        by_t = min(vmrr.end, t) # t could be during a suspend
         if nexttime == None:
             time_until_suspend = t - vmrr.start
         else:
             time_until_suspend = min( (t - vmrr.start, t - nexttime))
         min_duration = self.__compute_scheduling_threshold(lease)
-        can_suspend = time_until_suspend >= min_duration        
+        can_suspend = time_until_suspend >= min_duration       
         return can_suspend
+ 
     
-    
     def preempt_vm(self, vmrr, t):
         """ Preempts a VM reservation at a given time
 
@@ -645,7 +648,7 @@
 
         if vmrr == None or vmrr.end - vmrr.start != duration or vmrr.end > lease.deadline or len(preemptions)>0:
             self.logger.debug("Lease #%i cannot be scheduled before deadline using best-effort." % lease.id)
-            
+            print "BAR1"            
             dirtynodes = set()
             dirtytime = earliest_time
 
@@ -661,6 +664,7 @@
             self.slottable.save(leases)
             
             for future_vmrr in future_vmrrs:
+                #print "REMOVE", future_vmrr.lease.id, future_vmrr.start, future_vmrr.end
                 future_vmrr.lease.remove_vmrr(future_vmrr)
                 self.cancel_vm(future_vmrr)
             
@@ -778,7 +782,7 @@
                 if l in scheduled:
                     self.logger.vdebug("Lease %i after rescheduling:" % l.id)
                     l.print_contents()                   
-            
+            print "BAR2"
             return return_vmrr, []
         else:
             return vmrr, preemptions
@@ -1558,6 +1562,12 @@
         # ONLY for simulation
         self.lease._update_prematureend()
         
+    def get_first_start(self):
+        if len(self.pre_rrs) == 0:
+            return self.start
+        else:
+            return self.pre_rrs[0].start
+
     def get_final_end(self):
         if len(self.post_rrs) == 0:
             return self.end

Modified: branches/1.1/src/haizea/pluggable/policies/preemption.py
===================================================================
--- branches/1.1/src/haizea/pluggable/policies/preemption.py	2010-01-16 01:49:02 UTC (rev 777)
+++ branches/1.1/src/haizea/pluggable/policies/preemption.py	2010-01-18 03:51:32 UTC (rev 778)
@@ -119,4 +119,4 @@
             if time + delay + remaining_duration < deadline:
                 return slack
             else:
-                return -1
+                return -1
\ No newline at end of file



More information about the Haizea-commit mailing list