Blame


1 6f4d00ee 2013-09-23 0intro #include <u.h>
2 6f4d00ee 2013-09-23 0intro #include <libc.h>
3 6f4d00ee 2013-09-23 0intro
4 6f4d00ee 2013-09-23 0intro typedef uvlong u64int;
5 6f4d00ee 2013-09-23 0intro
6 6f4d00ee 2013-09-23 0intro #define TWID64 ((u64int)~(u64int)0)
7 6f4d00ee 2013-09-23 0intro
8 6f4d00ee 2013-09-23 0intro
9 6f4d00ee 2013-09-23 0intro u64int
10 6f4d00ee 2013-09-23 0intro unittoull(char *s)
11 6f4d00ee 2013-09-23 0intro {
12 6f4d00ee 2013-09-23 0intro char *es;
13 6f4d00ee 2013-09-23 0intro u64int n;
14 6f4d00ee 2013-09-23 0intro
15 6f4d00ee 2013-09-23 0intro if(s == nil)
16 6f4d00ee 2013-09-23 0intro return TWID64;
17 6f4d00ee 2013-09-23 0intro n = strtoul(s, &es, 0);
18 6f4d00ee 2013-09-23 0intro if(*es == 'k' || *es == 'K'){
19 6f4d00ee 2013-09-23 0intro n *= 1024;
20 6f4d00ee 2013-09-23 0intro es++;
21 6f4d00ee 2013-09-23 0intro }else if(*es == 'm' || *es == 'M'){
22 6f4d00ee 2013-09-23 0intro n *= 1024*1024;
23 6f4d00ee 2013-09-23 0intro es++;
24 6f4d00ee 2013-09-23 0intro }else if(*es == 'g' || *es == 'G'){
25 6f4d00ee 2013-09-23 0intro n *= 1024*1024*1024;
26 6f4d00ee 2013-09-23 0intro es++;
27 6f4d00ee 2013-09-23 0intro }
28 6f4d00ee 2013-09-23 0intro if(*es != '\0')
29 6f4d00ee 2013-09-23 0intro return TWID64;
30 6f4d00ee 2013-09-23 0intro return n;
31 6f4d00ee 2013-09-23 0intro }
32 6f4d00ee 2013-09-23 0intro
33 6f4d00ee 2013-09-23 0intro void
34 6f4d00ee 2013-09-23 0intro main(int argc, char *argv[])
35 6f4d00ee 2013-09-23 0intro {
36 6f4d00ee 2013-09-23 0intro int fd, i;
37 6f4d00ee 2013-09-23 0intro int n = 1000, m;
38 6f4d00ee 2013-09-23 0intro int s = 1;
39 6f4d00ee 2013-09-23 0intro double *t, t0, t1;
40 6f4d00ee 2013-09-23 0intro uchar *buf;
41 6f4d00ee 2013-09-23 0intro double a, d, max, min;
42 6f4d00ee 2013-09-23 0intro
43 6f4d00ee 2013-09-23 0intro m = OREAD;
44 6f4d00ee 2013-09-23 0intro ARGBEGIN{
45 6f4d00ee 2013-09-23 0intro case 'n':
46 6f4d00ee 2013-09-23 0intro n = atoi(ARGF());
47 6f4d00ee 2013-09-23 0intro break;
48 6f4d00ee 2013-09-23 0intro case 's':
49 6f4d00ee 2013-09-23 0intro s = unittoull(ARGF());
50 6f4d00ee 2013-09-23 0intro if(s < 1 || s > 1024*1024)
51 6f4d00ee 2013-09-23 0intro sysfatal("bad size");
52 6f4d00ee 2013-09-23 0intro break;
53 6f4d00ee 2013-09-23 0intro case 'r':
54 6f4d00ee 2013-09-23 0intro m = OREAD;
55 6f4d00ee 2013-09-23 0intro break;
56 6f4d00ee 2013-09-23 0intro case 'w':
57 6f4d00ee 2013-09-23 0intro m = OWRITE;
58 6f4d00ee 2013-09-23 0intro break;
59 6f4d00ee 2013-09-23 0intro }ARGEND
60 6f4d00ee 2013-09-23 0intro
61 6f4d00ee 2013-09-23 0intro fd = 0;
62 6f4d00ee 2013-09-23 0intro if(argc == 1){
63 6f4d00ee 2013-09-23 0intro fd = open(argv[0], m);
64 6f4d00ee 2013-09-23 0intro if(fd < 0)
65 6f4d00ee 2013-09-23 0intro sysfatal("could not open file: %s: %r", argv[0]);
66 6f4d00ee 2013-09-23 0intro }
67 6f4d00ee 2013-09-23 0intro
68 6f4d00ee 2013-09-23 0intro buf = malloc(s);
69 6f4d00ee 2013-09-23 0intro t = malloc(n*sizeof(double));
70 6f4d00ee 2013-09-23 0intro
71 6f4d00ee 2013-09-23 0intro t0 = nsec();
72 6f4d00ee 2013-09-23 0intro for(i=0; i<n; i++){
73 6f4d00ee 2013-09-23 0intro if(m == OREAD){
74 6f4d00ee 2013-09-23 0intro if(pread(fd, buf, s, 0) < s)
75 6f4d00ee 2013-09-23 0intro sysfatal("bad read: %r");
76 6f4d00ee 2013-09-23 0intro }else{
77 6f4d00ee 2013-09-23 0intro if(pwrite(fd, buf, s, 0) < s)
78 6f4d00ee 2013-09-23 0intro sysfatal("bad write: %r");
79 6f4d00ee 2013-09-23 0intro }
80 6f4d00ee 2013-09-23 0intro t1 = nsec();
81 6f4d00ee 2013-09-23 0intro t[i] = (t1 - t0)*1e-3;
82 6f4d00ee 2013-09-23 0intro t0 = t1;
83 6f4d00ee 2013-09-23 0intro }
84 6f4d00ee 2013-09-23 0intro
85 6f4d00ee 2013-09-23 0intro a = 0.;
86 6f4d00ee 2013-09-23 0intro d = 0.;
87 6f4d00ee 2013-09-23 0intro max = 0.;
88 6f4d00ee 2013-09-23 0intro min = 1e12;
89 6f4d00ee 2013-09-23 0intro
90 6f4d00ee 2013-09-23 0intro for(i=0; i<n; i++){
91 6f4d00ee 2013-09-23 0intro a += t[i];
92 6f4d00ee 2013-09-23 0intro if(max < t[i])
93 6f4d00ee 2013-09-23 0intro max = t[i];
94 6f4d00ee 2013-09-23 0intro if(min > t[i])
95 6f4d00ee 2013-09-23 0intro min = t[i];
96 6f4d00ee 2013-09-23 0intro }
97 6f4d00ee 2013-09-23 0intro
98 6f4d00ee 2013-09-23 0intro a /= n;
99 6f4d00ee 2013-09-23 0intro
100 6f4d00ee 2013-09-23 0intro for(i=0; i<n; i++)
101 6f4d00ee 2013-09-23 0intro d += (a - t[i]) * (a - t[i]);
102 6f4d00ee 2013-09-23 0intro d /= n;
103 6f4d00ee 2013-09-23 0intro d = sqrt(d);
104 6f4d00ee 2013-09-23 0intro
105 6f4d00ee 2013-09-23 0intro print("avg = %.0fµs min = %.0fµs max = %.0fµs dev = %.0fµs\n", a, min, max, d);
106 6f4d00ee 2013-09-23 0intro
107 6f4d00ee 2013-09-23 0intro exits(0);
108 6f4d00ee 2013-09-23 0intro }