Browse Source

Save the web server benchmarking script for regression testing.

Don Porter 6 years ago
parent
commit
8b703b1c2c
1 changed files with 45 additions and 0 deletions
  1. 45 0
      LibOS/shim/test/apps/lighttpd/benchmark-http.sh

+ 45 - 0
LibOS/shim/test/apps/lighttpd/benchmark-http.sh

@@ -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"