diff options
Diffstat (limited to 'stress.c')
-rw-r--r-- | stress.c | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/stress.c b/stress.c new file mode 100644 index 0000000..0b7e999 --- /dev/null +++ b/stress.c @@ -0,0 +1,125 @@ +#include "stress.h" + +void usage(void) +{ + printf("Usage: stress [-t n] [-m n]\n"); + printf("\t-t n\tRun n processes parallel\n"); + printf("\t-m n\tTest n MiB of Memory\n"); + printf("\n"); + printf("\t\tCan be combined\n"); + exit(0); +} + +void testMemory(unsigned long long size) +{ + char *mem=malloc(size*sizeof(char)); + unsigned long long i; + unsigned char run=0; + + while(1==1) + { + for(i=0; i<size; i++) + { + mem[i]=(mem[i]+i+run)%256; + } + run++; + } +} + +void testCPU(void) +{ + long double f=0; + long double res=0; + while(1==1) + { + for(f=0; f<LDBL_MAX; f+=LDBL_EPSILON) + { + res=sqrtl(f); + } + } +} + +int main(int argc, char **argv) +{ + const char *optargs = "t:m:h"; + char optc; + unsigned long long convtemp; + + unsigned char errflags=0; + unsigned char optflags=0; + + unsigned char threads = 1; + unsigned long long memory = 1048576LL; + + int i, pid, wstatus; + + while((optc=getopt(argc,argv,optargs))!=-1) + { + switch(optc) + { + case 't': + if((convtemp = strtoll(optarg, NULL, 10))==0) + { + errflags|=THREADS; + perror("Error with -t: "); + } + else + { + optflags|=THREADS; + threads=convtemp; + } + break; + case 'm': + if((convtemp = strtoll(optarg, NULL, 10))==0) + { + errflags|=MEMSIZE; + perror("Error with -m: "); + } + else + { + optflags|=MEMSIZE; + memory=convtemp*1024*1024; + } + break; + case 'h': + case '?': + default: + usage(); + } + } + + if(errflags>0) + { + usage(); + } + if(optflags & THREADS) + { + printf("Threads: %d\n", threads); + } + if(optflags & MEMSIZE) + { + printf("Memsize: %llu\n", memory); + } + + for(i=0; i<threads; i++) + { + switch(pid=fork()) + { + case -1: + perror("fork()"); + break; + case 0: + if(optflags&MEMSIZE) + testMemory(memory/threads); + else + testCPU(); + break; + } + } + for(i=0; i<threads; i++) + { + wait(&wstatus); + } + + return 0; +} |