[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