From mboxrd@z Thu Jan 1 00:00:00 1970 From: Krzysztof Kozlowski Date: Fri, 20 Aug 2021 12:00:27 +0200 Subject: [LTP] [PATCH v5 2/3] syscalls/msgstress03: fix fork failure on small memory systems In-Reply-To: <20210820100028.97487-1-krzysztof.kozlowski@canonical.com> References: <20210820100028.97487-1-krzysztof.kozlowski@canonical.com> Message-ID: <20210820100028.97487-3-krzysztof.kozlowski@canonical.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: ltp@lists.linux.it Running syscalls/msgstress03 on a system with less than ~4 GB of RAM fails: msgstress03 1 TFAIL : msgstress03.c:155: Fork failed (may be OK if under stress) In dmesg: LTP: starting msgstress03 cgroup: fork rejected by pids controller in /user.slice/user-1000.slice/session-1.scope The reason is cgroups pid limit set by systemd user.slice. The limit is set for login session, also for root user. For example on 2 GB RAM machine it is set as: /sys/fs/cgroup/pids/user.slice/user-0.slice/pids.max:5207 Read the maximum number of pids and adjust the test limit. For 2 GB RAM machine with systemd this will result in: msgstress03 0 TINFO : Found limit of processes 5056 (from /sys/fs/cgroup/pids/user.slice/user-1000.slice/pids.max) msgstress03 0 TINFO : Requested number of processes higher than user session limit (10000 > 4556), setting to 4556 Signed-off-by: Krzysztof Kozlowski --- testcases/kernel/syscalls/ipc/msgstress/msgstress03.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/testcases/kernel/syscalls/ipc/msgstress/msgstress03.c b/testcases/kernel/syscalls/ipc/msgstress/msgstress03.c index 294b401b1b38..3cb70ab18a80 100644 --- a/testcases/kernel/syscalls/ipc/msgstress/msgstress03.c +++ b/testcases/kernel/syscalls/ipc/msgstress/msgstress03.c @@ -78,7 +78,7 @@ static void usage(void) int main(int argc, char **argv) { - int i, j, ok, pid; + int i, j, ok, pid, free_pids; int count, status; struct sigaction act; @@ -109,6 +109,14 @@ int main(int argc, char **argv) } } + free_pids = tst_get_free_pids(cleanup); + if (nprocs >= free_pids) { + tst_resm(TINFO, + "Requested number of processes higher than limit (%d > %d), " + "setting to %d", nprocs, free_pids, free_pids); + nprocs = free_pids; + } + srand(getpid()); tid = -1; -- 2.30.2