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