[ltt-dev] [UST PATCH] Add Systemtap to the tracepoint benchmark
Julien Desfossez
julien.desfossez at polymtl.ca
Wed Jan 26 21:49:28 EST 2011
Signed-off-by: Julien Desfossez <julien.desfossez at polymtl.ca>
---
configure.ac | 22 +++++++++++++++++++++
tests/tracepoint/benchmark/Makefile.am | 13 ++++++++++++
tests/tracepoint/benchmark/probes.d | 3 ++
tests/tracepoint/benchmark/testutrace.stp | 5 ++-
tests/tracepoint/benchmark/trace.h | 9 ++++++++
tests/tracepoint/benchmark/tracepoint_benchmark.c | 2 +
6 files changed, 52 insertions(+), 2 deletions(-)
create mode 100644 tests/tracepoint/benchmark/probes.d
create mode 100644 tests/tracepoint/benchmark/trace.h
diff --git a/configure.ac b/configure.ac
index c7d966b..583cac3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -107,6 +107,28 @@ esac
AC_SUBST(LIBFORMAT)
AC_MSG_RESULT($LIBFORMAT)
+### Systemtap header for benchmark ###
+AC_MSG_CHECKING([whether to include systemtap tracing support in the tracepoint benchmark])
+AC_ARG_ENABLE([systemtap],
+ [AS_HELP_STRING([--enable-systemtap],
+ [Enable inclusion of systemtap trace support in tracepoint benchmark])],
+ [ENABLE_SYSTEMTAP="${enableval}"], [ENABLE_SYSTEMTAP='no'])
+AM_CONDITIONAL([ENABLE_SYSTEMTAP], [test x$ENABLE_SYSTEMTAP = xyes])
+AC_MSG_RESULT(${ENABLE_SYSTEMTAP})
+
+if test "x${ENABLE_SYSTEMTAP}" = xyes; then
+ AC_CHECK_PROGS(DTRACE, dtrace)
+ if test -z "$DTRACE"; then
+ AC_MSG_ERROR([dtrace not found])
+ fi
+ AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='yes'],
+ [SDT_H_FOUND='no';
+ AC_MSG_ERROR([systemtap support needs sys/sdt.h header])])
+ AC_DEFINE([HAVE_SYSTEMTAP], [1], [Define to 1 if using probes.])
+fi
+
+### end Systemtap ###
+
AC_CONFIG_FILES([
Makefile
doc/Makefile
diff --git a/tests/tracepoint/benchmark/Makefile.am b/tests/tracepoint/benchmark/Makefile.am
index 50f7bf5..82c9ac1 100644
--- a/tests/tracepoint/benchmark/Makefile.am
+++ b/tests/tracepoint/benchmark/Makefile.am
@@ -5,3 +5,16 @@ tracepoint_benchmark_SOURCES = tracepoint_benchmark.c tracepoint_benchmark.h
tracepoint_benchmark_LDADD = $(top_builddir)/libust/libust.la $(top_builddir)/libust-initializer.o
CFLAGS_tracepoint_benchmark.o = -I$(src) -g
+
+if ENABLE_SYSTEMTAP
+probes.h: probes.d
+ $(DTRACE) -C -h -s $< -o $@
+
+probes.o: probes.d
+ $(DTRACE) -C -G -s $< -o $@
+
+BUILT_SOURCES = probes.h
+
+tracepoint_benchmark_SOURCES += probes.d trace.h
+tracepoint_benchmark_LDADD += probes.o
+endif
diff --git a/tests/tracepoint/benchmark/probes.d b/tests/tracepoint/benchmark/probes.d
new file mode 100644
index 0000000..0dc6a10
--- /dev/null
+++ b/tests/tracepoint/benchmark/probes.d
@@ -0,0 +1,3 @@
+provider tracepoint_benchmark {
+ probe single_trace(int);
+};
diff --git a/tests/tracepoint/benchmark/testutrace.stp b/tests/tracepoint/benchmark/testutrace.stp
index ad8ed68..cc79770 100644
--- a/tests/tracepoint/benchmark/testutrace.stp
+++ b/tests/tracepoint/benchmark/testutrace.stp
@@ -1,4 +1,5 @@
-probe process("./.libs/tracepoint_benchmark").function("single_trace") {
- printf("%d : %s\n", gettimeofday_ns(), $$parms);
+probe process(".libs/tracepoint_benchmark").mark("single_trace")
+{
+ printf("%d : %d\n", gettimeofday_ns(), $arg1);
}
diff --git a/tests/tracepoint/benchmark/trace.h b/tests/tracepoint/benchmark/trace.h
new file mode 100644
index 0000000..044c99c
--- /dev/null
+++ b/tests/tracepoint/benchmark/trace.h
@@ -0,0 +1,9 @@
+#include "config.h"
+#ifdef HAVE_SYSTEMTAP
+// include the generated probes header and put markers in code
+#include "probes.h"
+#define TRACE(probe) probe
+#else
+// Wrap the probe to allow it to be removed when no systemtap available
+#define TRACE(probe)
+#endif
diff --git a/tests/tracepoint/benchmark/tracepoint_benchmark.c b/tests/tracepoint/benchmark/tracepoint_benchmark.c
index 8af4b84..7e443c2 100644
--- a/tests/tracepoint/benchmark/tracepoint_benchmark.c
+++ b/tests/tracepoint/benchmark/tracepoint_benchmark.c
@@ -27,6 +27,7 @@
#include <stdio.h>
#include "tracepoint_benchmark.h"
#include <ust/type-serializer.h>
+#include "trace.h"
#define NR_EVENTS 10000000
@@ -54,6 +55,7 @@ static void __attribute__((constructor)) init()
void single_trace(unsigned int v)
{
+ TRACE(TRACEPOINT_BENCHMARK_SINGLE_TRACE(v));
trace_ust_event(v);
}
--
1.7.3.5
More information about the lttng-dev
mailing list