summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2010-10-13 16:20:24 -0700
committerRyan Dahl <ry@tinyclouds.org>2010-10-13 16:20:24 -0700
commitff456b38862de3fd0118c6ac6b3f46edb1fbb87f (patch)
tree2c7a7e8302e5f9340d66373da9a7bab3a72dd26e
parentcdde22a27d797b853efac161eaec630d3405e924 (diff)
downloadnode-new-ff456b38862de3fd0118c6ac6b3f46edb1fbb87f.tar.gz
Add 'make bench' script
-rw-r--r--.gitignore1
-rw-r--r--Makefile8
-rw-r--r--benchmark/http_simple.js2
-rwxr-xr-xbenchmark/http_simple_bench.sh77
4 files changed, 83 insertions, 5 deletions
diff --git a/.gitignore b/.gitignore
index eadb196414..7863cee026 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,4 @@ tmp/
node
node_g
*.swp
+.benchmark_reports
diff --git a/Makefile b/Makefile
index 221111c12d..bed8f36a54 100644
--- a/Makefile
+++ b/Makefile
@@ -36,9 +36,6 @@ test-pummel: all
test-internet: all
python tools/test.py internet
-benchmark: all
- build/default/node benchmark/run.js
-
# http://rtomayko.github.com/ronn
# gem install ronn
doc: doc/node.1 doc/api.html doc/index.html doc/changelog.html
@@ -85,4 +82,7 @@ dist: doc/node.1 doc/api.html
rm -rf $(TARNAME)
gzip -f -9 $(TARNAME).tar
-.PHONY: benchmark clean docclean dist distclean check uninstall install all test test-all website-upload
+bench:
+ benchmark/http_simple_bench.sh
+
+.PHONY: bench clean docclean dist distclean check uninstall install all test test-all website-upload
diff --git a/benchmark/http_simple.js b/benchmark/http_simple.js
index 93903c42a9..8d66190e0f 100644
--- a/benchmark/http_simple.js
+++ b/benchmark/http_simple.js
@@ -74,7 +74,7 @@ var server = http.createServer(function (req, res) {
body = fixed;
} else if (command == "info") {
- body = 'rev: ' + rev + '\n' + 'uname: ' + uname + '\n';
+ body = 'rev=' + rev + '\nuname="' + uname + '"\n';
} else {
status = 404;
diff --git a/benchmark/http_simple_bench.sh b/benchmark/http_simple_bench.sh
new file mode 100755
index 0000000000..79cbaa79cf
--- /dev/null
+++ b/benchmark/http_simple_bench.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+SERVER=127.0.0.1
+PORT=8000
+
+# You may want to configure your TCP settings to make many ports available
+# to node and ab. On macintosh use:
+# sudo sysctl -w net.inet.ip.portrange.first=32768
+# sudo sysctl -w net.inet.tcp.msl=1000
+
+if [ ! -d benchmark/ ]; then
+ echo "Run this script from the node root directory"
+ exit 1
+fi
+
+if [ $SERVER == "127.0.0.1" ]; then
+ ./node benchmark/http_simple.js &
+ node_pid=$!
+ sleep 1
+fi
+
+info=`curl -s http://$SERVER:$PORT/info`
+eval $info
+
+date=`date "+%Y%m%d%H%M%S"`
+
+ab_hello_world() {
+ local type="$1"
+ local ressize="$2"
+ if [ $type == "string" ]; then
+ local uri="bytes/$ressize"
+ else
+ local uri="buffer/$ressize"
+ fi
+
+
+ name="ab-hello-world-$type-$ressize"
+
+ dir=".benchmark_reports/$name/$rev/"
+ if [ ! -d $dir ]; then
+ mkdir -p $dir
+ fi
+
+ summary_fn="$dir/$date.summary"
+ data_fn="$dir/$date.data"
+
+ echo "Bench $name starts in 3 seconds..."
+ # let shit calm down
+ sleep 3
+
+ # hammer that as hard as it can for 10 seconds.
+ ab -g $data_fn -c 100 -t 10 http://$SERVER:$PORT/$uri > $summary_fn
+
+ # add our data about the server
+ echo >> $summary_fn
+ echo >> $summary_fn
+ echo "webserver-rev: $rev" >> $summary_fn
+ echo "webserver-uname: $uname" >> $summary_fn
+
+ grep Req $summary_fn
+
+ echo "Summary: $summary_fn"
+ echo
+}
+
+# 1k
+ab_hello_world 'string' '1024'
+ab_hello_world 'buffer' '1024'
+
+# 100k
+ab_hello_world 'string' '102400'
+ab_hello_world 'buffer' '102400'
+
+
+if [ ! -z $node_pid ]; then
+ kill -9 $node_pid
+fi