From 3e3414f45fb872fd4378132f6aa893806b2fad98 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Wed, 29 Mar 2017 23:31:31 +0800 Subject: [PATCH] benchmark: control HTTP benchmarks run time PR-URL: https://github.com/nodejs/node/pull/12121 Refs: https://github.com/nodejs/node/issues/12068 Reviewed-By: Rich Trott Reviewed-By: James M Snell --- .../simple-http-server.js} | 9 +-------- benchmark/http/_chunky_http_client.js | 4 ++-- benchmark/http/bench-parser.js | 6 +++--- benchmark/http/chunked.js | 8 ++++---- benchmark/http/client-request-body.js | 4 ++-- benchmark/http/cluster.js | 7 ++++--- benchmark/http/create-clientrequest.js | 6 +++--- benchmark/http/end-vs-write-end.js | 4 ++-- benchmark/http/simple.js | 11 ++++++----- 9 files changed, 27 insertions(+), 32 deletions(-) rename benchmark/{http/_http_simple.js => fixtures/simple-http-server.js} (93%) diff --git a/benchmark/http/_http_simple.js b/benchmark/fixtures/simple-http-server.js similarity index 93% rename from benchmark/http/_http_simple.js rename to benchmark/fixtures/simple-http-server.js index 6886ccaf64d996..1dda98e9f2d9c1 100644 --- a/benchmark/http/_http_simple.js +++ b/benchmark/fixtures/simple-http-server.js @@ -2,8 +2,6 @@ var http = require('http'); -var port = parseInt(process.env.PORT || 8000); - var fixed = 'C'.repeat(20 * 1024); var storedBytes = Object.create(null); var storedBuffer = Object.create(null); @@ -22,7 +20,7 @@ if (useDomains) { gdom.enter(); } -var server = module.exports = http.createServer(function(req, res) { +module.exports = http.createServer(function(req, res) { if (useDomains) { var dom = domain.create(); dom.add(req); @@ -142,8 +140,3 @@ var server = module.exports = http.createServer(function(req, res) { res.end(body); } }); - -server.listen(port, function() { - if (module === require.main) - console.error('Listening at http://127.0.0.1:' + port + '/'); -}); diff --git a/benchmark/http/_chunky_http_client.js b/benchmark/http/_chunky_http_client.js index d4d60ac84d1796..3dbf2caecefcd4 100644 --- a/benchmark/http/_chunky_http_client.js +++ b/benchmark/http/_chunky_http_client.js @@ -7,14 +7,14 @@ var test = require('../../test/common.js'); var bench = common.createBenchmark(main, { len: [1, 4, 8, 16, 32, 64, 128], - num: [5, 50, 500, 2000], + n: [5, 50, 500, 2000], type: ['send'], }); function main(conf) { var len = +conf.len; - var num = +conf.num; + var num = +conf.n; var todo = []; var headers = []; // Chose 7 because 9 showed "Connection error" / "Connection closed" diff --git a/benchmark/http/bench-parser.js b/benchmark/http/bench-parser.js index 0a78f3ffcf2074..1bc661e7289168 100644 --- a/benchmark/http/bench-parser.js +++ b/benchmark/http/bench-parser.js @@ -10,17 +10,17 @@ const kOnMessageComplete = HTTPParser.kOnMessageComplete | 0; const CRLF = '\r\n'; const bench = common.createBenchmark(main, { - fields: [4, 8, 16, 32], + len: [4, 8, 16, 32], n: [1e5], }); function main(conf) { - const fields = conf.fields >>> 0; + const len = conf.len >>> 0; const n = conf.n >>> 0; var header = `GET /hello HTTP/1.1${CRLF}Content-Type: text/plain${CRLF}`; - for (var i = 0; i < fields; i++) { + for (var i = 0; i < len; i++) { header += `X-Filler${i}: ${Math.random().toString(36).substr(2)}${CRLF}`; } header += CRLF; diff --git a/benchmark/http/chunked.js b/benchmark/http/chunked.js index 46d6ab2e266879..34a06a1a6d8320 100644 --- a/benchmark/http/chunked.js +++ b/benchmark/http/chunked.js @@ -11,14 +11,14 @@ var common = require('../common.js'); var bench = common.createBenchmark(main, { - num: [1, 4, 8, 16], - size: [1, 64, 256], + n: [1, 4, 8, 16], + len: [1, 64, 256], c: [100] }); function main(conf) { const http = require('http'); - var chunk = Buffer.alloc(conf.size, '8'); + var chunk = Buffer.alloc(conf.len, '8'); var server = http.createServer(function(req, res) { function send(left) { @@ -28,7 +28,7 @@ function main(conf) { send(left - 1); }, 0); } - send(conf.num); + send(conf.n); }); server.listen(common.PORT, function() { diff --git a/benchmark/http/client-request-body.js b/benchmark/http/client-request-body.js index ab7e3877f38ef2..d521c8a2c847e3 100644 --- a/benchmark/http/client-request-body.js +++ b/benchmark/http/client-request-body.js @@ -7,13 +7,13 @@ var http = require('http'); var bench = common.createBenchmark(main, { dur: [5], type: ['asc', 'utf', 'buf'], - bytes: [32, 256, 1024], + len: [32, 256, 1024], method: ['write', 'end'] }); function main(conf) { var dur = +conf.dur; - var len = +conf.bytes; + var len = +conf.len; var encoding; var chunk; diff --git a/benchmark/http/cluster.js b/benchmark/http/cluster.js index 732a5fad6646c9..464bcfdb6311e4 100644 --- a/benchmark/http/cluster.js +++ b/benchmark/http/cluster.js @@ -7,11 +7,12 @@ if (cluster.isMaster) { var bench = common.createBenchmark(main, { // unicode confuses ab on os x. type: ['bytes', 'buffer'], - length: [4, 1024, 102400], + len: [4, 1024, 102400], c: [50, 500] }); } else { - require('./_http_simple.js'); + var port = parseInt(process.env.PORT || PORT); + require('../fixtures/simple-http-server.js').listen(port); } function main(conf) { @@ -26,7 +27,7 @@ function main(conf) { return; setTimeout(function() { - var path = '/' + conf.type + '/' + conf.length; + var path = '/' + conf.type + '/' + conf.len; bench.http({ path: path, diff --git a/benchmark/http/create-clientrequest.js b/benchmark/http/create-clientrequest.js index 76134663d00a79..f40ff9155dae50 100644 --- a/benchmark/http/create-clientrequest.js +++ b/benchmark/http/create-clientrequest.js @@ -4,15 +4,15 @@ var common = require('../common.js'); var ClientRequest = require('http').ClientRequest; var bench = common.createBenchmark(main, { - pathlen: [1, 8, 16, 32, 64, 128], + len: [1, 8, 16, 32, 64, 128], n: [1e6] }); function main(conf) { - var pathlen = +conf.pathlen; + var len = +conf.len; var n = +conf.n; - var path = '/'.repeat(pathlen); + var path = '/'.repeat(len); var opts = { path: path, createConnection: function() {} }; bench.start(); diff --git a/benchmark/http/end-vs-write-end.js b/benchmark/http/end-vs-write-end.js index 3c216e766c53e8..163ad595a93aca 100644 --- a/benchmark/http/end-vs-write-end.js +++ b/benchmark/http/end-vs-write-end.js @@ -12,7 +12,7 @@ var common = require('../common.js'); var bench = common.createBenchmark(main, { type: ['asc', 'utf', 'buf'], - kb: [64, 128, 256, 1024], + len: [64 * 1024, 128 * 1024, 256 * 1024, 1024 * 1024], c: [100], method: ['write', 'end'] }); @@ -20,7 +20,7 @@ var bench = common.createBenchmark(main, { function main(conf) { const http = require('http'); var chunk; - var len = conf.kb * 1024; + var len = conf.len; switch (conf.type) { case 'buf': chunk = Buffer.alloc(len, 'x'); diff --git a/benchmark/http/simple.js b/benchmark/http/simple.js index 39c8f29dc89a74..c773e717913e99 100644 --- a/benchmark/http/simple.js +++ b/benchmark/http/simple.js @@ -5,7 +5,7 @@ var PORT = common.PORT; var bench = common.createBenchmark(main, { // unicode confuses ab on os x. type: ['bytes', 'buffer'], - length: [4, 1024, 102400], + len: [4, 1024, 102400], chunks: [0, 1, 4], // chunks=0 means 'no chunked encoding'. c: [50, 500], res: ['normal', 'setHeader', 'setHeaderWH'] @@ -13,9 +13,10 @@ var bench = common.createBenchmark(main, { function main(conf) { process.env.PORT = PORT; - var server = require('./_http_simple.js'); - setTimeout(function() { - var path = '/' + conf.type + '/' + conf.length + '/' + conf.chunks + '/' + + var server = require('../fixtures/simple-http-server.js') + .listen(process.env.PORT || common.PORT) + .on('listening', function() { + var path = '/' + conf.type + '/' + conf.len + '/' + conf.chunks + '/' + conf.res; bench.http({ @@ -24,5 +25,5 @@ function main(conf) { }, function() { server.close(); }); - }, 2000); + }); }