[or-cvs] r21470: {torflow} Add some more output, test the 100% case more, and add a lis (torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test)

Mike Perry mikeperry-svn at fscked.org
Fri Jan 22 01:03:28 UTC 2010


Author: mikeperry
Date: 2010-01-22 01:03:28 +0000 (Fri, 22 Jan 2010)
New Revision: 21470

Added:
   torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/TODO_EXPERIMENTS
Modified:
   torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/cbtshow.py
   torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/cbttest.py
   torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/run_test.sh
Log:

Add some more output, test the 100% case more, and add a list
of experiments to run for final output.



Added: torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/TODO_EXPERIMENTS
===================================================================
--- torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/TODO_EXPERIMENTS	                        (rev 0)
+++ torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/TODO_EXPERIMENTS	2010-01-22 01:03:28 UTC (rev 21470)
@@ -0,0 +1,23 @@
+
+- regular broadband run
+- 250ms +/- 20%
+- 500ms +/- 20%
+- 1s  +/- 20%
+- 2s  +/- 20%
+
+- broadband + 5% loss
+- 250ms +/- 20% + 5% loss
+- 500ms +/- 20% + 5% loss
+- 1s  +/- 20% + 5% loss
+- 2s  +/- 20% + 5% loss
+
+- broadband + 10% loss
+- 250ms +/- 20% + 10% loss
+- 500ms +/- 20% + 10% loss
+- 1s  +/- 20% + 10% loss
+- 2s  +/- 20% + 10% loss
+
+
+
+
+

Modified: torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/cbtshow.py
===================================================================
--- torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/cbtshow.py	2010-01-21 17:31:18 UTC (rev 21469)
+++ torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/cbtshow.py	2010-01-22 01:03:28 UTC (rev 21470)
@@ -3,6 +3,7 @@
 import os
 import sys
 import re
+import math
 
 # Stats:
 # Pct Avg
@@ -15,15 +16,34 @@
 # Recompute:
 #  Build rate +/- 1 second, +/- 2 second
 
+def min_avg_max_dev(ls):
+  ls_len = len(ls)
+  avg = float(sum(ls))/ls_len
+  mn = min(ls)
+  mx = max(ls)
+  dev = 0.0
+
+  for l in ls: dev += (l-avg)*(l-avg)
+
+  dev /= float(ls_len-1.0)
+  dev = math.sqrt(dev)
+  
+  ret = map(lambda x: round(x, 2), [mn, avg, mx, dev])
+  #return str(ret)
+  return "\t"+"/".join(map(str, ret)) #+"\t(min/avg/max/dev)"
+
+
 def walk_single_pct(pct_dir):
   built_succeed_tot = 0
   built_tot = 0
-  avg_min_circs = 0
-  avg_num_circs = 0
-  avg_num_timeout = 0
-  reset_test_cnt = 0
-  avg_reset_cnt = 0
-  res_count = 0
+  redo_built_rates = []
+  redo_resets = []
+  min_resets = []
+  num_resets = []
+  min_circs = []
+  num_circs = []
+  num_timeouts = []
+  min_timeouts = []
 
   for pct_root, pct_dirs, pct_files in os.walk(pct_dir):
     for pct_run in pct_dirs:
@@ -38,77 +58,76 @@
                     bg = re.match("^BUILD_RATE\: ([\d]+)/([\d]+)", l)
                     if bg: built,total = map(int, bg.groups())
                     ncg = re.match("^NUM_CIRCS\: ([\d]+)", l)
-                    if ncg: num_circs = int(ncg.groups()[0])
+                    if ncg: num_circ = int(ncg.groups()[0])
                     ntg = re.match("^NUM_TIMEOUT\: ([\d]+)", l)
                     if ntg: num_timeout = int(ntg.groups()[0])
-                    rcg = re.match("^RESET_CNT\: ([\d]+)", l)
+                    rcg = re.match("^NUM_RESET_CNT\: ([\d]+)", l)
                     if rcg: reset_cnt = int(rcg.groups()[0])
-          
-                  avg_reset_cnt += reset_cnt
-                  reset_test_cnt += 1
+         
+                  redo_resets.append(reset_cnt)
                   
-                  if built <= 0 or num_circs <= 0 or num_timeout <= 0:
-                    print "Skipping -1 file in "+pct_root+pct_run
+                  if built <= 0 or num_circ <= 0 or num_timeout <= 0:
+                    print "Skipping -1 redo file in "+pct_root+"/"+pct_run+"/"+ds+"/"+f
                     continue
 
                   built_succeed_tot += built
                   built_tot += total
+                  redo_built_rates.append(float(built)/total)
               if built <= 0 or num_circs <= 0 or num_timeout <= 0:
                 continue
 
-              # XXX: Hrmm..
-              for f in sf:
-                if f == "buildtimes":
-                  counts = [0,0,0,0]
 
         for f in files:
           if f == "result":
             r = open(pct_root+"/"+pct_run+"/"+f)
