| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff 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 | + } | ||
| Original file line number | Diff line number | Diff 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(); | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments