src: move debug agent from deps/ to src/
[platform/upstream/nodejs.git] / benchmark / io.c
1 /**
2  * gcc -o iotest io.c
3  */
4
5 #include <assert.h>
6 #include <unistd.h>
7 #include <string.h>
8 #include <fcntl.h>
9 #include <sys/time.h>
10 #include <assert.h>
11 #include <stdlib.h>
12 #include <stdint.h>
13 #include <stdio.h>
14  
15 static int c = 0;
16 static int tsize = 1000 * 1048576;
17 static const char* path = "/tmp/wt.dat";
18 static char buf[65536];
19
20 static uint64_t now(void) {
21   struct timeval tv;
22
23   if (gettimeofday(&tv, NULL))
24     abort();
25
26   return tv.tv_sec * 1000000ULL + tv.tv_usec;
27 }
28
29 static void writetest(int size, size_t bsize)
30 {
31   int i;
32   uint64_t start, end;
33   double elapsed;
34   double mbps;
35
36   assert(bsize <= sizeof buf);
37
38   int fd = open(path, O_CREAT|O_WRONLY, 0644);
39   if (fd < 0) {
40     perror("open failed");
41     exit(254);
42   }
43
44   start = now();
45
46   for (i = 0; i < size; i += bsize) {
47     int rv = write(fd, buf, bsize);
48     if (rv < 0) {
49       perror("write failed");
50       exit(254);
51     }
52   }
53
54 #ifndef NSYNC
55 # ifdef __linux__
56   fdatasync(fd);
57 # else
58   fsync(fd);
59 # endif
60 #endif /* SYNC */
61
62   close(fd);
63
64   end = now();
65   elapsed = (end - start) / 1e6;
66   mbps = ((tsize/elapsed)) / 1048576;
67
68   fprintf(stderr, "Wrote %d bytes in %03fs using %ld byte buffers: %03f\n", size, elapsed, bsize, mbps);
69 }
70
71 void readtest(int size, size_t bsize)
72 {
73   int i;
74   uint64_t start, end;
75   double elapsed;
76   double mbps;
77
78   assert(bsize <= sizeof buf);
79
80   int fd = open(path, O_RDONLY, 0644);
81   if (fd < 0) {
82     perror("open failed");
83     exit(254);
84   }
85
86   start = now();
87
88   for (i = 0; i < size; i += bsize) {
89     int rv = read(fd, buf, bsize);
90     if (rv < 0) {
91       perror("write failed");
92       exit(254);
93     }
94   }
95   close(fd);
96
97   end = now();
98   elapsed = (end - start) / 1e6;
99   mbps = ((tsize/elapsed)) / 1048576;
100
101   fprintf(stderr, "Read %d bytes in %03fs using %ld byte buffers: %03fmB/s\n", size, elapsed, bsize, mbps);
102 }
103
104 void cleanup() {
105   unlink(path);
106 }
107
108 int main(int argc, char** argv)
109 {
110   int i;
111   int bsizes[] = {1024, 4096, 8192, 16384, 32768, 65536, 0};
112
113   if (argc > 1) path = argv[1];
114
115   for (i = 0; bsizes[i] != 0; i++) {
116     writetest(tsize, bsizes[i]);
117   }
118   for (i = 0; bsizes[i] != 0; i++) {
119     readtest(tsize, bsizes[i]);
120   }
121   atexit(cleanup);
122   return 0;
123 }