Browse Source

The test for entering steady state was wrong

The first epoch will necessarily have Clints(NB) N=0, and so won't be
matched by the stat regexp, which means the steadystate=True wouldn't
have been triggered until after the *next* epoch.

Now we just look for the epoch-ending log line indicating the number of
"MiB used" to signal the transition to steady state.
Ian Goldberg 4 years ago
parent
commit
3f941d45ca
1 changed files with 5 additions and 2 deletions
  1. 5 2
      analysis/parselogs.py

+ 5 - 2
analysis/parselogs.py

@@ -158,6 +158,7 @@ class LogParser:
         self.startre = re.compile('Starting simulation .*?\/([A-Z]+)_([A-Z]+)_([\d\.]+)_')
         self.statperbwre = re.compile('(Relays\(N?F?B\)).*bytes=([\d\.]+)( .pm ([\d\.]+))?.*bytesperbw=([\d\.]+)( .pm ([\d\.]+))?.*N=(\d+)')
         self.statre = re.compile('(Dirauths|Relays|Clients(\(N?B\))?).*bytes=([\d\.]+)( .pm ([\d\.]+))?.*N=(\d+)')
+        self.mibre = re.compile('MiB used')
 
     def parse_line(self, line):
         m = self.startre.search(line)
@@ -184,6 +185,10 @@ class LogParser:
                         m.group(1,3,5,6)
                 meanperbws, stddevperbws = None, None
             else:
+                m = self.mibre.search(line)
+                if m:
+                    # We've reached steady state
+                    self.steadystate = True
                 return
 
         mean = float(means)
@@ -229,8 +234,6 @@ class LogParser:
             self.curbundle.client_boot(mean, stddev, N)
         elif enttype == 'Clients(NB)':
             self.curbundle.client_nboot(mean, stddev, N)
-            # Now we've reached steady state
-            self.steadystate = True
         else:
             raise ValueError('Unknown entity type "%s"' % enttype)