/* * Program to cause a synthesized load for profiling. * Spawns n processes each of which would do r rounds of * io + compute. */ #include #include enum { Nprocs = 10, Nrounds = 4, Ncpu = 10000, Nio = 10000, Nstack = 10, Nsleep = 10, Bufsz = 1024, }; #include "rnd.c" int nprocs, nrounds, ncpu, nio, nstack, nsleep; static void docpu(void) { int *dv; int i, j, x; dv = malloc(sizeof vals); for(i = 0; i < nelem(vals); i++) dv[i] = vals[i]; for(i = 0; i < nelem(dv); i++) for(j = i; j < nelem(dv); j++) if(dv[i] > dv[j]){ x = dv[i]; dv[i] = dv[j]; dv[j] = x; } free(dv); } static void doio(char buf[], int sz) { int i, p[2]; long n; if(pipe(p) < 0) sysfatal("pipe"); switch(fork()){ case -1: sysfatal("fork: %r"); case 0: close(p[1]); for(i = 0; i < nio; i++){ n = readn(p[0], buf, sz); if(n != sz) sysfatal("read: %r"); } close(p[0]); exits(nil); default: close(p[0]); for(i = 0; i < nio; i++){ n = write(p[1], buf, sz); if(n != sz) sysfatal("write: %r"); } close(p[1]); waitpid(); } } static void stk(int lvl) { int i, c; char buf[Bufsz]; if(lvl < Nstack){ stk(lvl+1); return; } for(i = 0; i