[haizea-commit] r788 - in branches/1.1/src/haizea: cli core core/scheduler pluggable/policies
haizea-commit at mailman.cs.uchicago.edu
haizea-commit at mailman.cs.uchicago.edu
Sun Jan 24 14:41:26 CST 2010
Author: borja
Date: 2010-01-24 14:41:25 -0600 (Sun, 24 Jan 2010)
New Revision: 788
Modified:
branches/1.1/src/haizea/cli/commands.py
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/mapper.py
branches/1.1/src/haizea/core/scheduler/slottable.py
branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
branches/1.1/src/haizea/pluggable/policies/pricing.py
Log:
Pushing a bunch of minor changes.
Modified: branches/1.1/src/haizea/cli/commands.py
===================================================================
--- branches/1.1/src/haizea/cli/commands.py 2010-01-21 03:52:47 UTC (rev 787)
+++ branches/1.1/src/haizea/cli/commands.py 2010-01-24 20:41:25 UTC (rev 788)
@@ -320,25 +320,27 @@
print header
for datafile in datafiles:
- data = unpickle(datafile)
-
- attrs = [data.attrs[attr_name] for attr_name in attr_names]
-
- if self.opt.type == "per-run":
- fields = attrs + [str(data.stats[stats_name]) for stats_name in stats_names]
- print ",".join(fields)
- elif self.opt.type == "per-lease":
- leases = data.lease_stats
- for lease_id, lease_stat in leases.items():
- fields = attrs + [`lease_id`] + [str(lease_stat.get(lease_stat_name,"")) for lease_stat_name in lease_stats_names]
+ try:
+ data = unpickle(datafile)
+
+ attrs = [data.attrs[attr_name] for attr_name in attr_names]
+
+ if self.opt.type == "per-run":
+ fields = attrs + [str(data.stats[stats_name]) for stats_name in stats_names]
print ",".join(fields)
- elif self.opt.type == "counter":
- for (time, lease_id, value, avg) in data.counters[counter]:
- fields = attrs + [`time`, `value`]
- if data.counter_avg_type[counter] != AccountingDataCollection.AVERAGE_NONE:
- fields.append(`avg`)
- print ",".join(fields)
-
+ elif self.opt.type == "per-lease":
+ leases = data.lease_stats
+ for lease_id, lease_stat in leases.items():
+ fields = attrs + [`lease_id`] + [str(lease_stat.get(lease_stat_name,"")) for lease_stat_name in lease_stats_names]
+ print ",".join(fields)
+ elif self.opt.type == "counter":
+ for (time, lease_id, value, avg) in data.counters[counter]:
+ fields = attrs + [`time`, `value`]
+ if data.counter_avg_type[counter] != AccountingDataCollection.AVERAGE_NONE:
+ fields.append(`avg`)
+ print ",".join(fields)
+ except:
+ print >> sys.stderr, "Error reading file %s" % (datafile)
class haizea_lwf2xml(Command):
@@ -718,7 +720,7 @@
utilization_no_ramp += time_in_interval * num_processors
start = ET.SubElement(lease, "start")
- #lease.set("preemptible", self.opt.preemptible)
+ lease.set("preemptible", self.opt.preemptible)
lease.set("user", `user_id`)
duration_elem = ET.SubElement(lease, "duration")
Modified: branches/1.1/src/haizea/core/leases.py
===================================================================
--- branches/1.1/src/haizea/core/leases.py 2010-01-21 03:52:47 UTC (rev 787)
+++ branches/1.1/src/haizea/core/leases.py 2010-01-24 20:41:25 UTC (rev 788)
@@ -1252,7 +1252,9 @@
realduration = r.find("realduration")
if realduration != None:
- lease.duration.known = Parser.DateTimeDeltaFromString(realduration.get("time"))
+ realduration = Parser.DateTimeDeltaFromString(realduration.get("time"))
+ if realduration < lease.duration.requested:
+ lease.duration.known = realduration
leases.append(lease)
Modified: branches/1.1/src/haizea/core/scheduler/lease_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/lease_scheduler.py 2010-01-21 03:52:47 UTC (rev 787)
+++ branches/1.1/src/haizea/core/scheduler/lease_scheduler.py 2010-01-24 20:41:25 UTC (rev 788)
@@ -495,15 +495,15 @@
freetime = ending_lease.duration.requested - ending_lease.duration.accumulated
until = nexttime + freetime
freecapacity = numnodes * freetime
- print "Freeing up %i nodes for %s from lease %i" % (numnodes, freetime, ending_lease.id)
- future_vmrrs = self.slottable.get_reservations_on_or_after(nexttime)
+ future_vmrrs = self.slottable.get_reservations_starting_after(nexttime)
future_vmrrs.sort(key=attrgetter("start"))
future_vmrrs = [rr for rr in future_vmrrs
if isinstance(rr, VMResourceReservation)
and rr.lease.get_type() == Lease.DEADLINE
and rr.lease.get_state() in (Lease.STATE_SCHEDULED, Lease.STATE_READY)
- and not rr.is_suspending() and not rr.is_resuming()]
+ and not rr.is_suspending() and not rr.is_resuming()
+ and rr.start != rr.lease.start.requested]
leases = list(set([future_vmrr.lease for future_vmrr in future_vmrrs]))
leases = [l for l in leases if l.numnodes <= numnodes
Modified: branches/1.1/src/haizea/core/scheduler/mapper.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/mapper.py 2010-01-21 03:52:47 UTC (rev 787)
+++ branches/1.1/src/haizea/core/scheduler/mapper.py 2010-01-24 20:41:25 UTC (rev 788)
@@ -453,7 +453,6 @@
def __preempt_lease_deadline(self, lease_to_preempt, preemption_start_time, preemption_end_time, nexttime):
self.logger.debug("Attempting to preempt lease %i" % lease_to_preempt.id)
self.slottable.push_state([lease_to_preempt])
- print "PREEMPTING..."
feasible = True
cancelled = []
@@ -570,13 +569,11 @@
feasible = False
if not feasible:
- print "UNABLE TO PREEMPT"
self.logger.debug("Unable to preempt lease %i" % lease_to_preempt.id)
self.slottable.pop_state()
raise NotSchedulableException, "Unable to preempt leases to make room for lease."
else:
self.logger.debug("Was able to preempt lease %i" % lease_to_preempt.id)
- print "PREEMPTED"
self.slottable.pop_state(discard = True)
for l in new_state:
Modified: branches/1.1/src/haizea/core/scheduler/slottable.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/slottable.py 2010-01-21 03:52:47 UTC (rev 787)
+++ branches/1.1/src/haizea/core/scheduler/slottable.py 2010-01-24 20:41:25 UTC (rev 788)
@@ -862,23 +862,27 @@
reservations_by_start = self.reservations_by_start[:]
reservations_by_end = self.reservations_by_end[:]
+ orig_lease_data = dict([(l,l.get_state()) for l in leases])
orig_vmrrs = dict([(l,l.vm_rrs[:]) for l in leases])
orig_vmrrs_data = {}
for orig_vmrr in orig_vmrrs.values():
for vmrr in orig_vmrr:
orig_vmrrs_data[vmrr] = (vmrr.start, vmrr.end, vmrr.prematureend, vmrr.pre_rrs[:], vmrr.post_rrs[:])
- self.state_stack.append((reservations_by_start, reservations_by_end, orig_vmrrs, orig_vmrrs_data))
+ self.state_stack.append((reservations_by_start, reservations_by_end, orig_lease_data, orig_vmrrs, orig_vmrrs_data))
def pop_state(self, discard = False):
- reservations_by_start, reservations_by_end, orig_vmrrs, orig_vmrrs_data = self.state_stack.pop()
+ reservations_by_start, reservations_by_end, orig_lease_data, orig_vmrrs, orig_vmrrs_data = self.state_stack.pop()
if not discard:
self.logger.debug("Popping slottable state, and leases %s" % [l.id for l in orig_vmrrs.keys()])
self.reservations_by_start = reservations_by_start
self.reservations_by_end = reservations_by_end
+ for l in orig_lease_data:
+ l.state_machine.state = orig_lease_data[l]
+
for l in orig_vmrrs:
l.vm_rrs = orig_vmrrs[l]
for vm_rr in l.vm_rrs:
Modified: branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/vm_scheduler.py 2010-01-21 03:52:47 UTC (rev 787)
+++ branches/1.1/src/haizea/core/scheduler/vm_scheduler.py 2010-01-24 20:41:25 UTC (rev 788)
@@ -745,8 +745,6 @@
self.logger.debug("Rescheduling only leases on nodes %s" % dirtynodes)
self.logger.debug("Leases %s can be skipped" % [l.id for l in cleanleases])
- print "Ignoring %i nodes" % (len(set(self.slottable.nodes.keys()) - dirtynodes) - 1)
-
# Restore the leases
restored_leases = set()
for l in leases:
@@ -785,8 +783,6 @@
l.append_vmrr(l_vmrr)
restored_leases.add(l)
- print "Skipped re-scheduling %i leases (out of %i)" % (len(restored_leases), len(leases))
-
for lease2, vmrr in new_vmrrs.items():
lease2.append_vmrr(vmrr)
@@ -838,7 +834,6 @@
if len(scheduled) < len(leases) and dirtytime != None:
min_future_start = min([min([rr.start for rr in lrr]) for l2, lrr in orig_vmrrs.items() if l2 in leases and l2 not in scheduled])
if min_future_start > dirtytime:
- print "Ignoring after %s" % dirtytime
break
last_vmrr = l.get_last_vmrr()
@@ -998,6 +993,9 @@
times = [] # (start, end, {pnode -> vnodes})
enactment_overhead = get_config().get("enactment-overhead")
+ if override != None:
+ override = TimeDelta(seconds=override)
+
if exclusion == constants.SUSPRES_EXCLUSION_GLOBAL:
# Global exclusion (which represents, e.g., reading/writing the memory image files
# from a global file system) meaning no two suspensions/resumptions can happen at
Modified: branches/1.1/src/haizea/pluggable/policies/pricing.py
===================================================================
--- branches/1.1/src/haizea/pluggable/policies/pricing.py 2010-01-21 03:52:47 UTC (rev 787)
+++ branches/1.1/src/haizea/pluggable/policies/pricing.py 2010-01-24 20:41:25 UTC (rev 788)
@@ -39,6 +39,9 @@
slottable -- A fully constructed SlotTable
"""
PricingPolicy.__init__(self, slottable)
+
+ def get_base_price(self, lease, rate = None):
+ return 0.0
def price_lease(self, lease, preempted_leases):
"""Computes the price of a lease
More information about the Haizea-commit
mailing list