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 60