0da40a57c3b2c2b50cc559d99beb616d73f18350
[lttng-ust.git] / tests / benchmark / test_benchmark
1 #!/bin/bash
2 #
3 # SPDX-License-Identifier: LGPL-2.1-only
4
5 CURDIR=$(dirname $0)/
6 TESTDIR=$CURDIR/..
7 source $TESTDIR/utils/tap.sh
8
9 plan_tests 1
10
11 : ${ITERS:=10}
12 : ${DURATION:=2}
13 : ${NR_THREADS:=1}
14 : ${NR_CPUS:=$(lscpu | grep "^CPU(s)" | sed 's/^.*:[ \t]*//g')}
15
16 : ${TIME:="./$CURDIR/ptime"}
17
18 : ${PROG_NOTRACING:="./$CURDIR/bench1 $NR_THREADS $DURATION"}
19 : ${PROG_TRACING:="./$CURDIR/bench2 $NR_THREADS $DURATION"}
20
21 function signal_cleanup ()
22 {
23 killall lttng-sessiond
24 exit
25 }
26
27 trap signal_cleanup SIGTERM SIGINT
28
29 CMD_NOTRACING="$TIME '$PROG_NOTRACING'"
30 CMD_TRACING="$TIME '$PROG_TRACING'"
31
32 NR_ACTIVE_CPUS=$(( $NR_CPUS > $NR_THREADS ? $NR_THREADS : $NR_CPUS ))
33
34 for i in $(seq $ITERS); do
35 res=$(sh -c "$CMD_NOTRACING")
36 loops_notrace[$i]=$(echo "${res}" | grep "^Number of loops:" | sed 's/^.*: //g')
37 time_notrace[$i]=$(echo "${res}" | grep "^Wall time:" | sed 's/^.*: //g')
38 done
39
40 lttng-sessiond -d --no-kernel
41 lttng -q create --snapshot
42 lttng -q enable-event -u -a
43 lttng -q start
44
45 for i in $(seq $ITERS); do
46 res=$(sh -c "$CMD_TRACING")
47 loops_trace[$i]=$(echo "${res}" | grep "^Number of loops:" | sed 's/^.*: //g')
48 time_trace[$i]=$(echo "${res}" | grep "^Wall time:" | sed 's/^.*: //g')
49 done
50
51 lttng -q stop
52 lttng -q destroy
53 killall lttng-sessiond
54
55 pass "Trace benchmark"
56
57 # Multiply the wall time by the number of active CPUs to get the
58 # overhead of events on each active cpu.
59
60 avg_delta=0
61 for i in $(seq $ITERS); do
62 delta[$i]=$(echo "((${time_trace[$i]} * ${NR_ACTIVE_CPUS} / ${loops_trace[$i]}) - (${time_notrace[$i]} * ${NR_ACTIVE_CPUS} / ${loops_notrace[$i]}))" | bc -l)
63 avg_delta=$(echo "(${avg_delta} + ${delta[$i]})" | bc -l)
64 done
65 avg_delta=$(echo "(${avg_delta} / $ITERS)" | bc -l)
66
67 std_dev=0
68 for i in $(seq $ITERS); do
69 dev[$i]=$(echo "(( (${delta[$i]}) - (${avg_delta}) ) ^ 2)" | bc -l)
70 std_dev=$(echo "( (${std_dev}) + (${dev[i]}) )" | bc -l)
71 done
72 std_dev=$(echo "( (${std_dev}) / $ITERS )" | bc -l)
73 std_dev=$(echo "(sqrt(${std_dev}))" | bc -l)
74
75 NS_PER_EVENT=$(echo "($avg_delta * 1000000000)" | bc -l)
76 # Remove fractions
77 NS_PER_EVENT=${NS_PER_EVENT%%.*}
78
79 STD_DEV_NS_PER_EVENT=$(echo "($std_dev * 1000000000)" | bc -l)
80 # Remove fractions
81 STD_DEV_NS_PER_EVENT=${STD_DEV_NS_PER_EVENT%%.*}
82
83 diag "Average tracing overhead per event is ${NS_PER_EVENT}ns, std.dev.: ${STD_DEV_NS_PER_EVENT}ns { NR_THREADS=${NR_THREADS}, NR_ACTIVE_CPUS=${NR_ACTIVE_CPUS} }"
This page took 0.031224 seconds and 3 git commands to generate.