From owner-svn-src-user@freebsd.org Tue Mar 29 12:17:59 2016 Return-Path: Delivered-To: svn-src-user@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 73856AE010E for ; Tue, 29 Mar 2016 12:17:59 +0000 (UTC) (envelope-from pho@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 23B481CBE; Tue, 29 Mar 2016 12:17:59 +0000 (UTC) (envelope-from pho@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u2TCHw5Z095243; Tue, 29 Mar 2016 12:17:58 GMT (envelope-from pho@FreeBSD.org) Received: (from pho@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u2TCHwPU095242; Tue, 29 Mar 2016 12:17:58 GMT (envelope-from pho@FreeBSD.org) Message-Id: <201603291217.u2TCHwPU095242@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: pho set sender to pho@FreeBSD.org using -f From: Peter Holm Date: Tue, 29 Mar 2016 12:17:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r297385 - user/pho/stress2/misc X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Mar 2016 12:17:59 -0000 Author: pho Date: Tue Mar 29 12:17:58 2016 New Revision: 297385 URL: https://svnweb.freebsd.org/changeset/base/297385 Log: Rework test scenario. Sponsored by: EMC / Isilon Storage Division Modified: user/pho/stress2/misc/forkbomb.sh Modified: user/pho/stress2/misc/forkbomb.sh ============================================================================== --- user/pho/stress2/misc/forkbomb.sh Tue Mar 29 11:56:00 2016 (r297384) +++ user/pho/stress2/misc/forkbomb.sh Tue Mar 29 12:17:58 2016 (r297385) @@ -53,20 +53,14 @@ bsdlabel -w md$mdstart auto newfs $newfs_flags md${mdstart}$part > /dev/null mount /dev/md${mdstart}$part $mntpoint -sysctl kern.maxproc -vmstat -z | sed -n "1p;/PROC/p;/THREAD/p" -echo - -/tmp/forkbomb - -vmstat -z | sed -n "/PROC/p;/THREAD/p" +su $testuser -c /tmp/forkbomb while mount | grep "on $mntpoint " | grep -q /dev/md; do umount $mntpoint || sleep 1 done mdconfig -d -u $mdstart rm -rf /tmp/forkbomb -exit +exit 0 EOF #include @@ -84,10 +78,14 @@ EOF volatile u_int *share; -#define R1 0 -#define R2 1 +#define R1 1 /* sync start */ +#define R2 2 /* forks */ +#define R3 3 /* exits */ +#define R4 4 /* fork failed */ +//#define DEBUG #define MXFAIL 100 +#define MAXPROC 40000 /* Arbitrary cap */ #define PARALLEL 200 void @@ -98,37 +96,53 @@ test(void) atomic_add_int(&share[R1], 1); while (share[R1] != PARALLEL) ; + atomic_add_int(&share[R2], 1); for (;;) { - r = fork(); - if (r == -1) - atomic_add_int(&share[R2], 1); - if (share[R2] > MXFAIL) + if (share[R2] >= MAXPROC || share[R4] > MXFAIL) + break; + atomic_add_int(&share[R2], 1); + if ((r = fork()) == -1) { + atomic_add_int(&share[R4], 1); + atomic_add_int(&share[R2], -1); break; + } } + atomic_add_int(&share[R3], 1); _exit(0); } int main(void) { + struct sigaction sa; size_t len; int i; - len = getpagesize(); - if ((share = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, - -1, 0)) == MAP_FAILED) + len = PAGE_SIZE; + if ((share = mmap(NULL, len, PROT_READ | PROT_WRITE, + MAP_ANON | MAP_SHARED, -1, 0)) == MAP_FAILED) err(1, "mmap"); - signal(SIGCHLD, SIG_IGN); + sa.sa_handler = SIG_IGN; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + if (sigaction(SIGCHLD, &sa, 0) == -1) + err(1, "sigaction"); + for (i = 0; i < PARALLEL; i++) { if (fork() == 0) test(); } - while (share[R2] < MXFAIL) + while (share[R2] == 0 || share[R3] < share[R2]) sleep(1); +#if defined(DEBUG) + fprintf(stderr, "MAXPROC: %d. forks: %u / exits: %u / fails: %u\n", + MAXPROC, share[R2], share[R3], share[R4]); +#endif + return (0); }