FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Add Paul Querna's io benchmarks · r2d2coder/node@41ad339 · GitHub

Repository navigation

Commit 41ad339

Browse files
committed
Add Paul Querna's io benchmarks
1 parent cf2b206 commit 41ad339

2 files changed

Lines changed: 212 additions & 0 deletions

File tree

‎benchmark/io.c‎

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
/**
2+
* gcc -o iotest io.c
3+
*/
4+
5+
#include <unistd.h>
6+
#include <string.h>
7+
#include <fcntl.h>
8+
#include <time.h>
9+
#include <stdlib.h>
10+
#include <stdio.h>
11+
12+
int tsize = 1000 * 1048576;
13+
const char *path = "/tmp/wt.dat";
14+
15+
16+
char* bufit(size_t l)
17+
{
18+
char *p = malloc(l);
19+
memset(p, '!', l);
20+
return p;
21+
}
22+
23+
void writetest(int size, size_t bsize)
24+
{
25+
int i;
26+
char *buf = bufit(bsize);
27+
clock_t start, end;
28+
double elapsed;
29+
double mbps;
30+
31+
int fd = open(path, O_CREAT|O_WRONLY, 0644);
32+
if (fd < 0) {
33+
perror("open failed");
34+
exit(254);
35+
}
36+
37+
start = clock();
38+
for (i = 0; i < size; i += bsize) {
39+
int rv = write(fd, buf, bsize);
40+
if (rv < 0) {
41+
perror("write failed");
42+
exit(254);
43+
}
44+
}
45+
#ifdef __linux__
46+
fdatasync(fd);
47+
#else
48+
fsync(fd);
49+
#endif
50+
close(fd);
51+
end = clock();
52+
elapsed = ((double) (end - start)) / CLOCKS_PER_SEC;
53+
mbps = ((tsize/elapsed)) / 1048576;
54+
fprintf(stderr, "Wrote %d bytes in %03fs using %d byte buffers: %03fmB/s\n", size, elapsed, bsize, mbps);
55+
56+
free(buf);
57+
}
58+
59+
void readtest(int size, size_t bsize)
60+
{
61+
int i;
62+
char *buf = bufit(bsize);
63+
clock_t start, end;
64+
double elapsed;
65+
double mbps;
66+
67+
int fd = open(path, O_RDONLY, 0644);
68+
if (fd < 0) {
69+
perror("open failed");
70+
exit(254);
71+
}
72+
73+
start = clock();
74+
for (i = 0; i < size; i += bsize) {
75+
int rv = read(fd, buf, bsize);
76+
if (rv < 0) {
77+
perror("write failed");
78+
exit(254);
79+
}
80+
}
81+
close(fd);
82+
end = clock();
83+
elapsed = ((double) (end - start)) / CLOCKS_PER_SEC;
84+
mbps = ((tsize/elapsed)) / 1048576;
85+
fprintf(stderr, "Read %d bytes in %03fs using %d byte buffers: %03fmB/s\n", size, elapsed, bsize, mbps);
86+
87+
free(buf);
88+
}
89+
90+
void cleanup() {
91+
unlink(path);
92+
}
93+
94+
int main()
95+
{
96+
int i;
97+
int bsizes[] = {1024, 4096, 8192, 16384, 32768, 65536, 0};
98+
99+
for (i = 0; bsizes[i] != 0; i++) {
100+
writetest(tsize, bsizes[i]);
101+
}
102+
for (i = 0; bsizes[i] != 0; i++) {
103+
readtest(tsize, bsizes[i]);
104+
}
105+
atexit(cleanup);
106+
return 0;
107+
}

‎benchmark/io.js‎

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
var fs = require('fs');
2+
var Buffer = require('buffer').Buffer;
3+
4+
var path = "/tmp/wt.dat";
5+
var tsize = 1000 * 1048576;
6+
var bsizes = [1024, 4096, 8192, 16384, 32768, 65536];
7+
8+
function 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+
16+
function 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+
24+
function 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+
50+
function 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+
59+
function 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+
70+
function 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+
81+
var bs= 0;
82+
83+
function 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+
93+
function 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+
105+
nextwt();

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL