3 # SPDX-License-Identifier: LGPL-2.1-only
7 source $TESTDIR/utils
/tap.sh
14 : ${NR_CPUS:=$(lscpu | grep "^CPU(s)" | sed 's/^.*:[ \t]*//g')}
16 : ${TIME:="./$CURDIR/ptime"}
18 : ${PROG_NOTRACING:="./$CURDIR/bench1 $NR_THREADS $DURATION"}
19 : ${PROG_TRACING:="./$CURDIR/bench2 $NR_THREADS $DURATION"}
21 function signal_cleanup
()
23 killall lttng-sessiond
27 trap signal_cleanup SIGTERM SIGINT
29 CMD_NOTRACING
="$TIME '$PROG_NOTRACING'"
30 CMD_TRACING
="$TIME '$PROG_TRACING'"
32 NR_ACTIVE_CPUS
=$
(( $NR_CPUS > $NR_THREADS ?
$NR_THREADS : $NR_CPUS ))
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')
40 lttng-sessiond
-d --no-kernel
41 lttng
-q create
--snapshot
42 lttng
-q enable-event
-u -a
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')
53 killall lttng-sessiond
55 pass
"Trace benchmark"
57 # Multiply the wall time by the number of active CPUs to get the
58 # overhead of events on each active cpu.
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)
65 avg_delta
=$
(echo "(${avg_delta} / $ITERS)" |
bc -l)
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)
72 std_dev
=$
(echo "( (${std_dev}) / $ITERS )" |
bc -l)
73 std_dev
=$
(echo "(sqrt(${std_dev}))" |
bc -l)
75 NS_PER_EVENT
=$
(echo "($avg_delta * 1000000000)" |
bc -l)
77 NS_PER_EVENT
=${NS_PER_EVENT%%.*}
79 STD_DEV_NS_PER_EVENT
=$
(echo "($std_dev * 1000000000)" |
bc -l)
81 STD_DEV_NS_PER_EVENT
=${STD_DEV_NS_PER_EVENT%%.*}
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} }"