1*881e535eSclaudio# $OpenBSD: Makefile,v 1.5 2024/08/07 18:25:39 claudio Exp $ 20383853bSbluhm 30383853bSbluhm# Copyright (c) 2021 Alexander Bluhm <bluhm@openbsd.org> 40383853bSbluhm# 50383853bSbluhm# Permission to use, copy, modify, and distribute this software for any 60383853bSbluhm# purpose with or without fee is hereby granted, provided that the above 70383853bSbluhm# copyright notice and this permission notice appear in all copies. 80383853bSbluhm# 90383853bSbluhm# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 100383853bSbluhm# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 110383853bSbluhm# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 120383853bSbluhm# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 130383853bSbluhm# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 140383853bSbluhm# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 150383853bSbluhm# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 160383853bSbluhm 170383853bSbluhm# To hunt kernel bugs during exit, terminate processes simultaneously. 180383853bSbluhm# Fork 300 children that sleep. Kill them together as process group. 190383853bSbluhm# Sleeping can optionally be done with individual memory layout by 2079f7fadeSbluhm# executing sleep(1). Optionally each child may create threads. 2179f7fadeSbluhm# Test killing 30 processes with 30 threads each. 220383853bSbluhm 230383853bSbluhmPROG= fork-exit 2479f7fadeSbluhmLDADD= -lpthread 250383853bSbluhmWARNINGS= yes 260383853bSbluhm 270383853bSbluhmREGRESS_TARGETS += run-fork1-exit 2879f7fadeSbluhmrun-fork1-exit: ${PROG} 290383853bSbluhm # test forking a single child 3079f7fadeSbluhm ulimit -p 500 -n 1000; ./fork-exit 310383853bSbluhm 320383853bSbluhmREGRESS_TARGETS += run-fork-exit 3379f7fadeSbluhmrun-fork-exit: ${PROG} 340383853bSbluhm # fork 300 children and kill them simultaneously as process group 350383853bSbluhm ulimit -p 500 -n 1000; ./fork-exit -p 300 360383853bSbluhm 370383853bSbluhmREGRESS_TARGETS += run-fork-exec-exit 3879f7fadeSbluhmrun-fork-exec-exit: ${PROG} 390383853bSbluhm # fork 300 children, exec sleep programs, and kill process group 400383853bSbluhm ulimit -p 500 -n 1000; ./fork-exit -e -p 300 410383853bSbluhm 4279f7fadeSbluhmREGRESS_TARGETS += run-fork1-thread1 4379f7fadeSbluhmrun-fork1-thread1: ${PROG} 4479f7fadeSbluhm # fork a single child and create one thread 4579f7fadeSbluhm ulimit -p 500 -n 1000; ./fork-exit -t 1 4679f7fadeSbluhm 4779f7fadeSbluhmREGRESS_TARGETS += run-fork1-thread 4879f7fadeSbluhmrun-fork1-thread: ${PROG} 4979f7fadeSbluhm # fork a single child and create 1000 threads 5079f7fadeSbluhm ulimit -p 500 -n 1000; ./fork-exit -t 1000 5179f7fadeSbluhm 5279f7fadeSbluhmREGRESS_TARGETS += run-fork-thread 5379f7fadeSbluhmrun-fork-thread: ${PROG} 5479f7fadeSbluhm # fork 30 children each with 30 threads and kill process group 5579f7fadeSbluhm ulimit -p 500 -n 1000; ./fork-exit -p 30 -t 30 5679f7fadeSbluhm 5785f5c1e8SbluhmREGRESS_TARGETS += run-fork1-heap 5885f5c1e8Sbluhmrun-fork1-heap: ${PROG} 5985f5c1e8Sbluhm # allocate 400 MB of heap memory 60*881e535eSclaudio ulimit -p 500 -n 1000; ./fork-exit -h 400000 6185f5c1e8Sbluhm 6285f5c1e8SbluhmREGRESS_TARGETS += run-fork-heap 6385f5c1e8Sbluhmrun-fork-heap: ${PROG} 6485f5c1e8Sbluhm # allocate 400 MB of heap memory in processes 65*881e535eSclaudio ulimit -p 500 -n 1000; ./fork-exit -p 100 -h 4000 6685f5c1e8Sbluhm 675a9dda22SbluhmREGRESS_TARGETS += run-fork1-thread1-heap 685a9dda22Sbluhmrun-fork1-thread1-heap: ${PROG} 695a9dda22Sbluhm # allocate 400 MB of heap memory in single child and one thread 70*881e535eSclaudio ulimit -p 500 -n 1000; ./fork-exit -t 1 -h 400000 715a9dda22Sbluhm 7285f5c1e8SbluhmREGRESS_TARGETS += run-fork-thread-heap 7385f5c1e8Sbluhmrun-fork-thread-heap: ${PROG} 7485f5c1e8Sbluhm # allocate 400 MB of heap memory in threads 75*881e535eSclaudio ulimit -p 500 -n 1000; ./fork-exit -p 10 -t 100 -h 400 7685f5c1e8Sbluhm 7785f5c1e8SbluhmREGRESS_TARGETS += run-fork1-stack 7885f5c1e8Sbluhmrun-fork1-stack: ${PROG} 7985f5c1e8Sbluhm # allocate 32 MB of stack memory 80*881e535eSclaudio ulimit -p 500 -n 1000; ulimit -s 32768; ./fork-exit -s 32000 8185f5c1e8Sbluhm 8285f5c1e8SbluhmREGRESS_TARGETS += run-fork-stack 8385f5c1e8Sbluhmrun-fork-stack: ${PROG} 8485f5c1e8Sbluhm # allocate 400 MB of stack memory in processes 85*881e535eSclaudio ulimit -p 500 -n 1000; ulimit -s 32768; ./fork-exit -p 100 -s 4000 8685f5c1e8Sbluhm 875a9dda22SbluhmREGRESS_TARGETS += run-fork1-thread1-stack 885a9dda22Sbluhmrun-fork1-thread1-stack: ${PROG} 895a9dda22Sbluhm # allocate 400 MB of stack memory in single child and one thread 90*881e535eSclaudio ulimit -p 500 -n 1000; ./fork-exit -t 1 -s 400000 915a9dda22Sbluhm 9285f5c1e8SbluhmREGRESS_TARGETS += run-fork-thread-stack 9385f5c1e8Sbluhmrun-fork-thread-stack: ${PROG} 9485f5c1e8Sbluhm # allocate 400 MB of stack memory in threads 95*881e535eSclaudio ulimit -p 500 -n 1000; ./fork-exit -p 10 -t 100 -s 400 9685f5c1e8Sbluhm 9785f5c1e8SbluhmREGRESS_CLEANUP = cleanup 9885f5c1e8Sbluhmcleanup: 9985f5c1e8Sbluhm # check that all processes have been terminated and waited for 10085f5c1e8Sbluhm ! pkill -u `id -u` fork-exit 10185f5c1e8Sbluhm 1020383853bSbluhm.include <bsd.regress.mk> 103