[lttng-dev] [PATCH lttng-ust 2/3] Update obsolete benchmark test

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Wed Jul 24 09:53:48 EDT 2013


* Zifei Tong (soariez at gmail.com) wrote:
> Update the test to use lttng-ust 2.x API and output result to TAP format.

We should document how the benchmarks should run (README?) and make sure
it's ingrated with Makefile.am somehow.

> 
> Signed-off-by: Zifei Tong <soariez at gmail.com>
> ---
>  configure.ac                          |  1 +
>  tests/benchmark/Makefile              | 14 -----
>  tests/benchmark/Makefile.am           | 19 +++++++
>  tests/benchmark/README                |  9 ----
>  tests/benchmark/average               | 18 -------
>  tests/benchmark/bench.c               | 10 ++--
>  tests/benchmark/install               | 15 ------
>  tests/benchmark/ptime                 | 12 ++---
>  tests/benchmark/run                   | 97 -----------------------------------
>  tests/benchmark/test_benchmark        | 42 +++++++++++++++
>  tests/benchmark/tp.c                  |  2 +
>  tests/benchmark/ust_tests_benchmark.h | 30 +++++++++++
>  12 files changed, 107 insertions(+), 162 deletions(-)
>  delete mode 100644 tests/benchmark/Makefile
>  create mode 100644 tests/benchmark/Makefile.am
>  delete mode 100644 tests/benchmark/README
>  delete mode 100755 tests/benchmark/average
>  delete mode 100755 tests/benchmark/install
>  delete mode 100755 tests/benchmark/run
>  create mode 100755 tests/benchmark/test_benchmark
>  create mode 100644 tests/benchmark/tp.c
>  create mode 100644 tests/benchmark/ust_tests_benchmark.h
> 
> diff --git a/configure.ac b/configure.ac
> index 8b862ed..a59e8ce 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -283,6 +283,7 @@ AC_CONFIG_FILES([
>  	tests/hello.cxx/Makefile
>  	tests/same_line_tracepoint/Makefile
>  	tests/snprintf/Makefile
> +	tests/benchmark/Makefile
>  	tests/utils/Makefile
>  	lttng-ust.pc
>  ])
> diff --git a/tests/benchmark/Makefile b/tests/benchmark/Makefile
> deleted file mode 100644
> index cfccda9..0000000
> --- a/tests/benchmark/Makefile
> +++ /dev/null
> @@ -1,14 +0,0 @@
> -CC=gcc
> -CFLAGS=-O3 -Wall
> -LFLAGS=-lpthread -lust
> -
> -all: bench1 bench2
> -
> -bench1: bench.c
> -	$(CC) $(CFLAGS) $(LFLAGS) -o bench1 bench.c
> -bench2: bench.c
> -	$(CC) $(CFLAGS) $(LFLAGS) -DMARKER -o bench2 bench.c
> -
> -
> -clean:
> -	rm -f *.o bench1 bench2
> diff --git a/tests/benchmark/Makefile.am b/tests/benchmark/Makefile.am
> new file mode 100644
> index 0000000..dbc35c7
> --- /dev/null
> +++ b/tests/benchmark/Makefile.am
> @@ -0,0 +1,19 @@
> +AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include -Wsystem-headers
> +
> +noinst_PROGRAMS = bench1 bench2
> +bench1_SOURCES = bench.c tp.c ust_tests_benchmark.h
> +bench1_LDADD = $(top_builddir)/liblttng-ust/liblttng-ust.la
> +bench2_SOURCES = bench.c tp.c ust_tests_benchmark.h
> +bench2_LDADD = $(top_builddir)/liblttng-ust/liblttng-ust.la
> +bench2_CFLAGS = -DTRACING
> +
> +dist_noinst_SCRIPTS = test_benchmark ptime
> +
> +if LTTNG_UST_BUILD_WITH_LIBDL
> +bench1_LDADD += -ldl
> +bench2_LDADD += -ldl
> +endif
> +if LTTNG_UST_BUILD_WITH_LIBC_DL
> +bench1_LDADD += -lc
> +bench2_LDADD += -lc
> +endif
> diff --git a/tests/benchmark/README b/tests/benchmark/README
> deleted file mode 100644
> index 8a9321d..0000000
> --- a/tests/benchmark/README
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -UST Benchmark
> -
> -INSTALLATION INSTRUCTIONS:
> -
> -  - run ./install  to install and compile UST/benchmark
> -  - run ./run  to perform the benchmark
> -
> -
> -The trace files will be automatically saved at $HOME/.usttraces
> diff --git a/tests/benchmark/average b/tests/benchmark/average
> deleted file mode 100755
> index bda898c..0000000
> --- a/tests/benchmark/average
> +++ /dev/null
> @@ -1,18 +0,0 @@
> -#!/usr/bin/python
> -
> -import sys
> -
> -def main():
> -	total = 0.0
> -	n = 0.0
> -	while 1:
> -		line = sys.stdin.readline()
> -		if not line:
> -			break
> -
> -		val = float(line)
> -		n = n+1.0
> -		total = total+val
> -
> -	print total/n
> -main()
> diff --git a/tests/benchmark/bench.c b/tests/benchmark/bench.c
> index 212baef..517bfb7 100644
> --- a/tests/benchmark/bench.c
> +++ b/tests/benchmark/bench.c
> @@ -26,9 +26,13 @@
>  #include <stdlib.h>
>  #include <unistd.h>
>  #include <sched.h>
> -#include <ust/marker.h>
>  #include <time.h>
>  
> +#ifdef TRACING
> +#define TRACEPOINT_DEFINE
> +#include "ust_tests_benchmark.h"
> +#endif
> +
>  static int nr_cpus;
>  static unsigned long nr_events;
>  
> @@ -44,8 +48,8 @@ void do_stuff(void)
>  	fclose(file);
>  	time(NULL);
>  
> -#ifdef MARKER
> -	ust_marker(event, "event %d", v);
> +#ifdef TRACING
> +	tracepoint(ust_tests_benchmark, tpbench, v);
>  #endif
>  
>  }
> diff --git a/tests/benchmark/install b/tests/benchmark/install
> deleted file mode 100755
> index a66405d..0000000
> --- a/tests/benchmark/install
> +++ /dev/null
> @@ -1,15 +0,0 @@
> -#!/bin/bash
> -#
> -# install ust
> -
> -# compile and install UST
> -cd ../../
> -make clean
> -CFLAGS=-O3 ./configure
> -make
> -sudo make install
> -sudo ldconfig
> -
> -# compile benchmark
> -cd tests/benchmark
> -make clean && make
> diff --git a/tests/benchmark/ptime b/tests/benchmark/ptime
> index 8e22c02..419f368 100755
> --- a/tests/benchmark/ptime
> +++ b/tests/benchmark/ptime
> @@ -1,4 +1,4 @@
> -#!/usr/bin/python
> +#!/usr/bin/env python
>  
>  import sys
>  import time
> @@ -7,16 +7,16 @@ import os
>  def main():
>  	args = sys.argv[1:]
>  	if len(args) < 1:
> -		print "usage: %s COMMAND" % sys.argv[0]
> +		print("usage: %s COMMAND" % sys.argv[0])
>  		sys.exit(1)
>  
> -	cmd = args[0]
> +	cmd = ' '.join(args)
>  
>  	t1 = time.time()
>  	os.system(cmd)
> -	1
>  	t2 = time.time()
>  
> -	print (t2-t1)
> +	print(t2-t1)
>  
> -main()
> +if __name__ == "__main__":
> +	main()
> diff --git a/tests/benchmark/run b/tests/benchmark/run
> deleted file mode 100755
> index 7fa580c..0000000
> --- a/tests/benchmark/run
> +++ /dev/null
> @@ -1,97 +0,0 @@
> -#!/bin/bash
> -#
> -# run ust benchmark
> -#
> -
> -iters=20
> -NR_EVENTS=7000000
> -NR_CPUS=1
> -
> -TIME="./ptime"
> -
> -#PROG_NOMARKER="find /usr"
> -PROG_NOMARKER="./bench1 $NR_CPUS $NR_EVENTS"
> -#PROG_MARKER=$PROG_NOMARKER
> -PROG_MARKER="./bench2 $NR_CPUS $NR_EVENTS"
> -
> -CMD_NOMARKER="$TIME '$PROG_NOMARKER >/dev/null 2>&1'"
> -CMD_MARKER="$TIME '$PROG_MARKER >/dev/null 2>&1'"
> -CMD_MARKERCONN="UST_AUTOPROBE=1 $TIME '$PROG_MARKER >/dev/null 2>&1'"
> -CMD_MARKERTRACE="UST_TRACE=1 UST_AUTOPROBE=1 UST_OVERWRITE=1 UST_AUTOCOLLECT=0 $TIME '$PROG_MARKER >/dev/null 2>&1'"
> -
> -echo "ust benchmark"
> -
> -rm -f result-*.txt average-*.txt perevent-*.txt
> -
> -echo "using $NR_CPUS processor(s)"
> -echo "using $NR_EVENTS events per cpu"
> -
> -n=0
> -while [ $n -lt "$iters" ]; do
> -	# without markers
> -	echo ">running without markers"
> -	echo 3 >/proc/sys/vm/drop_caches
> -	t1=$(sh -c "$CMD_NOMARKER")
> -	echo "$t1" >>result-nomark.txt
> -	echo " time=$t1 sec"
> -	n=$(($n+1))
> -done
> -./average <result-nomark.txt >average-nomark.txt
> -
> -## with markers, not connected
> -#n=0
> -#while [ $n -lt "$iters" ]; do
> -#	echo ">running with markers, not connected"
> -#	echo 3 >/proc/sys/vm/drop_caches
> -#	t2=$(sh -c "$CMD_MARKER")
> -#	echo "$t2" >>result-mark.txt
> -#	echo " time=$t2 sec"
> -#	n=$(($n+1))
> -#done
> -#./average <result-mark.txt >average-mark.txt
> -#echo "( $(<average-mark.txt) - $(<average-nomark.txt) ) / $NR_EVENTS" | bc -l >perevent-mark.txt
> -
> -## with markers, connected
> -#n=0
> -#while [ $n -lt "$iters" ]; do
> -#	echo ">running with markers activated"
> -#	echo 3 >/proc/sys/vm/drop_caches
> -#	t2=$(sh -c "$CMD_MARKERCONN")
> -#	echo "$t2" >>result-markconn.txt
> -#	echo " time=$t2 sec"
> -#	n=$(($n+1))
> -#done
> -#./average <result-markconn.txt >average-markconn.txt
> -#echo "( $(<average-markconn.txt) - $(<average-nomark.txt) ) / $NR_EVENTS" | bc -l >perevent-markconn.txt
> -
> -# with markers, connected, tracing
> -n=0
> -while [ $n -lt "$iters" ]; do
> -	echo ">running with markers activated, trace recording"
> -	echo 3 >/proc/sys/vm/drop_caches
> -	t3=$(sh -c "$CMD_MARKERTRACE")
> -	echo "$t3" >>result-marktrace.txt
> -	echo " time=$t3 sec"
> -	n=$(($n+1))
> -done
> -./average <result-marktrace.txt >average-marktrace.txt
> -echo "( $(<average-marktrace.txt) - $(<average-nomark.txt) ) / $NR_EVENTS" | bc -l >perevent-marktrace.txt
> -
> -function print_penalty()
> -{
> -	echo ""
> -
> -	#penalty = t2 - t1
> -	penalty=$(echo "$2 - $1;" | bc)
> -	echo "Penalty ($3) = $penalty sec"
> -
> -	#event = penalty / (nr_events * nr_cpus)
> -	event=$(echo "scale=10; ($penalty / ($NR_EVENTS * $NR_CPUS));" | bc)
> -	echo "Penalty per event ($3) = $event sec"
> -}
> -
> -#print_penalty $t1 $t2 "Penalty for markers enabled, not tracing"
> -#print_penalty $t1 $t3 "Penalty for markers enabled, tracing"
> -
> -
> -rm -f /tmp/bench.txt
> diff --git a/tests/benchmark/test_benchmark b/tests/benchmark/test_benchmark
> new file mode 100755
> index 0000000..c55e302
> --- /dev/null
> +++ b/tests/benchmark/test_benchmark
> @@ -0,0 +1,42 @@
> +#!/bin/bash
> +
> +CURDIR=$(dirname $0)/
> +TESTDIR=$CURDIR/..
> +source $TESTDIR/utils/tap.sh
> +
> +plan_tests 1
> +
> +: ${ITERS:=20}
> +: ${NR_EVENTS:=7000000}
> +: ${NR_CPUS:=1}
> +
> +: ${TIME:="./$CURDIR/ptime"}
> +
> +: ${PROG_NOTRACING:="./$CURDIR/bench1 $NR_CPUS $NR_EVENTS"}
> +: ${PROG_TRACING:="./$CURDIR/bench2 $NR_CPUS $NR_EVENTS"}
> +
> +CMD_NOTRACING="$TIME '$PROG_NOTRACING >/dev/null 2>&1'"
> +CMD_TRACING="$TIME '$PROG_TRACING >/dev/null 2>&1'"
> +
> +time_notrace=0
> +for i in $(seq $ITERS); do
> +	echo 3 >/proc/sys/vm/drop_caches
> +	time_notrace="$time_notrace+$(sh -c "$CMD_NOTRACING")"
> +done
> +
> +lttng-sessiond -d --no-kernel
> +lttng -q create
> +lttng -q enable-event -u -a
> +lttng -q start
> +
> +time_trace=0
> +for i in $(seq $ITERS); do
> +	echo 3 >/proc/sys/vm/drop_caches
> +	time_trace="$time_trace+$(sh -c "$CMD_TRACING")"
> +done
> +
> +lttng -q stop
> +lttng -q destroy
> +
> +pass "Trace benchmark"
> +diag "Average tracing overhead per event is $(echo "scale=6;( ($time_trace) - ($time_notrace) ) / $ITERS / $NR_EVENTS" | bc -l)s"
> diff --git a/tests/benchmark/tp.c b/tests/benchmark/tp.c
> new file mode 100644
> index 0000000..a4f5352
> --- /dev/null
> +++ b/tests/benchmark/tp.c
> @@ -0,0 +1,2 @@
> +#define TRACEPOINT_CREATE_PROBES
> +#include "ust_tests_benchmark.h"
> diff --git a/tests/benchmark/ust_tests_benchmark.h b/tests/benchmark/ust_tests_benchmark.h
> new file mode 100644
> index 0000000..0ee986f
> --- /dev/null
> +++ b/tests/benchmark/ust_tests_benchmark.h
> @@ -0,0 +1,30 @@
> +#undef TRACEPOINT_PROVIDER
> +#define TRACEPOINT_PROVIDER ust_tests_benchmark
> +
> +#if !defined(_TRACEPOINT_UST_TESTS_BENCHMARK_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
> +#define _TRACEPOINT_UST_TESTS_BENCHMARK_H
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +#include <lttng/tracepoint.h>
> +
> +TRACEPOINT_EVENT(ust_tests_benchmark, tpbench,
> +	TP_ARGS(int, value),
> +	TP_FIELDS(
> +		ctf_integer(int, event, value)
> +	)
> +)
> +
> +#endif /* _TRACEPOINT_UST_TESTS_BENCHMARK_H */
> +
> +#undef TRACEPOINT_INCLUDE
> +#define TRACEPOINT_INCLUDE "./ust_tests_benchmark.h"
> +
> +/* This part must be outside ifdef protection */
> +#include <lttng/tracepoint-event.h>
> +
> +#ifdef __cplusplus
> +}
> +#endif
> -- 
> 1.8.3.3
> 

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com



More information about the lttng-dev mailing list