[haizea-commit] r800 - in branches/1.1/src/haizea: core core/scheduler lwf

haizea-commit at mailman.cs.uchicago.edu haizea-commit at mailman.cs.uchicago.edu
Sat Jun 19 15:20:51 CDT 2010


Author: borja
Date: 2010-06-19 15:20:51 -0500 (Sat, 19 Jun 2010)
New Revision: 800

Modified:
   branches/1.1/src/haizea/core/configfile.py
   branches/1.1/src/haizea/core/scheduler/resourcepool.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/lwf/analysis.py
   branches/1.1/src/haizea/lwf/generators.py
Log:
Miscellaneous small bug fixes.

Modified: branches/1.1/src/haizea/core/configfile.py
===================================================================
--- branches/1.1/src/haizea/core/configfile.py	2010-06-02 17:30:02 UTC (rev 799)
+++ branches/1.1/src/haizea/core/configfile.py	2010-06-19 20:20:51 UTC (rev 800)
@@ -552,7 +552,7 @@
             getter      = "sanity-check",
             type        = OPTTYPE_BOOLEAN,
             required    = False,
-            default     = True,
+            default     = False,
             doc         = """
             Perform a sanity check at every timestep (only for debugging)
             """),     

Modified: branches/1.1/src/haizea/core/scheduler/resourcepool.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/resourcepool.py	2010-06-02 17:30:02 UTC (rev 799)
+++ branches/1.1/src/haizea/core/scheduler/resourcepool.py	2010-06-19 20:20:51 UTC (rev 800)
@@ -20,6 +20,7 @@
 import haizea.common.constants as constants
 import haizea.core.enact.actions as actions
 from haizea.core.scheduler import EnactmentError
+from haizea.core.leases import UnmanagedSoftwareEnvironment, DiskImageSoftwareEnvironment
 import logging 
 
 
@@ -61,6 +62,16 @@
         except EnactmentError, exc:
             self.logger.error("Enactment of end VM failed: %s" % exc.message)
             raise
+
+    def verify_deploy(self, lease, rr):
+        if isinstance(lease.software, UnmanagedSoftwareEnvironment):
+            return True
+        elif isinstance(lease.software, DiskImageSoftwareEnvironment):
+            for (vnode, pnode) in rr.nodes.items():
+                img = self.get_node(pnode).get_diskimage(lease.id, vnode, lease.software.image_id)
+                if img == None:
+                    return False
+            return True
          
     def suspend_vms(self, lease, rr):
         # Add memory image files

Modified: branches/1.1/src/haizea/core/scheduler/slottable.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/slottable.py	2010-06-02 17:30:02 UTC (rev 799)
+++ branches/1.1/src/haizea/core/scheduler/slottable.py	2010-06-19 20:20:51 UTC (rev 800)
@@ -605,6 +605,7 @@
         @param rr: Resource reservation
         @type rr: L{ResourceReservation}
         """        
+        #print rr.lease.id, rr.start, rr.end
         self.__remove_reservation(rr, rr.start, rr.end)
 
 
@@ -985,7 +986,7 @@
         pos = bisect.bisect_left(rlist, item)
         found = False
         while not found:
-            if rlist[pos].value == rr:
+            if id(rlist[pos].value) == id(rr):
                 found = True
             else:
                 pos += 1

Modified: branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/vm_scheduler.py	2010-06-02 17:30:02 UTC (rev 799)
+++ branches/1.1/src/haizea/core/scheduler/vm_scheduler.py	2010-06-19 20:20:51 UTC (rev 800)
@@ -138,7 +138,7 @@
             for pnode in vmrr.nodes.values():
                 mem = vmrr.resources_in_pnode[pnode].get_by_type(constants.RES_MEM)
                 mem_in_pnode[pnode] += mem
-            max_mem_to_transfer = max(mem_in_pnode.values())
+            max_mem_to_transfer = max(mem_in_pnode.values()) * 2 # Kludge
             bandwidth = self.resourcepool.info.get_migration_bandwidth()
             return estimate_transfer_time(max_mem_to_transfer, bandwidth)
         elif migration == constants.MIGRATE_YES_NOTRANSFER:
@@ -358,8 +358,9 @@
         """             
 
         # Determine the start and end time
+        shutdown_time = lease.estimate_shutdown_time()
         start = lease.start.requested
-        end = start + lease.duration.requested
+        end = start + lease.duration.requested + shutdown_time
         
         # Convert Capacity objects in lease object into ResourceTuples that
         # we can hand over to the mapper.
