benchmark: check for wrk ahead of running benchmarks
PR-URL: https://github.com/iojs/io.js/pull/982 Reviewed-By: Rod Vagg <rod@vagg.org>
This commit is contained in:
parent
a45d4f8fd6
commit
2b79052494
2
Makefile
2
Makefile
@ -331,7 +331,7 @@ pkgsrc: $(PKGSRC)
|
|||||||
haswrk=$(shell which wrk > /dev/null 2>&1; echo $$?)
|
haswrk=$(shell which wrk > /dev/null 2>&1; echo $$?)
|
||||||
wrk:
|
wrk:
|
||||||
ifneq ($(haswrk), 0)
|
ifneq ($(haswrk), 0)
|
||||||
@echo "please install wrk before proceeding"; >&2
|
@echo "please install wrk before proceeding. More information can be found in benchmark/README.md." >&2
|
||||||
@exit 1
|
@exit 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -3,9 +3,13 @@
|
|||||||
This folder contains benchmark tests to measure the performance for certain
|
This folder contains benchmark tests to measure the performance for certain
|
||||||
io.js APIs.
|
io.js APIs.
|
||||||
|
|
||||||
## prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
Most of the http benchmarks require `wrk` and `ab` being installed.
|
Most of the http benchmarks require [`wrk`][wrk] and [`ab`][ab] being installed.
|
||||||
|
These are most often available through your preferred package manager.
|
||||||
|
|
||||||
|
[wrk]: https://github.com/wg/wrk
|
||||||
|
[ab]: http://httpd.apache.org/docs/2.2/programs/ab.html
|
||||||
|
|
||||||
## How to run tests
|
## How to run tests
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var spawn = require('child_process').spawn;
|
var child_process = require('child_process');
|
||||||
|
|
||||||
var silent = +process.env.NODE_BENCH_SILENT;
|
var silent = +process.env.NODE_BENCH_SILENT;
|
||||||
|
|
||||||
@ -9,6 +9,7 @@ exports.PORT = process.env.PORT || 12346;
|
|||||||
|
|
||||||
// If this is the main module, then run the benchmarks
|
// If this is the main module, then run the benchmarks
|
||||||
if (module === require.main) {
|
if (module === require.main) {
|
||||||
|
hasWrk();
|
||||||
var type = process.argv[2];
|
var type = process.argv[2];
|
||||||
var testFilter = process.argv[3];
|
var testFilter = process.argv[3];
|
||||||
if (!type) {
|
if (!type) {
|
||||||
@ -36,6 +37,15 @@ if (module === require.main) {
|
|||||||
runBenchmarks();
|
runBenchmarks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function hasWrk() {
|
||||||
|
var result = child_process.spawnSync('wrk', ['-h']);
|
||||||
|
if (result.error.code === 'ENOENT') {
|
||||||
|
console.error('Couldn\'t locate `wrk` which is needed for running ' +
|
||||||
|
'benchmarks. Check benchmark/README.md for further instructions.');
|
||||||
|
process.exit(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function runBenchmarks() {
|
function runBenchmarks() {
|
||||||
var test = tests.shift();
|
var test = tests.shift();
|
||||||
if (!test)
|
if (!test)
|
||||||
@ -48,7 +58,7 @@ function runBenchmarks() {
|
|||||||
test = path.resolve(dir, test);
|
test = path.resolve(dir, test);
|
||||||
|
|
||||||
var a = (process.execArgv || []).concat(test);
|
var a = (process.execArgv || []).concat(test);
|
||||||
var child = spawn(process.execPath, a, { stdio: 'inherit' });
|
var child = child_process.spawn(process.execPath, a, { stdio: 'inherit' });
|
||||||
child.on('close', function(code) {
|
child.on('close', function(code) {
|
||||||
if (code) {
|
if (code) {
|
||||||
process.exit(code);
|
process.exit(code);
|
||||||
@ -70,7 +80,10 @@ function Benchmark(fn, options) {
|
|||||||
this._name = require.main.filename.split(/benchmark[\/\\]/).pop();
|
this._name = require.main.filename.split(/benchmark[\/\\]/).pop();
|
||||||
this._start = [0,0];
|
this._start = [0,0];
|
||||||
this._started = false;
|
this._started = false;
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
hasWrk();
|
||||||
process.nextTick(function() {
|
process.nextTick(function() {
|
||||||
self._run();
|
self._run();
|
||||||
});
|
});
|
||||||
@ -85,7 +98,7 @@ Benchmark.prototype.http = function(p, args, cb) {
|
|||||||
args = args.concat(url);
|
args = args.concat(url);
|
||||||
|
|
||||||
var out = '';
|
var out = '';
|
||||||
var child = spawn('wrk', args);
|
var child = child_process.spawn('wrk', args);
|
||||||
|
|
||||||
child.stdout.setEncoding('utf8');
|
child.stdout.setEncoding('utf8');
|
||||||
|
|
||||||
@ -145,7 +158,7 @@ Benchmark.prototype._run = function() {
|
|||||||
if (!argv)
|
if (!argv)
|
||||||
return;
|
return;
|
||||||
argv = process.execArgv.concat(argv);
|
argv = process.execArgv.concat(argv);
|
||||||
var child = spawn(node, argv, { stdio: 'inherit' });
|
var child = child_process.spawn(node, argv, { stdio: 'inherit' });
|
||||||
child.on('close', function(code, signal) {
|
child.on('close', function(code, signal) {
|
||||||
if (code)
|
if (code)
|
||||||
console.error('child process exited with code ' + code);
|
console.error('child process exited with code ' + code);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user