Add src/test and throw in some of the ad-hoc timing and testing programs
[dragonfly.git] / test / sysperf / mutex2.c
1 /*
2  * mutex2.c
3  *
4  * $DragonFly: src/test/sysperf/mutex2.c,v 1.1 2003/08/12 02:29:44 dillon Exp $
5  */
6
7 #include "blib.h"
8
9 int *mtx;
10
11 int
12 main(int ac, char **av)
13 {
14     long long count = 0;
15     long long max;
16     int j;
17     int *counter;
18     pid_t pid;
19
20     printf("Test simple locked bus cycle mutex latency\n");
21     printf("auto-forks two processes for the test with shared memory\n");
22     printf("This test is only useful on a SMP box\n");
23
24     start_timing();
25     mtx = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANON, -1, 0);
26     counter = mtx + 64;
27     while (stop_timing(0, NULL) == 0) {
28         for (j = 0; j < 100; ++j) {
29             get_mtx(1);
30             rel_mtx();
31         }
32         count += 100;
33     }
34     max = count;
35     *mtx = 0;
36     if ((pid = fork()) == 0) {
37         for (;;) {
38             for (j = 0; j < 100; ++j) {
39                 get_mtx(2);
40                 rel_mtx();      /* release */
41                 ++counter[128];
42             }
43         }
44     } else {
45         start_timing();
46         for (count = 0; count < max; count += 100) {
47             for (j = 0; j < 100; ++j) {
48                 get_mtx(1);
49                 rel_mtx();      /* release */
50                 ++counter[64];
51             }
52         }
53         stop_timing(count, "getuid()");
54         printf("proc1=%d proc2=%d\n", counter[64], counter[128]);
55         kill(pid, 9);
56     }
57     return(0);
58 }
59