xref: /dflybsd-src/test/sysperf/loop2.c (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
1*86d7f5d3SJohn Marino /*
2*86d7f5d3SJohn Marino  * loop2.c
3*86d7f5d3SJohn Marino  *
4*86d7f5d3SJohn Marino  * Used as a helper to test AST delivery.  Loops in user mode for a few
5*86d7f5d3SJohn Marino  * seconds.  This one forks and runs the loop in two processes.
6*86d7f5d3SJohn Marino  *
7*86d7f5d3SJohn Marino  * $DragonFly: src/test/sysperf/loop2.c,v 1.2 2006/04/22 22:32:52 dillon Exp $
8*86d7f5d3SJohn Marino  */
9*86d7f5d3SJohn Marino 
10*86d7f5d3SJohn Marino #include "blib.h"
11*86d7f5d3SJohn Marino 
12*86d7f5d3SJohn Marino #define LOOP 1000000
13*86d7f5d3SJohn Marino #define INNER 100
14*86d7f5d3SJohn Marino 
15*86d7f5d3SJohn Marino int
main(int ac,char ** av)16*86d7f5d3SJohn Marino main(int ac, char **av)
17*86d7f5d3SJohn Marino {
18*86d7f5d3SJohn Marino     int i;
19*86d7f5d3SJohn Marino     int j;
20*86d7f5d3SJohn Marino     int count = LOOP;
21*86d7f5d3SJohn Marino     pid_t pid;
22*86d7f5d3SJohn Marino 
23*86d7f5d3SJohn Marino     if (ac > 1)
24*86d7f5d3SJohn Marino 	count = strtoul(av[1], NULL, 0);
25*86d7f5d3SJohn Marino 
26*86d7f5d3SJohn Marino     printf("SMP contention, userland-only loop, duel-forks.  Run just one\n");
27*86d7f5d3SJohn Marino 
28*86d7f5d3SJohn Marino     start_timing();
29*86d7f5d3SJohn Marino     if (fork() == 0) {
30*86d7f5d3SJohn Marino 	for (i = count; i > 0; --i) {
31*86d7f5d3SJohn Marino 	    for (j = INNER; j > 0; --j)
32*86d7f5d3SJohn Marino 		nop();
33*86d7f5d3SJohn Marino 	}
34*86d7f5d3SJohn Marino 	_exit(1);
35*86d7f5d3SJohn Marino     } else {
36*86d7f5d3SJohn Marino 	for (i = count; i > 0; --i) {
37*86d7f5d3SJohn Marino 	    for (j = INNER; j > 0; --j)
38*86d7f5d3SJohn Marino 		nop();
39*86d7f5d3SJohn Marino 	}
40*86d7f5d3SJohn Marino 	while (wait(NULL) > 0)
41*86d7f5d3SJohn Marino 	    ;
42*86d7f5d3SJohn Marino 	stop_timing(LOOP, "loop2/2xfork");
43*86d7f5d3SJohn Marino     }
44*86d7f5d3SJohn Marino     return(0);
45*86d7f5d3SJohn Marino }
46*86d7f5d3SJohn Marino 
47