1 6f4d00ee 2013-09-23 0intro #include <u.h>
2 6f4d00ee 2013-09-23 0intro #include <libc.h>
4 6f4d00ee 2013-09-23 0intro typedef uvlong u64int;
6 6f4d00ee 2013-09-23 0intro #define TWID64 ((u64int)~(u64int)0)
10 6f4d00ee 2013-09-23 0intro unittoull(char *s)
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;
21 6f4d00ee 2013-09-23 0intro }else if(*es == 'm' || *es == 'M'){
22 6f4d00ee 2013-09-23 0intro n *= 1024*1024;
24 6f4d00ee 2013-09-23 0intro }else if(*es == 'g' || *es == 'G'){
25 6f4d00ee 2013-09-23 0intro n *= 1024*1024*1024;
28 6f4d00ee 2013-09-23 0intro if(*es != '\0')
29 6f4d00ee 2013-09-23 0intro return TWID64;
34 6f4d00ee 2013-09-23 0intro main(int argc, char *argv[])
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;
43 6f4d00ee 2013-09-23 0intro m = OREAD;
46 6f4d00ee 2013-09-23 0intro n = atoi(ARGF());
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");
54 6f4d00ee 2013-09-23 0intro m = OREAD;
57 6f4d00ee 2013-09-23 0intro m = OWRITE;
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]);
68 6f4d00ee 2013-09-23 0intro buf = malloc(s);
69 6f4d00ee 2013-09-23 0intro t = malloc(n*sizeof(double));
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");
77 6f4d00ee 2013-09-23 0intro if(pwrite(fd, buf, s, 0) < s)
78 6f4d00ee 2013-09-23 0intro sysfatal("bad write: %r");
80 6f4d00ee 2013-09-23 0intro t1 = nsec();
81 6f4d00ee 2013-09-23 0intro t[i] = (t1 - t0)*1e-3;
88 6f4d00ee 2013-09-23 0intro min = 1e12;
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];
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]);
103 6f4d00ee 2013-09-23 0intro d = sqrt(d);
105 6f4d00ee 2013-09-23 0intro print("avg = %.0fµs min = %.0fµs max = %.0fµs dev = %.0fµs\n", a, min, max, d);
107 6f4d00ee 2013-09-23 0intro exits(0);