Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754616AbbGFIvl (ORCPT ); Mon, 6 Jul 2015 04:51:41 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:11673 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754567AbbGFIvh (ORCPT ); Mon, 6 Jul 2015 04:51:37 -0400 From: Andrey Vagin To: linux-kernel@vger.kernel.org Cc: linux-api@vger.kernel.org, Andrey Vagin , Oleg Nesterov , Andrew Morton , Cyrill Gorcunov , Pavel Emelyanov , Roger Luethi , Arnd Bergmann , Arnaldo Carvalho de Melo , David Ahern , Andy Lutomirski , Pavel Odintsov Subject: [PATCH 24/24] task_diag: Enhance fork tool to spawn threads Date: Mon, 6 Jul 2015 11:47:25 +0300 Message-Id: <1436172445-6979-25-git-send-email-avagin@openvz.org> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1436172445-6979-1-git-send-email-avagin@openvz.org> References: <1436172445-6979-1-git-send-email-avagin@openvz.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2916 Lines: 109 From: David Ahern Add option to fork threads as well as processes. Make the sleep time configurable too so that spawned tasks exit on their own. Signed-off-by: David Ahern Signed-off-by: Andrey Vagin --- tools/testing/selftests/task_diag/Makefile | 2 ++ tools/testing/selftests/task_diag/fork.c | 36 ++++++++++++++++++++++++++---- tools/testing/selftests/task_diag/run.sh | 4 ++-- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/task_diag/Makefile b/tools/testing/selftests/task_diag/Makefile index 7104573..0c53cf6 100644 --- a/tools/testing/selftests/task_diag/Makefile +++ b/tools/testing/selftests/task_diag/Makefile @@ -12,6 +12,8 @@ task_diag_comm.o: task_diag_comm.c task_diag_comm.h task_diag_all: task_diag_all.o task_diag_comm.o task_diag: task_diag.o task_diag_comm.o fork: fork.c + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ -lpthread + task_proc_all: task_proc_all.c clean: diff --git a/tools/testing/selftests/task_diag/fork.c b/tools/testing/selftests/task_diag/fork.c index c6e17d1..ebddedd2 100644 --- a/tools/testing/selftests/task_diag/fork.c +++ b/tools/testing/selftests/task_diag/fork.c @@ -2,15 +2,39 @@ #include #include #include +#include +void *f(void *arg) +{ + unsigned long t = (unsigned long) arg; + + sleep(t); + return NULL; +} + +/* usage: fork nproc [mthreads [sleep]] */ int main(int argc, char **argv) { - int i, n; + int i, j, n, m = 0; + unsigned long t_sleep = 1000; + pthread_attr_t attr; + pthread_t id; - if (argc < 2) + if (argc < 2) { + fprintf(stderr, "usage: fork nproc [mthreads [sleep]]\n"); return 1; + } n = atoi(argv[1]); + + if (argc > 2) + m = atoi(argv[2]); + + if (argc > 3) + t_sleep = atoi(argv[3]); + + pthread_attr_init(&attr); + for (i = 0; i < n; i++) { pid_t pid; @@ -20,8 +44,12 @@ int main(int argc, char **argv) return 1; } if (pid == 0) { - while (1) - sleep(1000); + if (m) { + for (j = 0; j < m-1; ++j) + pthread_create(&id, &attr, f, (void *)t_sleep); + } + + sleep(t_sleep); return 0; } } diff --git a/tools/testing/selftests/task_diag/run.sh b/tools/testing/selftests/task_diag/run.sh index 62250a5..06e182d 100755 --- a/tools/testing/selftests/task_diag/run.sh +++ b/tools/testing/selftests/task_diag/run.sh @@ -1,6 +1,6 @@ #!/bin/sh -./fork 1000 +./fork 1000 10 nproc=`./task_diag_all A | grep 'pid.*tgid.*ppid.*comm fork$' | wc -l` killall -9 fork -[ "$nproc" -eq 1000 ] && exit 0 +[ "$nproc" -eq 10000 ] && exit 0 echo "Unexpected number of tasks '$nproc'" 1>&2 -- 2.1.0 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/