[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