@@ -1311,7 +1312,19 @@
         """        
         self.logger.debug("LEASE-%i Start of handleStartVM" % l.id)
         l.print_contents()
+
         lease_state = l.get_state()
+
+        if not self.resourcepool.verify_deploy(l, rr):
+            self.logger.error("Deployment was not complete.")
+            raise # TODO raise something better
+
+        # Kludge: Should be done by the preparations scheduler
+        if l.get_state() == Lease.STATE_SCHEDULED:
+            # Piggybacking
+            l.set_state(Lease.STATE_READY)
+            lease_state = l.get_state()
+            
         if lease_state == Lease.STATE_READY:
             l.set_state(Lease.STATE_ACTIVE)
             rr.state = ResourceReservation.STATE_ACTIVE

Modified: branches/1.1/src/haizea/lwf/analysis.py
===================================================================
--- branches/1.1/src/haizea/lwf/analysis.py	2010-06-02 17:30:02 UTC (rev 799)
+++ branches/1.1/src/haizea/lwf/analysis.py	2010-06-19 20:20:51 UTC (rev 800)
@@ -46,12 +46,12 @@
         nleases = len(self.workload.get_leases())
         for lease in self.workload.get_leases():
             if lease.start.requested + lease.duration.requested > self.starttime + self.utilization_length:
-                duration = self.starttime + self.utilization_length - lease.start.requested
+                duration = (self.starttime + self.utilization_length - lease.start.requested).seconds
             else: 
                 duration = lease.duration.requested.seconds
             for res in lease.requested_resources.values():
                 for i in range(1,res.get_ninstances("CPU") + 1):
-                    utilization += res.get_quantity_instance("CPU", i) * duration
+                    utilization += (res.get_quantity_instance("CPU", i) / 100.0) * duration
             if isinstance(lease.software, UnmanagedSoftwareEnvironment):
                 software["Unmanaged"] += 1
             elif isinstance(lease.software, DiskImageSoftwareEnvironment):
@@ -63,10 +63,9 @@
             duration = self.utilization_length.seconds
             for res in self.site.nodes.get_all_nodes().values():
                 for i in range(1,res.get_ninstances("CPU") + 1):
-                    max_utilization += res.get_quantity_instance("CPU", i) * duration
-            
+                    max_utilization += (res.get_quantity_instance("CPU", i)/100.0) * duration
         
-        print "Utilization: %.2f%%" % (utilization / max_utilization)
+        print "Utilization: %.2f%%" % ((utilization / max_utilization) * 100.0)
         print
         sorted_images = sorted(software.iteritems(), key=operator.itemgetter(1), reverse=True)
         for image, count in sorted_images:

Modified: branches/1.1/src/haizea/lwf/generators.py
===================================================================
--- branches/1.1/src/haizea/lwf/generators.py	2010-06-02 17:30:02 UTC (rev 799)
+++ branches/1.1/src/haizea/lwf/generators.py	2010-06-19 20:20:51 UTC (rev 800)
@@ -301,7 +301,14 @@
         lwf.set("name", self.outfile)
         description = ET.SubElement(lwf, "description")
         description.text = "Created with haizea-generate"
-
+        
+        attributes_elem = ET.SubElement(lwf, "attributes")
+        attributes = self._get_attributes()
+        for name, value in attributes.items():
+            attr_elem = ET.SubElement(attributes_elem, "attr")
+            attr_elem.set("name", name)
+            attr_elem.set("value", value)
+        
         site = self.config.get(LWFGenerator.GENERAL_SEC, LWFGenerator.SITE_OPT)
         if site.startswith("file:"):
             sitefile = site.split(":")
@@ -330,13 +337,14 @@
                 lease_request.append(l.to_xml())
         elif self.numleases_type == LWFGenerator.NUMLEASES_TYPE_UTILIZATION:
             utilization = self.config.getfloat(LWFGenerator.NUMLEASES_SEC, LWFGenerator.NUMLEASES_UTILIZATION_OPT)
+            utilization /= 100.0
             last_request = self.config.get(LWFGenerator.NUMLEASES_SEC, LWFGenerator.NUMLEASES_LAST_REQUEST_OPT)
             last_request = Parser.DateTimeDeltaFromString(last_request)
             
             max_utilization = 0
             for res in site.nodes.get_all_nodes().values():
                 for i in range(1,res.get_ninstances("CPU") + 1):
-                    max_utilization += res.get_quantity_instance("CPU", i) * last_request.seconds
+                    max_utilization += (res.get_quantity_instance("CPU", i)/100.0) * last_request.seconds
             target_utilization = int(max_utilization * utilization)
             
             accum_utilization = 0
@@ -350,9 +358,9 @@
                 lease_utilization = 0
                 for res in lease.requested_resources.values():
                     for i in range(1,res.get_ninstances("CPU") + 1):
-                        lease_utilization += res.get_quantity_instance("CPU", i) * duration                
+                        lease_utilization += (res.get_quantity_instance("CPU", i) / 100.0) * duration                
                 accum_utilization += lease_utilization
-                
+
             time = TimeDelta(seconds=0)            
             avg_interval = int(last_request.seconds / len(leases))
             for l in leases:



More information about the Haizea-commit mailing list