diff options
author | Matteo Collina <hello@matteocollina.com> | 2016-01-29 14:18:27 +0100 |
---|---|---|
committer | Matteo Collina <hello@matteocollina.com> | 2016-01-29 19:26:44 +0100 |
commit | 137f53c7b72ff9cb36694d058136344076661f4a (patch) | |
tree | b5dd2bad2463b37ff541726ad1f272e21920f212 /benchmark/dgram/multi-buffer.js | |
parent | 4126441013bb569c19417f4a23c5f6b3bc38ef2b (diff) | |
download | android-node-v8-137f53c7b72ff9cb36694d058136344076661f4a.tar.gz android-node-v8-137f53c7b72ff9cb36694d058136344076661f4a.tar.bz2 android-node-v8-137f53c7b72ff9cb36694d058136344076661f4a.zip |
dgram: support dgram.send with multiple buffers
Added ability to dgram.send to send multiple buffers, _writev style.
The offset and length parameters in dgram.send are now optional.
Refactored the dgram benchmarks, and seperated them from net.
Added docs for the new signature.
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
Fixes: https://github.com/nodejs/node/issues/4302
PR-URL: https://github.com/nodejs/node/pull/4374
Diffstat (limited to 'benchmark/dgram/multi-buffer.js')
-rw-r--r-- | benchmark/dgram/multi-buffer.js | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/benchmark/dgram/multi-buffer.js b/benchmark/dgram/multi-buffer.js new file mode 100644 index 0000000000..37fb5d1a8e --- /dev/null +++ b/benchmark/dgram/multi-buffer.js @@ -0,0 +1,70 @@ +// test UDP send/recv throughput with the multi buffer API +'use strict'; + +const common = require('../common.js'); +const PORT = common.PORT; + +// `num` is the number of send requests to queue up each time. +// Keep it reasonably high (>10) otherwise you're benchmarking the speed of +// event loop cycles more than anything else. +var bench = common.createBenchmark(main, { + len: [64, 256, 1024], + num: [100], + chunks: [1, 2, 4, 8], + type: ['send', 'recv'], + dur: [5] +}); + +var dur; +var len; +var num; +var type; +var chunk; +var chunks; +var encoding; + +function main(conf) { + dur = +conf.dur; + len = +conf.len; + num = +conf.num; + type = conf.type; + chunks = +conf.chunks; + + chunk = [] + for (var i = 0; i < chunks; i++) { + chunk.push(new Buffer(Math.round(len / chunks))); + } + + server(); +} + +var dgram = require('dgram'); + +function server() { + var sent = 0; + var received = 0; + var socket = dgram.createSocket('udp4'); + + function onsend() { + if (sent++ % num == 0) + for (var i = 0; i < num; i++) + socket.send(chunk, PORT, '127.0.0.1', onsend); + } + + socket.on('listening', function() { + bench.start(); + onsend(); + + setTimeout(function() { + var bytes = (type === 'send' ? sent : received) * len; + var gbits = (bytes * 8) / (1024 * 1024 * 1024); + bench.end(gbits); + }, dur * 1000); + }); + + socket.on('message', function(buf, rinfo) { + received++; + }); + + socket.bind(PORT); +} |