gdb - Local mods (compile)
[dragonfly.git] / test / sysperf / memzero.c
1 /*
2  * memzero.c
3  */
4
5 #include "blib.h"
6
7 int glob[16384];
8
9 void test_using(const char *ctl, char *buf, int bytes, void (*zerof)(void *d, size_t bytes));
10
11 extern void dozero1(void *d, size_t bytes);
12 extern void dozero2(void *d, size_t bytes);
13 extern void dozero3(void *d, size_t bytes);
14 extern void dozero4(void *d, size_t bytes);
15 extern void dozero5(void *d, size_t bytes);
16 extern void dozero6(void *d, size_t bytes);
17 extern void dozero7(void *d, size_t bytes);
18 extern void fpcleanup(void);
19
20 int
21 main(int ac, char **av)
22 {
23     int bytes;
24     char *ptr;
25     char *buf;
26
27     if (ac == 1) {
28         fprintf(stderr, "%s bytes\n", av[0]);
29         exit(1);
30     }
31
32     bytes = strtol(av[1], &ptr, 0);
33     switch(*ptr) {
34     case 'k':
35     case 'K':
36         bytes *= 1024;
37         break;
38     case 'm':
39     case 'M':
40         bytes *= 1024 * 1024;
41         break;
42     case 'g':
43     case 'G':
44         bytes *= 1024 * 1024 * 1024;
45         break;
46     case 0:
47         break;
48     default:
49         fprintf(stderr, "suffix '%s' not understood\n", ptr);
50         exit(1);
51     }
52     if (bytes <= 0 && (bytes & 127)) {
53         fprintf(stderr, "# of bytes must be a multiple of 128\n");
54         exit(1);
55     }
56
57     buf = mmap(NULL, bytes * 2, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANON, -1, 0);
58     if (buf == MAP_FAILED) {
59         perror("mmap/buffer");
60         exit(1);
61     }
62     bzero(buf, bytes * 2);
63
64     test_using("bzero", buf, bytes, (void *)bzero);
65 #if 0
66     test_using("dozero1", buf, bytes, dozero1);
67     test_using("dozero2", buf, bytes, dozero2);
68     test_using("dozero3", buf, bytes, dozero3);
69     test_using("dozero4", buf, bytes, dozero4);
70     test_using("dozero5", buf, bytes, dozero5);
71     test_using("dozero6", buf, bytes, dozero6);
72     test_using("dozero7", buf, bytes, dozero7);
73 #endif
74     return(0);
75 }
76
77 void
78 test_using(const char *ctl, char *buf, int bytes, void (*zerof)(void *d, size_t bytes))
79 {
80     int i;
81     int loops;
82     long long us;
83
84     start_timing();
85     for (i = 0; (i & 31) || stop_timing(0, NULL) == 0; ++i) {
86         zerof(buf, bytes);
87     }
88
89     loops = i * 2;
90     start_timing();
91     for (i = loops - 1; i >= 0; --i) {
92         zerof(buf, bytes);
93     }
94 #if 0
95     fpcleanup();
96 #endif
97     stop_timing(loops, ctl);
98     us = get_timing();
99     printf("%s %d %5.2f MBytes/sec\n", ctl, bytes, 
100         (double)loops * (double)bytes / (double)us);
101 }