[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