[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