blob: 1c18e05f6154991b5e643ebf0362e9f294f1c4f2 [file] [log] [blame]
Ryan Dahl41ad3392010-08-17 15:43:261var fs = require('fs');
Micheil Smithe38eb0c2010-10-11 21:04:092var util = require('util');
Ryan Dahl41ad3392010-08-17 15:43:263var Buffer = require('buffer').Buffer;
4
5var path = "/tmp/wt.dat";
6var tsize = 1000 * 1048576;
7var bsizes = [1024, 4096, 8192, 16384, 32768, 65536];
8
9function bufit(size) {
10 var buf = new Buffer(size);
11 for (var i = 0; i <buf.length ; i += 1) {
12 buf[i] = 33;
13 }
14 return buf;
15}
16
17function once(emitter, name, cb) {
18 function incb() {
19 cb.apply(undefined, arguments);
20 emitter.removeListener(name, incb);
21 }
22 emitter.addListener(name, incb);
23}
24
Ryan Dahl353e2562010-09-24 09:21:1725c = 0
26
Ryan Dahl41ad3392010-08-17 15:43:2627function writetest(size, bsize) {
28 var s = fs.createWriteStream(path, {'flags': 'w', 'mode': 0644});
29 var remaining = size;
30 var buf = bufit(bsize);
31
32 function dowrite() {
33 var rv = s.write(buf);
34 remaining -= buf.length;
35 if (remaining > 0) {
36 //if (remaining % 90000 == 0) console.error("remaining: %d", remaining);
37 //process.nextTick(dowrite);
38 } else {
39 s.emit('done')
40 s.end();
41 }
42 }
43
44 s.on('drain', function () {
45 dowrite();
Micheil Smithe38eb0c2010-10-11 21:04:0946 if (c++ % 2000 == 0) util.print(".");
Ryan Dahl41ad3392010-08-17 15:43:2647 });
48
49 dowrite();
50
51 return s;
52}
53
54function readtest(size, bsize) {
55 var s = fs.createReadStream(path, {'flags': 'r', 'encoding': 'binary', 'mode': 0644, 'bufferSize': bsize});
56 s.addListener("data", function (chunk) {
57 // got a chunk...
58
59 });
60 return s;
61}
62
63function wt(tsize, bsize, done) {
64 var start = Date.now();
Bert Belder6e5217d2012-06-21 18:52:1165 s = writetest(tsize, bsize);
Ryan Dahl41ad3392010-08-17 15:43:2666 s.addListener('close', function() {
67 var end = Date.now();
68 var diff = end - start;
69 console.log('Wrote '+ tsize +' bytes in '+ diff/1000 +'s using '+ bsize +' byte buffers: '+ ((tsize/(diff/1000)) / 1048576) +' mB/s');
70 done();
71 });
72}
73
74function rt(tsize, bsize, done) {
75 var start = Date.now();
Bert Belder6e5217d2012-06-21 18:52:1176 s = readtest(tsize, bsize);
Ryan Dahl41ad3392010-08-17 15:43:2677 s.addListener('close', function() {
78 var end = Date.now();
79 var diff = end - start;
80 console.log('Read '+ tsize +' bytes in '+ diff/1000 +'s using '+ bsize +' byte buffers: '+ ((tsize/(diff/1000)) / 1048576) +' mB/s');
81 done();
82 });
83}
84
85var bs= 0;
86
87function nextwt() {
88 if (bsizes.length <= bs) {
89 bs = 0;
90 nextrt();
91 return;
92 }
93 wt(tsize, bsizes[bs], nextwt);
94 bs += 1;
95}
96
97function nextrt() {
98 if (bsizes.length <= bs) {
99 fs.unlink(path, function (err) {
100 if (err) throw err;
101 console.log('All done!');
102 });
103 return;
104 }
105 rt(tsize, bsizes[bs], nextrt);
106 bs += 1;
107}
108
109nextwt();