* Alexandre Montplaisir ([email protected]) wrote: > Signed-off-by: Alexandre Montplaisir <[email protected]> > --- > .gitignore | 1 + > configure.ac | 1 + > tests/Makefile.am | 2 +- > tests/hello-mt/Makefile.am | 13 +++++ > tests/hello-mt/Makefile.example.bsd | 8 +++ > tests/hello-mt/Makefile.example.linux | 8 +++ > tests/hello-mt/README | 11 ++++ > tests/hello-mt/hello.c | 103 > +++++++++++++++++++++++++++++++++ > tests/hello-mt/tp.c | 18 ++++++ > tests/hello-mt/ust_tests_hello.h | 67 +++++++++++++++++++++ > 10 files changed, 231 insertions(+), 1 deletion(-) > create mode 100644 tests/hello-mt/Makefile.am > create mode 100644 tests/hello-mt/Makefile.example.bsd > create mode 100644 tests/hello-mt/Makefile.example.linux > create mode 100644 tests/hello-mt/README > create mode 100644 tests/hello-mt/hello.c > create mode 100644 tests/hello-mt/tp.c > create mode 100644 tests/hello-mt/ust_tests_hello.h > > diff --git a/.gitignore b/.gitignore > index 076cd00..c9b45f1 100644 > --- a/.gitignore > +++ b/.gitignore > @@ -39,6 +39,7 @@ tests/exit-fast/exit-fast > tests/fork/fork > tests/fork/fork2 > tests/hello/hello > +tests/hello-mt/hello > tests/hello.cxx/hello > tests/hello2/hello2 > tests/libustctl_function_tests/libustctl_function_tests > diff --git a/configure.ac b/configure.ac > index 294d457..0a50ed0 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -305,6 +305,7 @@ AC_CONFIG_FILES([ > tools/Makefile > tests/Makefile > tests/hello/Makefile > + tests/hello-mt/Makefile > tests/hello-static-lib/Makefile > tests/hello.cxx/Makefile > tests/demo/Makefile > diff --git a/tests/Makefile.am b/tests/Makefile.am > index e79ab7c..443b407 100644 > --- a/tests/Makefile.am > +++ b/tests/Makefile.am > @@ -1,4 +1,4 @@ > -SUBDIRS = . hello hello-static-lib fork ust-basic-tracing ust-multi-test > demo hello.cxx > +SUBDIRS = . hello hello-mt hello-static-lib fork ust-basic-tracing > ust-multi-test demo hello.cxx > #SUBDIRS = . hello2 basic basic_long simple_include snprintf test-nevents > test-libustinstr-malloc dlopen same_line_marker trace_event register_test > tracepoint libustctl_function_tests exit-fast > > dist_noinst_SCRIPTS = test_loop runtests trace_matches > diff --git a/tests/hello-mt/Makefile.am b/tests/hello-mt/Makefile.am > new file mode 100644 > index 0000000..4b7e16d > --- /dev/null > +++ b/tests/hello-mt/Makefile.am > @@ -0,0 +1,13 @@ > +AM_CPPFLAGS = -I$(top_srcdir)/include -Wsystem-headers > +AM_CFLAGS = -fopenmp > + > +noinst_PROGRAMS = hello > +hello_SOURCES = hello.c tp.c ust_tests_hello.h > +hello_LDADD = $(top_builddir)/liblttng-ust/liblttng-ust.la > + > +if LTTNG_UST_BUILD_WITH_LIBDL > +hello_LDADD += -ldl > +endif > +if LTTNG_UST_BUILD_WITH_LIBC_DL > +hello_LDADD += -lc > +endif > diff --git a/tests/hello-mt/Makefile.example.bsd > b/tests/hello-mt/Makefile.example.bsd > new file mode 100644 > index 0000000..a71f478 > --- /dev/null > +++ b/tests/hello-mt/Makefile.example.bsd > @@ -0,0 +1,8 @@ > +# Example makefile for build outside of the LTTng-UST tree. > + > +hello: > + ${CC} -O2 -I. -o hello -lc -llttng-ust -fopenmp hello.c tp.c > + > +.PHONY: clean > +clean: > + rm -f hello > diff --git a/tests/hello-mt/Makefile.example.linux > b/tests/hello-mt/Makefile.example.linux > new file mode 100644 > index 0000000..bc5e58f > --- /dev/null > +++ b/tests/hello-mt/Makefile.example.linux > @@ -0,0 +1,8 @@ > +# Example makefile for build outside of the LTTng-UST tree. > + > +hello: > + ${CC} -O2 -I. -Wall -o hello hello.c tp.c -ldl -llttng-ust -fopenmp > + > +.PHONY: clean > +clean: > + rm -f hello > diff --git a/tests/hello-mt/README b/tests/hello-mt/README > new file mode 100644 > index 0000000..0584dca > --- /dev/null > +++ b/tests/hello-mt/README > @@ -0,0 +1,11 @@ > +This is a multi-threaded version of the "hello" test program. It uses OpenMP > for > +parallelization, and as such requires at least GCC 4.2.
Hrm. This adds a dependency on gcc 4.2. The entire project will fail to build because of this test on other compiler, older gcc, right ? We should have a configure.ac check that tests openmp availability. So I won't merge this for now. Thanks, Mathieu > + > +You can pass one integer as argument when running the program, this will > +indicate how many threads to use. For example > + > +./hello 10 > + > +will run the test with 10 threads. If no argument is passed, the default of > +1 thread is used, in which case the behaviour should be similar to the > original > +"hello" program. > diff --git a/tests/hello-mt/hello.c b/tests/hello-mt/hello.c > new file mode 100644 > index 0000000..2ff9869 > --- /dev/null > +++ b/tests/hello-mt/hello.c > @@ -0,0 +1,103 @@ > +/* > + * Copyright (C) 2009 Pierre-Marc Fournier > + * Copyright (C) 2011 Mathieu Desnoyers <[email protected]> > + * Copyright (C) 2012 Alexandre Montplaisir <[email protected]> > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; version 2.1 of > + * the License. > + * > + * This library is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this library; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 > USA > + */ > + > +#include <stdio.h> > +#include <unistd.h> > +#include <sys/mman.h> > +#include <stdarg.h> > +#include <sys/types.h> > +#include <sys/stat.h> > +#include <fcntl.h> > +#include <signal.h> > +#include <string.h> > +#include <arpa/inet.h> > +#include <stdlib.h> > +#include <stdbool.h> > +#include <omp.h> > + > +#define TRACEPOINT_DEFINE > +#include "ust_tests_hello.h" > + > +#define NB_ITERATIONS 1000000 > + > +void inthandler(int sig) > +{ > + printf("in SIGUSR1 handler\n"); > + tracepoint(ust_tests_hello, tptest_sighandler); > +} > + > +int init_int_handler(void) > +{ > + int result; > + struct sigaction act; > + > + memset(&act, 0, sizeof(act)); > + result = sigemptyset(&act.sa_mask); > + if (result == -1) { > + perror("sigemptyset"); > + return -1; > + } > + > + act.sa_handler = inthandler; > + act.sa_flags = SA_RESTART; > + > + /* Only defer ourselves. Also, try to restart interrupted > + * syscalls to disturb the traced program as little as possible. > + */ > + result = sigaction(SIGUSR1, &act, NULL); > + if (result == -1) { > + perror("sigaction"); > + return -1; > + } > + > + return 0; > +} > + > +int main(int argc, char **argv) > +{ > + int i, netint; > + long values[] = { 1, 2, 3 }; > + char text[10] = "test"; > + double dbl = 2.0; > + float flt = 2222.0; > + int nb_threads = 1; > + bool mybool = 123; /* should print "1" */ > + > + init_int_handler(); > + > + if (argc == 2) { > + nb_threads = atoi(argv[1]); > + } > + > + fprintf(stderr, "Running %d iterations with %d threads... ", > + NB_ITERATIONS, nb_threads); > + > + #pragma omp parallel private(i, netint) num_threads(nb_threads) > + { > + for (i = 0; i < NB_ITERATIONS; i++) { > + netint = htonl(i); > + tracepoint(ust_tests_hello, tptest, i, netint, values, > + text, strlen(text), dbl, flt, mybool); > + //usleep(100000); > + } > + } > + fprintf(stderr, " done.\n"); > + return 0; > +} > diff --git a/tests/hello-mt/tp.c b/tests/hello-mt/tp.c > new file mode 100644 > index 0000000..1806b42 > --- /dev/null > +++ b/tests/hello-mt/tp.c > @@ -0,0 +1,18 @@ > +/* > + * tp.c > + * > + * Copyright (c) 2011 Mathieu Desnoyers <[email protected]> > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > copy > + * of this software and associated documentation files (the "Software"), to > deal > + * in the Software without restriction, including without limitation the > rights > + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell > + * copies of the Software, and to permit persons to whom the Software is > + * furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice shall be included in > + * all copies or substantial portions of the Software. > + */ > + > +#define TRACEPOINT_CREATE_PROBES > +#include "ust_tests_hello.h" > diff --git a/tests/hello-mt/ust_tests_hello.h > b/tests/hello-mt/ust_tests_hello.h > new file mode 100644 > index 0000000..b06dea0 > --- /dev/null > +++ b/tests/hello-mt/ust_tests_hello.h > @@ -0,0 +1,67 @@ > +#undef TRACEPOINT_PROVIDER > +#define TRACEPOINT_PROVIDER ust_tests_hello > + > +#if !defined(_TRACEPOINT_UST_TESTS_HELLO_H) || > defined(TRACEPOINT_HEADER_MULTI_READ) > +#define _TRACEPOINT_UST_TESTS_HELLO_H > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +/* > + * Copyright (C) 2011 Mathieu Desnoyers <[email protected]> > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > copy > + * of this software and associated documentation files (the "Software"), to > deal > + * in the Software without restriction, including without limitation the > rights > + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell > + * copies of the Software, and to permit persons to whom the Software is > + * furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice shall be included in > + * all copies or substantial portions of the Software. > + */ > + > +#include <lttng/tracepoint.h> > +#include <stdbool.h> > + > +TRACEPOINT_EVENT(ust_tests_hello, tptest, > + TP_ARGS(int, anint, int, netint, long *, values, > + char *, text, size_t, textlen, > + double, doublearg, float, floatarg, > + bool, boolarg), > + TP_FIELDS( > + ctf_integer(int, intfield, anint) > + ctf_integer_hex(int, intfield2, anint) > + ctf_integer(long, longfield, anint) > + ctf_integer_network(int, netintfield, netint) > + ctf_integer_network_hex(int, netintfieldhex, netint) > + ctf_array(long, arrfield1, values, 3) > + ctf_array_text(char, arrfield2, text, 10) > + ctf_sequence(char, seqfield1, text, > + size_t, textlen) > + ctf_sequence_text(char, seqfield2, text, > + size_t, textlen) > + ctf_string(stringfield, text) > + ctf_float(float, floatfield, floatarg) > + ctf_float(double, doublefield, doublearg) > + ctf_integer(bool, boolfield, boolarg) > + ) > +) > + > +TRACEPOINT_EVENT(ust_tests_hello, tptest_sighandler, > + TP_ARGS(), > + TP_FIELDS() > +) > + > +#endif /* _TRACEPOINT_UST_TESTS_HELLO_H */ > + > +#undef TRACEPOINT_INCLUDE_FILE > +#define TRACEPOINT_INCLUDE_FILE ./ust_tests_hello.h > + > +/* This part must be outside ifdef protection */ > +#include <lttng/tracepoint-event.h> > + > +#ifdef __cplusplus > +} > +#endif > -- > 1.7.10.4 > > > _______________________________________________ > lttng-dev mailing list > [email protected] > http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev -- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
