vfs: check userland buffers before reading them.
[haiku.git] / src / tests / system / benchmarks / forkbench.c
blob2fadc1160e9a23ba13fdaec0f54439bb714b38a0
1 /*
2 * from ftp://ftp.netbsd.org/pub/NetBSD/misc/gmcgarry/bench/forkbench.tar.gz
3 */
5 /* From 4.4 BSD sys/tests/benchmarks/forks.c. */
7 #include <unistd.h>
8 #include <stdlib.h>
9 #include <stdio.h>
10 #include <sys/time.h>
11 #include <sys/wait.h>
14 * Benchmark program to calculate fork+wait
15 * overhead (approximately). Process
16 * forks and exits while parent waits.
17 * The time to run this program is used
18 * in calculating exec overhead.
21 int
22 main(argc, argv)
23 char *argv[];
25 int nforks, i;
26 char *cp;
27 int pid, child, status, brksize;
28 struct timeval before, after;
29 unsigned elapsed;
31 if (argc < 3) {
32 printf("usage: %s number-of-forks sbrk-size\n", argv[0]);
33 exit(1);
35 nforks = atoi(argv[1]);
36 if (nforks < 0) {
37 printf("%s: bad number of forks\n", argv[1]);
38 exit(2);
40 brksize = atoi(argv[2]);
41 if (brksize < 0) {
42 printf("%s: bad size to sbrk\n", argv[2]);
43 exit(3);
46 gettimeofday(&before, NULL);
47 cp = (char *)sbrk(brksize);
48 if (cp == (void *)-1) {
49 perror("sbrk");
50 exit(4);
52 for (i = 0; i < brksize; i += 1024)
53 cp[i] = i;
54 for (i=0; i<nforks; i++) {
55 child = fork();
56 if (child == -1) {
57 perror("fork");
58 exit(-1);
60 if (child == 0)
61 _exit(-1);
62 while ((pid = wait(&status)) != -1 && pid != child)
65 gettimeofday(&after, NULL);
66 elapsed = 1000000 * (after.tv_sec - before.tv_sec);
67 elapsed += (after.tv_usec - before.tv_usec);
68 printf ("Time: %d microseconds.\n", elapsed/nforks);
69 exit(0);