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

haizea-commit at mailman.cs.uchicago.edu haizea-commit at mailman.cs.uchicago.edu
Sun Jul 4 11:38:00 CDT 2010


Author: borja
Date: 2010-07-04 11:37:59 -0500 (Sun, 04 Jul 2010)
New Revision: 818

Modified:
   branches/1.1/src/haizea/core/scheduler/policy.py
   branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
   branches/1.1/src/haizea/lwf/generators.py
   branches/1.1/src/haizea/pluggable/policies/__init__.py
   branches/1.1/src/haizea/pluggable/policies/preemption.py
Log:
- Modified LWF generator so it won't have an empty ramp-up period.
- Minor fixes here and there.

Modified: branches/1.1/src/haizea/core/scheduler/policy.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/policy.py	2010-06-29 00:40:58 UTC (rev 817)
+++ branches/1.1/src/haizea/core/scheduler/policy.py	2010-07-04 16:37:59 UTC (rev 818)
@@ -242,7 +242,7 @@
         between 0 and 1 that can be multiplied by the score, reducing
         the score based on the lease's "age".
         
-        Currently, this method uses a hard-coded horizon of 31 days
+        Currently, this method uses a hard-coded horizon of 7 days
         (any lease older than 7 days cannot be preempted, and leases
         less than 7 days are assigned a factor proportional to their age)
         

Modified: branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/vm_scheduler.py	2010-06-29 00:40:58 UTC (rev 817)
+++ branches/1.1/src/haizea/core/scheduler/vm_scheduler.py	2010-07-04 16:37:59 UTC (rev 818)
@@ -1613,7 +1613,7 @@
         if len(self.pre_rrs) == 0:
             return self.start
         else:
-            return [rr for rr in self.pre_rrs if not isinstance(rr, MemImageMigrationResourceReservation)][0].start
+            return [rr for rr in self.pre_rrs if isinstance(rr, ResumptionResourceReservation)][0].start
 
     def get_final_end(self):
         if len(self.post_rrs) == 0:
@@ -1622,7 +1622,7 @@
             return self.post_rrs[-1].end
 
     def is_resuming(self):
-        return len(self.pre_rrs) > 0 and (isinstance(self.pre_rrs[0], ResumptionResourceReservation) or isinstance(self.pre_rrs[0], MemImageMigrationResourceReservation))
+        return len(self.pre_rrs) > 0 and reduce(operator.or_, [isinstance(rr, ResumptionResourceReservation) for rr in self.pre_rrs])
 
     def is_suspending(self):
         return len(self.post_rrs) > 0 and isinstance(self.post_rrs[0], SuspensionResourceReservation)

Modified: branches/1.1/src/haizea/lwf/generators.py
===================================================================
--- branches/1.1/src/haizea/lwf/generators.py	2010-06-29 00:40:58 UTC (rev 817)
+++ branches/1.1/src/haizea/lwf/generators.py	2010-07-04 16:37:59 UTC (rev 818)
@@ -366,9 +366,10 @@
             for l in leases:
                 interval = avg_interval + TimeDelta(seconds=self._get_interval())
                 time = max(time + interval, TimeDelta(seconds=0))
-                l.start.requested += time
+                arrival = max(time - l.start.requested, TimeDelta(seconds=0))
+                l.start.requested = time
                 lease_request = ET.SubElement(requests, "lease-request")
-                lease_request.set("arrival", str(time))            
+                lease_request.set("arrival", str(arrival))            
                 lease_request.append(l.to_xml())                            
         
         tree = ET.ElementTree(lwf)

Modified: branches/1.1/src/haizea/pluggable/policies/__init__.py
===================================================================
--- branches/1.1/src/haizea/pluggable/policies/__init__.py	2010-06-29 00:40:58 UTC (rev 817)
+++ branches/1.1/src/haizea/pluggable/policies/__init__.py	2010-07-04 16:37:59 UTC (rev 818)
@@ -27,6 +27,7 @@
 
 preemption_class_mappings = {"no-preemption": "haizea.pluggable.policies.preemption.NoPreemptionPolicy",
                              "ar-preempts-everything": "haizea.pluggable.policies.preemption.ARPreemptsEverythingPolicy",
+                             "ar-preempts-be": "haizea.pluggable.policies.preemption.ARPreemptsBEPolicy",
                              "deadline":"haizea.pluggable.policies.preemption.DeadlinePolicy"}
 
 host_class_mappings = {"no-policy": "haizea.pluggable.policies.host_selection.NoPolicy",

Modified: branches/1.1/src/haizea/pluggable/policies/preemption.py
===================================================================
--- branches/1.1/src/haizea/pluggable/policies/preemption.py	2010-06-29 00:40:58 UTC (rev 817)
+++ branches/1.1/src/haizea/pluggable/policies/preemption.py	2010-07-04 16:37:59 UTC (rev 818)
@@ -82,6 +82,37 @@
         else:
             return -1
         
+class ARPreemptsBEPolicy(PreemptabilityPolicy):
+    """A simple preemption policy where AR leases can always preempt
+    every other type of lease. Given two possible leases to preempt,
+    the "youngest" one is preferred (i.e., the one that was most recently
+    submitted).
+    """    
+    def __init__(self, slottable):
+        """Constructor
+        
+        Argument
+        slottable -- A fully constructed SlotTable
+        """        
+        PreemptabilityPolicy.__init__(self, slottable)
+    
+    def get_lease_preemptability_score(self, preemptor, preemptee, time):
+        """Computes the lease preemptability score
+        
+        See class documentation for details on what policy is implemented here.
+        See documentation of PreemptabilityPolicy.get_lease_preemptability_score
+        for more details on this function.
+        
+        Arguments:
+        preemptor -- Preemptor lease
+        preemptee -- Preemptee lease
+        time -- Time at which preemption would take place
+        """        
+        if preemptor.get_type() == Lease.ADVANCE_RESERVATION and preemptee.get_type() == Lease.BEST_EFFORT:
+            return self._get_aging_factor(preemptee, time)
+        else:
+            return -1        
+        
 class DeadlinePolicy(PreemptabilityPolicy):
     """Only leases that will still meet their deadline after preemption can
     be preempted. Furthermore, leases with the most slack time are preferred.



More information about the Haizea-commit mailing list