|
@@ -0,0 +1,45 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+## On Ubuntu, this script requires apache2-utils for the ab binary.
|
|
|
+# Run like: ./benchmark-http.sh server
|
|
|
+# where server is the host/port running the web server
|
|
|
+
|
|
|
+declare -A THROUGHPUTS
|
|
|
+declare -A LATENCIES
|
|
|
+LOOP=5
|
|
|
+DOWNLOAD_HOST=$1
|
|
|
+DOWNLOAD_FILE=random/10K.1.html
|
|
|
+REQUESTS=10000
|
|
|
+CONCURRENCY_LIST="1 2 4 8 16 32 64 128 256"
|
|
|
+RESULT=result-$(date +%y%m%d-%H%M%S)
|
|
|
+
|
|
|
+touch $RESULT
|
|
|
+
|
|
|
+RUN=0
|
|
|
+while [ $RUN -lt $LOOP ]
|
|
|
+do
|
|
|
+ for CONCURRENCY in $CONCURRENCY_LIST
|
|
|
+ do
|
|
|
+ rm -f OUTPUT
|
|
|
+ echo "ab -n $REQUESTS -c $CONCURRENCY http://$DOWNLOAD_HOST/$DOWNLOAD_FILE"
|
|
|
+ ab -n $REQUESTS -c $CONCURRENCY http://$DOWNLOAD_HOST/$DOWNLOAD_FILE > OUTPUT
|
|
|
+
|
|
|
+ sleep 5
|
|
|
+
|
|
|
+ THROUGHPUT=$(grep -m1 "Requests per second:" OUTPUT | awk '{ print $4 }')
|
|
|
+ LATENCY=$(grep -m1 "Time per request:" OUTPUT | awk '{ print $4 }')
|
|
|
+ THROUGHPUTS[$CONCURRENCY]="${THROUGHPUTS[$CONCURRENCY]} $THROUGHPUT"
|
|
|
+ LATENCIES[$CONCURRENCY]="${LATENCIES[$CONCURRENCY]} $LATENCY"
|
|
|
+ echo "concurrency=$CONCURRENCY, throughput=$THROUGHPUT, latency=$LATENCY"
|
|
|
+ done
|
|
|
+ RUN=$(expr $RUN + 1)
|
|
|
+done
|
|
|
+
|
|
|
+for CONCURRENCY in $CONCURRENCY_LIST
|
|
|
+do
|
|
|
+ THROUGHPUT=$(echo ${THROUGHPUTS[$CONCURRENCY]} | tr " " "\n" | sort -n | awk '{a[NR]=$0}END{if(NR%2==1)print a[int(NR/2)+1];else print(a[NR/2-1]+a[NR/2])/2}')
|
|
|
+ LATENCY=$(echo ${LATENCIES[$CONCURRENCY]} | tr " " "\n" | sort -n | awk '{a[NR]=$0}END{if(NR%2==1)print a[int(NR/2)+1];else print(a[NR/2-1]+a[NR/2])/2}')
|
|
|
+ echo "$THROUGHPUT,$LATENCY" >> $RESULT
|
|
|
+done
|
|
|
+
|
|
|
+echo "Result file: $RESULT"
|