-            res_count += 1
             for l in r.readlines():
               bg = re.match("^BUILD_RATE\: ([\d]+)/([\d]+)", l)
               if bg: built,total = map(int, bg.groups())
               ncg = re.match("^NUM_CIRCS\: ([\d]+)", l)
-              if ncg: num_circs = int(ncg.groups()[0])
+              if ncg: num_circ = int(ncg.groups()[0])
               ntg = re.match("^NUM_TIMEOUT\: ([\d]+)", l)
               if ntg: num_timeout = int(ntg.groups()[0])
               mcg = re.match("^MIN_CIRCS\: ([\d]+)", l)
-              if mcg: min_circs = int(mcg.groups()[0])
-              rcg = re.match("^RESET_CNT\: ([\d]+)", l)
-              if rcg: reset_cnt = int(rcg.groups()[0])
+              if mcg: min_circ = int(mcg.groups()[0])
+              rcg = re.match("^NUM_RESET_CNT\: ([\d]+)", l)
+              if rcg: num_reset_cnt = int(rcg.groups()[0])
+              rcg = re.match("^MIN_RESET_CNT\: ([\d]+)", l)
+              if rcg: min_reset_cnt = int(rcg.groups()[0])
+              ntg = re.match("^MIN_TIMEOUT\: ([\d]+)", l)
+              if ntg: min_timeout = int(ntg.groups()[0])
+ 
 
-            # Only count resets for redo runs 
-            #avg_reset_cnt += reset_cnt
-            #reset_test_cnt += 1
+            num_resets.append(num_reset_cnt)
+            min_resets.append(min_reset_cnt)
                
-            if built <= 0 or min_circs <= 0 or num_circs <= 0 \
+            if built <= 0 or min_circ <= 0 or num_circ <= 0 \
                  or num_timeout <= 0:
-              print "Skipping -1 file in "+pct_root+pct_run
+              print "Skipping -1 file in "+pct_root+"/"+pct_run+"/"+f
               continue
            
-            # Only count build_rate from redo runs
-            #built_succeed_tot += built
-            #built_tot += total
+            min_circs.append(min_circ)
+            min_timeouts.append(min_timeout)
+            num_circs.append(num_circ)
+            num_timeouts.append(num_timeout)
 
-            avg_min_circs += min_circs
-            avg_num_circs += num_circs
-            avg_num_timeout += num_timeout
 
-  avg_min_circs /= float(res_count)
-  avg_num_circs /= float(res_count)
-  avg_num_timeout /= float(res_count)
-  avg_reset_cnt /= float(reset_test_cnt)
+  print "Result type\tmin/avg/max/dev"
+  print "-----------\t---------------"
+  print "Fuzzy Circs: "+min_avg_max_dev(min_circs)
+  print "Fuzzy Timeout: "+min_avg_max_dev(min_timeouts)
+  print "Fuzzy Resets: "+min_avg_max_dev(min_resets)
+  print "Full Circs: "+min_avg_max_dev(num_circs)
+  print "Full Timeout: "+min_avg_max_dev(num_timeouts)
+  print "Full Resets: "+min_avg_max_dev(num_resets)
+  print "Redo Resets: "+min_avg_max_dev(redo_resets)
+  print "Built Rates: "+min_avg_max_dev(redo_built_rates)
+  print "Built Rate Weighted Avg: "+str(built_succeed_tot)+"/"+str(built_tot)+"="+str(float(built_succeed_tot)/built_tot)
 
-  print "Avg Min Circs: "+str(avg_min_circs)
-  print "Avg Num Circs: "+str(avg_num_circs)
-  print "Avg Num Timeout: "+str(avg_num_timeout)
-  print "Avg Reset Cnt: "+str(avg_reset_cnt)
-  print str(built_succeed_tot)+"/"+str(built_tot)+"="+str(float(built_succeed_tot)/built_tot)
 
-
 def main():
   walk_single_pct(sys.argv[1])
 
-main()
+if __name__ == "__main__":
+  main()
 
 

Modified: torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/cbttest.py
===================================================================
--- torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/cbttest.py	2010-01-21 17:31:18 UTC (rev 21469)
+++ torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/cbttest.py	2010-01-22 01:03:28 UTC (rev 21470)
@@ -165,6 +165,10 @@
   def __init__(self, cond):
     PreEventListener.__init__(self)
     self.cond = cond
+    self.cond.min_reset_cnt = 0
+    self.cond.min_reset_total = 0
+    self.cond.num_reset_cnt = 0
+    self.cond.num_reset_total = 0
     self.reset()
     self.reset_total = 0
     self.reset_cnt = 0
@@ -203,8 +207,8 @@
         self.cond.acquire()
         self.cond.num_circs = -1
         self.cond.num_timeout = -1
-        self.cond.reset_cnt = self.reset_cnt
-        self.cond.reset_total = self.total_times
+        self.cond.num_reset_cnt = self.reset_cnt
+        self.cond.num_reset_total = self.total_times
         self.cond.notify()
         self.cond.release()
         return
@@ -234,8 +238,8 @@
         self.cond.acquire()
         self.cond.num_circs = self.redo_cnt/2
         self.cond.num_timeout = bt_event.timeout_ms
