5 source $TESTDIR/utils
/tap.sh
12 : ${NR_CPUS:=$(lscpu | grep "^CPU(s)" | sed 's/^.*:[ \t]*//g')}
14 : ${TIME:="./$CURDIR/ptime"}
16 : ${PROG_NOTRACING:="./$CURDIR/bench1 $NR_THREADS $DURATION"}
17 : ${PROG_TRACING:="./$CURDIR/bench2 $NR_THREADS $DURATION"}
19 function signal_cleanup
()
21 killall lttng-sessiond
25 trap signal_cleanup SIGTERM SIGINT
27 CMD_NOTRACING
="$TIME '$PROG_NOTRACING'"
28 CMD_TRACING
="$TIME '$PROG_TRACING'"
30 NR_ACTIVE_CPUS
=$
(( $NR_CPUS > $NR_THREADS ?
$NR_THREADS : $NR_CPUS ))
32 for i
in $
(seq $ITERS); do
33 res
=$
(sh
-c "$CMD_NOTRACING")
34 loops_notrace
[$i]=$
(echo "${res}" |
grep "^Number of loops:" |
sed 's/^.*: //g')
35 time_notrace
[$i]=$
(echo "${res}" |
grep "^Wall time:" |
sed 's/^.*: //g')
38 lttng-sessiond
-d --no-kernel
39 lttng
-q create
--snapshot
40 lttng
-q enable-event
-u -a
43 for i
in $
(seq $ITERS); do
44 res
=$
(sh
-c "$CMD_TRACING")
45 loops_trace
[$i]=$
(echo "${res}" |
grep "^Number of loops:" |
sed 's/^.*: //g')
46 time_trace
[$i]=$
(echo "${res}" |
grep "^Wall time:" |
sed 's/^.*: //g')
51 killall lttng-sessiond
53 pass
"Trace benchmark"
55 # Multiply the wall time by the number of active CPUs to get the
56 # overhead of events on each active cpu.
59 for i
in $
(seq $ITERS); do
60 delta
[$i]=$
(echo "((${time_trace[$i]} * ${NR_ACTIVE_CPUS} / ${loops_trace[$i]}) - (${time_notrace[$i]} * ${NR_ACTIVE_CPUS} / ${loops_notrace[$i]}))" |
bc -l)
61 avg_delta
=$
(echo "(${avg_delta} + ${delta[$i]})" |
bc -l)
63 avg_delta
=$
(echo "(${avg_delta} / $ITERS)" |
bc -l)
66 for i
in $
(seq $ITERS); do
67 dev
[$i]=$
(echo "(( (${delta[$i]}) - (${avg_delta}) ) ^ 2)" |
bc -l)
68 std_dev
=$
(echo "( (${std_dev}) + (${dev[i]}) )" |
bc -l)
70 std_dev
=$
(echo "( (${std_dev}) / $ITERS )" |
bc -l)
71 std_dev
=$
(echo "(sqrt(${std_dev}))" |
bc -l)
73 NS_PER_EVENT
=$
(echo "($avg_delta * 1000000000)" |
bc -l)
75 NS_PER_EVENT
=${NS_PER_EVENT%%.*}
77 STD_DEV_NS_PER_EVENT
=$
(echo "($std_dev * 1000000000)" |
bc -l)
79 STD_DEV_NS_PER_EVENT
=${STD_DEV_NS_PER_EVENT%%.*}
81 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} }"