[haizea-commit] r773 - in branches/1.1/src/haizea/core: . scheduler

haizea-commit at mailman.cs.uchicago.edu haizea-commit at mailman.cs.uchicago.edu
Fri Jan 15 15:08:48 CST 2010


Author: borja
Date: 2010-01-15 15:08:48 -0600 (Fri, 15 Jan 2010)
New Revision: 773

Modified:
   branches/1.1/src/haizea/core/configfile.py
   branches/1.1/src/haizea/core/leases.py
   branches/1.1/src/haizea/core/manager.py
   branches/1.1/src/haizea/core/scheduler/lease_scheduler.py
   branches/1.1/src/haizea/core/scheduler/slottable.py
Log:
Add option to perform a sanity check at every timestep.

Modified: branches/1.1/src/haizea/core/configfile.py
===================================================================
--- branches/1.1/src/haizea/core/configfile.py	2010-01-15 20:33:44 UTC (rev 772)
+++ branches/1.1/src/haizea/core/configfile.py	2010-01-15 21:08:48 UTC (rev 773)
@@ -546,8 +546,17 @@
             If specified, the simulated clock will print a status
             message with some basic statistics. This is useful to keep track
             of long simulations. The interval is specified in minutes.                
-            """)
+            """),
 
+     Option(name        = "sanity-check",
+            getter      = "sanity-check",
+            type        = OPTTYPE_BOOLEAN,
+            required    = False,
+            default     = True,
+            doc         = """
+            Perform a sanity check at every timestep (only for debugging)
+            """),     
+
     ]
     sections.append(simulation)
     

Modified: branches/1.1/src/haizea/core/leases.py
===================================================================
--- branches/1.1/src/haizea/core/leases.py	2010-01-15 20:33:44 UTC (rev 772)
+++ branches/1.1/src/haizea/core/leases.py	2010-01-15 21:08:48 UTC (rev 773)
@@ -713,7 +713,31 @@
         """            
         self.duration.incr_by_percent(percent)
             
+    def sanity_check(self):
+        prev_time = None
+        for vmrr in self.vm_rrs:
+            if len(vmrr.pre_rrs) > 0:
+                prev_time = vmrr.pre_rrs[0].start - 1
+            else:
+                prev_time = vmrr.start - 1
+                
+            for pre_rr in vmrr.pre_rrs:
+                assert pre_rr.start >= prev_time
+                assert pre_rr.end >= pre_rr.start
+                prev_time = pre_rr.end
+                
+            assert vmrr.start >= prev_time
+            assert vmrr.end >= vmrr.start
+            prev_time = vmrr.end
             
+            if vmrr.prematureend != None:
+                assert vmrr.prematureend >= vmrr.start and vmrr.prematureend < vmrr.end
+
+            for post_rr in vmrr.post_rrs:
+                assert post_rr.start >= prev_time
+                assert post_rr.end >= post_rr.start
+                prev_time = post_rr.end
+            
     def __estimate_suspend_resume_time(self, rate):
         """ Estimate the time to suspend/resume an entire lease
                             

Modified: branches/1.1/src/haizea/core/manager.py
===================================================================
--- branches/1.1/src/haizea/core/manager.py	2010-01-15 20:33:44 UTC (rev 772)
+++ branches/1.1/src/haizea/core/manager.py	2010-01-15 21:08:48 UTC (rev 773)
@@ -796,6 +796,17 @@
             
             self.manager.accounting.at_timestep(self.manager.scheduler)
             
+            if self.manager.config.get("sanity-check"):
+                passed, node, time, capacity = self.manager.scheduler.slottable.sanity_check(only_at=self.time)
+                assert passed == True
+                
+                util = self.manager.accounting.get_last_counter_value("CPU utilization")
+                assert util <= 1.0
+                    
+                for l in self.manager.scheduler.leases.get_leases():
+                    l.sanity_check()
+                    
+            
             # Print a status message
             if self.statusinterval != None and (self.time - prevstatustime).minutes >= self.statusinterval:
                 self.manager.print_status()

Modified: branches/1.1/src/haizea/core/scheduler/lease_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/lease_scheduler.py	2010-01-15 20:33:44 UTC (rev 772)
+++ branches/1.1/src/haizea/core/scheduler/lease_scheduler.py	2010-01-15 21:08:48 UTC (rev 773)
@@ -992,6 +992,15 @@
         self.completed_leases.add(l)
         self.leases.remove(l)
         self.accounting.at_lease_done(l)
+        
+        if get_config().get("sanity-check"):
+            if l.duration.known != None and l.duration.known < l.duration.requested:
+                duration = l.duration.known
+            else:
+                duration = l.duration.requested
+                
+            assert duration == l.duration.actual
+        
 
         
 

Modified: branches/1.1/src/haizea/core/scheduler/slottable.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/slottable.py	2010-01-15 20:33:44 UTC (rev 772)
+++ branches/1.1/src/haizea/core/scheduler/slottable.py	2010-01-15 21:08:48 UTC (rev 773)
@@ -975,7 +975,7 @@
                 pos += 1
         return pos
 
-    def sanity_check(self):
+    def sanity_check(self, only_at = None):
         """Verifies the slot table is consistent. Used by unit tests.
         
         @return: Returns a tuple, the first item being True if the slot table
@@ -986,12 +986,15 @@
         @rtype: (C{bool}, 
         """        
         # Get checkpoints
-        changepoints = set()
-        for rr in [x.value for x in self.reservations_by_start]:
-            changepoints.add(rr.start)
-            changepoints.add(rr.end)
-        changepoints = list(changepoints)
-        changepoints.sort()
+        if only_at != None:
+            changepoints = [only_at]
+        else:
+            changepoints = set()
+            for rr in [x.value for x in self.reservations_by_start]:
+                changepoints.add(rr.start)
+                changepoints.add(rr.end)
+            changepoints = list(changepoints)
+            changepoints.sort()
       
         for cp in changepoints:
             avail = self.get_availability(cp)



More information about the Haizea-commit mailing list