Permalink
Browse files

Add benchmark scripts.

To use the benchmarks:

  node benchmarks/run.js

or:

  make benchmark

The numbers reported are the elapsed milliseconds the script took to
complete. Currently only benching HTTP code and timers.
  • Loading branch information...
1 parent bf6a457 commit 05d6319fa034b8ef4d26445c59e3049bde3c41fb @ry ry committed Jul 13, 2009
Showing with 96 additions and 1 deletion.
  1. +16 −0 benchmark/process_loop.js
  2. +29 −0 benchmark/run.js
  3. +39 −0 benchmark/static_http_server.js
  4. +5 −0 benchmark/timers.js
  5. +7 −1 configure
View
@@ -0,0 +1,16 @@
+function next (i) {
+ if (i <= 0) return;
+
+ var process = node.createProcess("echo hello");
+
+ process.addListener("output", function (chunk) {
+ if (chunk) print(chunk);
+ });
+
+ process.addListener("exit", function (code) {
+ if (code != 0) node.exit(-1);
+ next(i - 1);
+ });
+}
+
+next(500);
View
@@ -0,0 +1,29 @@
+var benchmarks = [ "static_http_server.js"
+ , "timers.js"
+ , "process_loop.js"
+ ];
+
+var benchmark_dir = node.path.dirname(__filename);
+
+function exec (script, callback) {
+ var command = ARGV[0] + " " + node.path.join(benchmark_dir, script);
+ var start = new Date();
+ var process = node.createProcess(command);
+ process.addListener("exit", function (code) {
+ var elapsed = new Date() - start;
+ callback(elapsed, code);
+ });
+}
+
+function runNext (i) {
+ if (i >= benchmarks.length) return;
+ print(benchmarks[i] + ": ");
+ exec(benchmarks[i], function (elapsed, code) {
+ if (code != 0) {
+ puts("ERROR ");
+ }
+ puts(elapsed);
+ runNext(i+1);
+ });
+};
+runNext(0);
@@ -0,0 +1,39 @@
+var concurrency = 30;
+var nrequests = 700;
+var port = 8000;
+var completed_requests = 0;
+var bytes = 1024*5;
+
+var body = "";
+for (var i = 0; i < bytes; i++) {
+ body += "C";
+}
+
+var server = node.http.createServer(function (req, res) {
+ res.sendHeader(200, [
+ ["Content-Type", "text/plain"],
+ ["Content-Length", body.length]
+ ]);
+ res.sendBody(body);
+ res.finish();
+})
+server.listen(port);
+
+function responseListener (res) {
+ res.addListener("complete", function () {
+ //puts("response " + completed_requests + " from client " + res.client.id);
+ if (completed_requests++ < nrequests) {
+ res.client.get("/").finish(responseListener);
+ } else {
+ server.close();
+ }
+ });
+}
+
+function onLoad () {
+ for (var i = 0; i < concurrency; i++) {
+ var client = node.http.createClient(port);
+ client.id = i;
+ client.get("/").finish(responseListener);
+ }
+}
View
@@ -0,0 +1,5 @@
+function next (i) {
+ if (i <= 0) return;
+ setTimeout(function () { next(i-1); }, 1);
+}
+next(700);
View
@@ -100,6 +100,12 @@ test: all
test-all: all
python tools/test.py --mode=debug,release
+test-debug: all
+ python tools/test.py --mode=release,debug
+
+benchmark: all
+ build/default/node benchmark/run.js
+
website: website/api.html website/index.html
website/api.html: website/api.txt
@@ -123,7 +129,7 @@ check:
dist:
@$WAF dist
-.PHONY: clean dist distclean check uninstall install all test test-all website website-upload
+.PHONY: benchmark clean dist distclean check uninstall install all test test-all website website-upload
EOF
}

0 comments on commit 05d6319

Please sign in to comment.