[tor-commits] [flashproxy/master] Use a small custom HTTP downloader rather than Wget.

dcf at torproject.org dcf at torproject.org
Mon Oct 31 02:14:51 UTC 2011


commit 7740d4fdb9626c8b47e99e30e60839c7f9abb90d
Author: David Fifield <david at bamsoftware.com>
Date:   Sun Oct 30 16:57:01 2011 -0700

    Use a small custom HTTP downloader rather than Wget.
    
    I had been timing downloads with "time wget" but that counts the time
    taken to establish (and possibly retry) the connection. In my graphs
    there was a clear effect where the first 20 connections would take x
    seconds to download, but the 21st and later would take x + 5 or so.
---
 experiments/throughput/httpget.py    |   35 ++++++++++++++++++++++++++++++++++
 experiments/throughput/throughput.sh |   17 +--------------
 2 files changed, 37 insertions(+), 15 deletions(-)

diff --git a/experiments/throughput/httpget.py b/experiments/throughput/httpget.py
new file mode 100755
index 0000000..a08412b
--- /dev/null
+++ b/experiments/throughput/httpget.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+
+# A simple HTTP downloader that discards what it downloads and prints the time
+# taken to download. We use this rather than "time wget" because the latter
+# includes time taken to establish (and possibly retry) the connection.
+
+import getopt
+import sys
+import time
+import urllib2
+
+BLOCK_SIZE = 65536
+
+label = None
+
+opts, args = getopt.gnu_getopt(sys.argv[1:], "l:")
+for o, a in opts:
+    if o == "-l":
+        label = a
+
+try:
+    stream = urllib2.urlopen(args[0], timeout=10)
+    start_time = time.time()
+    while stream.read(BLOCK_SIZE):
+        pass
+    end_time = time.time()
+    if label:
+        print "%s %.3f" % (label, end_time - start_time)
+    else:
+        print "%.3f" % (end_time - start_time)
+except:
+    if label:
+        print "%s error" % label
+    else:
+        print "error"
diff --git a/experiments/throughput/throughput.sh b/experiments/throughput/throughput.sh
index 5e2fd4b..7dcbad2 100755
--- a/experiments/throughput/throughput.sh
+++ b/experiments/throughput/throughput.sh
@@ -77,26 +77,13 @@ PIDS_TO_KILL+=($!)
 visible_sleep 1
 
 
-# Extract and parse the "real" part of "time" output and return as a count of
-# seconds.
-extract_real_time() {
-	perl -n -e '($m, $s) = ($_ =~ m/real\s+(\d+)m([\d\.]+)s/); if (defined($m)) { print $m*60 + $s . "\n"; }'
-}
-
 > "$RESULTS_FILE_NAME"
 
 declare -a WAIT_PIDS
 i=0
 while [ $i -lt $NUM_CLIENTS ]; do
-	echo "Start Wget $((i + 1))."
-	(
-		times=$((time wget http://localhost:2000/dump -q --timeout 30 -t 1 -O /dev/null) 2>&1)
-		if [ $? -eq 0 ]; then
-			echo "$times" | extract_real_time >> "$RESULTS_FILE_NAME"
-		else
-			echo "error" >> "$RESULTS_FILE_NAME"
-		fi
-	) &
+	echo "Start downloader $((i + 1))."
+	./httpget.py http://localhost:2000/dump >> "$RESULTS_FILE_NAME" &
 	WAIT_PIDS+=($!)
 	i=$((i + 1))
 done





More information about the tor-commits mailing list