summaryrefslogtreecommitdiff
path: root/benchmark/dgram/multi-buffer.js
diff options
context:
space:
mode:
authorMatteo Collina <hello@matteocollina.com>2016-01-29 14:18:27 +0100
committerMatteo Collina <hello@matteocollina.com>2016-01-29 19:26:44 +0100
commit137f53c7b72ff9cb36694d058136344076661f4a (patch)
treeb5dd2bad2463b37ff541726ad1f272e21920f212 /benchmark/dgram/multi-buffer.js
parent4126441013bb569c19417f4a23c5f6b3bc38ef2b (diff)
downloadandroid-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.js70
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);
+}