Messages in this thread Patch in this message | | | From | Andrey Vagin <> | Subject | [PATCH 14/15] task_diag: Enhance fork tool to spawn threads | Date | Mon, 11 Apr 2016 16:35:54 -0700 |
| |
From: David Ahern <dsahern@gmail.com>
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 <dsahern@gmail.com> Signed-off-by: Andrey Vagin <avagin@openvz.org> --- tools/testing/selftests/task_diag/Makefile | 2 ++ tools/testing/selftests/task_diag/_run.sh | 4 ++-- tools/testing/selftests/task_diag/fork.c | 36 ++++++++++++++++++++++++++---- 3 files changed, 36 insertions(+), 6 deletions(-)
diff --git a/tools/testing/selftests/task_diag/Makefile b/tools/testing/selftests/task_diag/Makefile index 69b7934..c9977231 100644 --- a/tools/testing/selftests/task_diag/Makefile +++ b/tools/testing/selftests/task_diag/Makefile @@ -10,6 +10,8 @@ task_diag_comm.o: task_diag_comm.c task_diag_comm.h task_diag_all: task_diag_all.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/_run.sh b/tools/testing/selftests/task_diag/_run.sh index 3f541fe..559f02a 100755 --- a/tools/testing/selftests/task_diag/_run.sh +++ b/tools/testing/selftests/task_diag/_run.sh @@ -2,7 +2,7 @@ set -o pipefail set -e -x -./fork 1000 +./fork 1000 10 nprocesses=`./task_diag_all all --maps | grep 'pid.*tgid.*ppid.*comm fork$' | wc -l` nthreads=`./task_diag_all All --smaps --cred | grep 'pid.*tgid.*ppid.*comm fork$' | wc -l` @@ -12,7 +12,7 @@ nchildren=`./task_diag_all children --pid 1 | grep 'pid.*tgid.*ppid.*comm fork$' killall -9 fork -[ "$nthreads" -eq 1000 ] && +[ "$nthreads" -eq 10000 ] && [ "$nprocesses" -eq 1000 ] && [ "$nchildren" -eq 1000 ] && true || { 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 <string.h> #include <stdio.h> #include <stdlib.h> +#include <pthread.h> +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; } } -- 2.5.5
| |