-        self.cond.reset_cnt = self.reset_cnt
-        self.cond.reset_total = self.reset_total
+        self.cond.num_reset_cnt = self.reset_cnt
+        self.cond.num_reset_total = self.reset_total
         self.cond.notify()
         self.cond.release()
         return
@@ -279,6 +283,8 @@
         self.cond.min_circs = self.reset_total+self.total_times \
                                 - self.fuzzy_streak_count
         self.cond.min_timeout = bt_event.timeout_ms
+        self.cond.min_reset_cnt = self.reset_cnt
+        self.cond.min_reset_total = self.reset_total
         shutil.copyfile('./tor-data/state', output_dir+"/state.min")
 
     strict_last = int(self.buildtimeout_strict.timeout_ms)
@@ -324,8 +330,8 @@
           self.cond.num_circs = self.reset_total+self.total_times-\
                                     self.strict_streak_count
           self.cond.num_timeout = bt_event.timeout_ms
-          self.cond.reset_cnt = self.reset_cnt
-          self.cond.reset_total = self.reset_total
+          self.cond.num_reset_cnt = self.reset_cnt
+          self.cond.num_reset_total = self.reset_total
           self.cond.notify()
           self.cond.release()
 
@@ -334,7 +340,8 @@
   sorted_rlist = filter(lambda r: not r.down,
                     c.read_routers(c.get_network_status()))
   sorted_rlist.sort(lambda x, y: cmp(y.bw, x.bw))
-  for i in xrange(len(sorted_rlist)): sorted_rlist[i].list_rank = i
+  list_len = len(sorted_rlist)
+  for i in xrange(list_len): sorted_rlist[i].list_rank = i
 
   guard_rst = PathSupport.FlagsRestriction(["Guard"], [])
 
@@ -344,6 +351,7 @@
     pct_rst = PathSupport.PercentileRestriction(pct_start, pct_start+PCT_SKIP,
 sorted_rlist)
 
+  # XXX: Hrmm. UniformGenerator was broken?
   guard_gen = PathSupport.ExactUniformGenerator(sorted_rlist,
                 PathSupport.NodeRestrictionList([guard_rst, pct_rst]))
   guard_gen.rewind()
@@ -353,7 +361,9 @@
   # Generate 3 guards
   guards = []
   for i in xrange(n):
-    guards.append(ggen.next())
+    g = ggen.next()
+    plog("NOTICE", str(pct_start)+"%: Generated guard $"+g.idhex+" with rank "+str(g.list_rank)+"/"+str(list_len)+" "+str(round((100.0*g.list_rank)/list_len, 1))+"% with flags "+str(g.flags))
+    guards.append(g)
 
   return guards
 
@@ -416,10 +426,12 @@
   if not redo_run:
     out.write("MIN_CIRCS: "+str(cond.min_circs)+"\n")
     out.write("MIN_TIMEOUT: "+str(cond.min_timeout)+"\n")
+    out.write("MIN_RESET_CNT: "+str(cond.min_reset_cnt)+"\n")
+    out.write("MIN_RESET_TOTAL: "+str(cond.min_reset_total)+"\n")
   out.write("NUM_CIRCS: "+str(cond.num_circs)+"\n")
   out.write("NUM_TIMEOUT: "+str(cond.num_timeout)+"\n")
-  out.write("RESET_CNT: "+str(cond.reset_cnt)+"\n")
-  out.write("RESET_TOTAL: "+str(cond.reset_total)+"\n")
+  out.write("NUM_RESET_CNT: "+str(cond.num_reset_cnt)+"\n")
+  out.write("NUM_RESET_TOTAL: "+str(cond.num_reset_total)+"\n")
   timeout_cnt = len(h.timeout_circs)
   built_cnt = len(h.built_circs)
   build_rate = float(built_cnt)/(built_cnt+timeout_cnt)

Modified: torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/run_test.sh
===================================================================
--- torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/run_test.sh	2010-01-21 17:31:18 UTC (rev 21469)
+++ torflow/trunk/CircuitAnalysis/BuildTimes/CBT-Test/run_test.sh	2010-01-22 01:03:28 UTC (rev 21470)
@@ -45,10 +45,12 @@
   fi
 fi
 
-for p in 0 10 20 30 40 50 60 70 80 90 100
-do
+do_run() {
+  p=$1
+  num=$2
+  redo=$3
   N=0
-  while [ $N -lt 5 ]
+  while [ $N -lt $num ]
   do
     if [ -f $TOR_DATA/tor.pid ]; then
       kill `cat $TOR_DATA/tor.pid`
@@ -62,7 +64,7 @@
 
     # Redo this run M=3 times
     M=0
-    while [ $M -lt 3 ]
+    while [ $M -lt $redo ]
     do
       if [ -f $TOR_DATA/tor.pid ]; then
         kill `cat $TOR_DATA/tor.pid`
@@ -77,5 +79,12 @@
     done
     N=`expr $N + 1`
   done
+}
+
+do_run 100 10 5
+
+for p in 0 10 20 30 40 50 60 70 80 90
+do
+  do_run $p 5 3
 done
 



More information about the tor-commits mailing list