Skip to content

Commit

Permalink
benchmark: fix child-process-read on Windows
Browse files Browse the repository at this point in the history
Under Windows 'ipc' communication requires the other process to format
its messages with 'IPC framing protocol'. Otherwise, an assert is
triggered in libuv. This commit changes child-process-read benchmark
to use stdout to communicate with parent process. It also adds
child-process-read-ipc.js to benchmark IPC communication using
child node process.

PR-URL: #6971
Reviewed-By: João Reis <reis@janeasystems.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
bzoz authored and evanlucas committed Jun 15, 2016
1 parent 0fc8012 commit 5e5af8b
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 3 deletions.
37 changes: 37 additions & 0 deletions benchmark/child_process/child-process-read-ipc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
'use strict';
if (process.argv[2] === 'child')
{
const len = +process.argv[3];
const msg = `"${'.'.repeat(len)}"`;
while (true) {
process.send(msg);
}
} else {
const common = require('../common.js');
const bench = common.createBenchmark(main, {
len: [64, 256, 1024, 4096, 32768],
dur: [5]
});
const spawn = require('child_process').spawn;
function main(conf) {
bench.start();

const dur = +conf.dur;
const len = +conf.len;

const options = { 'stdio': ['ignore', 'ignore', 'ignore', 'ipc'] };
const child = spawn(process.argv[0],
[process.argv[1], 'child', len], options);

var bytes = 0;
child.on('message', function(msg) {
bytes += msg.length;
});

setTimeout(function() {
child.kill();
const gbits = (bytes * 8) / (1024 * 1024 * 1024);
bench.end(gbits);
}, dur * 1000);
}
}
13 changes: 10 additions & 3 deletions benchmark/child_process/child-process-read.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
'use strict';
const common = require('../common.js');
const os = require('os');

var messagesLength = [64, 256, 1024, 4096];
// Windows does not support that long arguments
if (os.platform() !== 'win32')
messagesLength.push(32768);

const bench = common.createBenchmark(main, {
len: [64, 256, 1024, 4096, 32768],
len: messagesLength,
dur: [5]
});

Expand All @@ -13,11 +20,11 @@ function main(conf) {
const len = +conf.len;

const msg = '"' + Array(len).join('.') + '"';
const options = {'stdio': ['ignore', 'ipc', 'ignore']};
const options = { 'stdio': ['ignore', 'pipe', 'ignore'] };
const child = spawn('yes', [msg], options);

var bytes = 0;
child.on('message', function(msg) {
child.stdout.on('data', function(msg) {
bytes += msg.length;
});

Expand Down

0 comments on commit 5e5af8b

Please sign in to comment.