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 Marinomain(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