From 5200a6c79d4ab0e12eeb6c39076318d7547c7fcb Mon Sep 17 00:00:00 2001 From: "Michael I. Bushnell" Date: Fri, 24 Jun 1994 17:47:16 +0000 Subject: Initial revision --- benchmarks/forks.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 benchmarks/forks.c (limited to 'benchmarks/forks.c') diff --git a/benchmarks/forks.c b/benchmarks/forks.c new file mode 100644 index 00000000..ae9efaab --- /dev/null +++ b/benchmarks/forks.c @@ -0,0 +1,51 @@ +/* From 4.4 BSD sys/tests/benchmarks/forks.c. */ + +/* + * Benchmark program to calculate fork+wait + * overhead (approximately). Process + * forks and exits while parent waits. + * The time to run this program is used + * in calculating exec overhead. + */ + +main(argc, argv) + char *argv[]; +{ + register int nforks, i; + char *cp; + int pid, child, status, brksize; + + if (argc < 2) { + printf("usage: %s number-of-forks sbrk-size\n", argv[0]); + exit(1); + } + nforks = atoi(argv[1]); + if (nforks < 0) { + printf("%s: bad number of forks\n", argv[1]); + exit(2); + } + brksize = atoi(argv[2]); + if (brksize < 0) { + printf("%s: bad size to sbrk\n", argv[2]); + exit(3); + } + cp = (char *)sbrk(brksize); + if ((int)cp == -1) { + perror("sbrk"); + exit(4); + } + for (i = 0; i < brksize; i += 1024) + cp[i] = i; + while (nforks-- > 0) { + child = fork(); + if (child == -1) { + perror("fork"); + exit(-1); + } + if (child == 0) + _exit(-1); + while ((pid = wait(&status)) != -1 && pid != child) + ; + } + exit(0); +} -- cgit v1.2.3