[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