Tests: Reduce runtime for high_throughput_limits test
authorKienan Stewart <kstewart@efficios.com>
Fri, 9 Jun 2023 20:30:10 +0000 (16:30 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 13 Jun 2023 22:25:02 +0000 (18:25 -0400)
The test currently takes about 2 hours to run. The iteration count and
range of bandwidth limits have been adjusted to reduce the runtime,
while hopefully covering the same goal: attempting to catch rare race
conditions in low-bandwidth scenarios.

The iteration count has been set so there should be some dropped
events, and a diagnostic message emitted if ever there are no dropped
events.

Change-Id: I670414b60c6881c3a6f7aafd2c1b0c4540e6707f
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
tests/regression/tools/streaming/test_high_throughput_limits

index 359cc101a5dcf3036101ee72d6c8850a796c43a1..50c21df4d14cfcdcc8bb62d130dd3eae1bef5e71 100755 (executable)
@@ -7,10 +7,14 @@
 
 TEST_DESC="Streaming - High throughput with bandwidth limits"
 
-CURDIR=$(dirname $0)/
-TESTDIR=$CURDIR/../../..
+# The goal of this test is to try and catch races during tests in conditions
+# where bandwidth is quite limited. It is useful to have enough iterations and
+# apps so that there are dropped events.
+
+CURDIR=$(dirname "$0")/
+TESTDIR="$CURDIR/../../.."
 NR_APP_ITER=10
-NR_ITER=1000000
+NR_ITER=5000
 TESTAPP_PATH="$TESTDIR/utils/testapp"
 TESTAPP_NAME="gen-ust-events"
 TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
@@ -22,8 +26,9 @@ DEFAULT_IF="lo"
 
 TRACE_PATH=$(mktemp -d -t tmp.test_streaming_high_throughput_limits_trace_path.XXXXXX)
 
-NUM_TESTS=104
+NUM_TESTS=39
 
+# shellcheck source-path=SCRIPTDIR/../../../
 source $TESTDIR/utils/utils.sh
 
 if [ ! -x "$TESTAPP_BIN" ]; then
@@ -48,40 +53,34 @@ function set_bw_limit
 
        diag "Set bandwidth limits to ${limit}kbits, ${ctrlportlimit} for control and ${dataportlimit} for data"
 
-       tc qdisc add dev $DEFAULT_IF root handle 1: htb default 15 >/dev/null 2>&1
-       if [ $? -ne 0 ]; then
+       if ! tc qdisc add dev $DEFAULT_IF root handle 1: htb default 15 >/dev/null 2>&1 ; then
                reset_bw_limit
                return 1
        fi
 
        # the total bandwidth is the limit set by the user
-       tc class add dev $DEFAULT_IF parent 1: classid 1:1 htb rate ${limit}kbit ceil ${limit}kbit >/dev/null 2>&1
-       if [ $? -ne 0 ]; then
+       if ! tc class add dev $DEFAULT_IF parent 1: classid 1:1 htb rate ${limit}kbit ceil ${limit}kbit >/dev/null 2>&1 ; then
                reset_bw_limit
                return 1
        fi
        # 1/10 of the bandwidth guaranteed and traffic prioritized for the control port
-       tc class add dev $DEFAULT_IF parent 1:1 classid 1:10 htb rate ${ctrlportlimit}kbit ceil ${limit}kbit prio 1 >/dev/null 2>&1
-       if [ $? -ne 0 ]; then
+       if ! tc class add dev $DEFAULT_IF parent 1:1 classid 1:10 htb rate ${ctrlportlimit}kbit ceil ${limit}kbit prio 1 >/dev/null 2>&1 ; then
                reset_bw_limit
                return 1
        fi
        # 9/10 of the bandwidth guaranteed and can borrow up to the total bandwidth (if unused)
-       tc class add dev $DEFAULT_IF parent 1:1 classid 1:11 htb rate ${dataportlimit}kbit ceil ${limit}kbit prio 2 >/dev/null 2>&1
-       if [ $? -ne 0 ]; then
+       if ! tc class add dev $DEFAULT_IF parent 1:1 classid 1:11 htb rate ${dataportlimit}kbit ceil ${limit}kbit prio 2 >/dev/null 2>&1 ; then
                reset_bw_limit
                return 1
        fi
 
        # filter to assign control traffic to the 1:10 class
-       tc filter add dev $DEFAULT_IF parent 1: protocol ip u32 match ip dport $SESSIOND_CTRL_PORT 0xffff flowid 1:10 >/dev/null 2>&1
-       if [ $? -ne 0 ]; then
+       if ! tc filter add dev $DEFAULT_IF parent 1: protocol ip u32 match ip dport $SESSIOND_CTRL_PORT 0xffff flowid 1:10 >/dev/null 2>&1 ; then
                reset_bw_limit
                return 1
        fi
        # filter to assign data traffic to the 1:11 class
-       tc filter add dev $DEFAULT_IF parent 1: protocol ip u32 match ip dport $SESSIOND_DATA_PORT 0xffff flowid 1:11 >/dev/null 2>&1
-       if [ $? -ne 0 ]; then
+       if ! tc filter add dev $DEFAULT_IF parent 1: protocol ip u32 match ip dport $SESSIOND_DATA_PORT 0xffff flowid 1:11 >/dev/null 2>&1 ; then
                reset_bw_limit
                return 1
        fi
@@ -94,18 +93,18 @@ function create_lttng_session_with_uri
        sess_name=$1
        uri=$2
        # Create session with custom URI
-       $TESTDIR/../src/bin/lttng/$LTTNG_BIN create -U $uri $sess_name >/dev/null 2>&1
+       "$TESTDIR/../src/bin/lttng/$LTTNG_BIN" create -U "$uri" "$sess_name" >/dev/null 2>&1
        ok $? "Create session with uri $uri"
 }
 
 function run_apps
 {
-       for i in `seq 1 $NR_APP_ITER`; do
+       for i in $(seq 1 $NR_APP_ITER); do
                # With bandwidth limitation, unfortunately, application easily timeout
                # due to very slow communication between the consumer and relayd making
                # the status reply from the consumer quite slow thus delaying the
                # registration done message.
-               LTTNG_UST_REGISTER_TIMEOUT=-1 $TESTAPP_BIN -i $NR_ITER & >/dev/null 2>&1
+               LTTNG_UST_REGISTER_TIMEOUT=-1 $TESTAPP_BIN -i "$NR_ITER" >/dev/null 2>&1 &
        done
 }
 
@@ -129,20 +128,23 @@ function validate_event_count
        TEMP_FILE=$(mktemp -t tmp.streaming_high_throughput_limit_file1.XXXXXX)
        TEMP_FILE_2=$(mktemp -t tmp.streaming_high_throughput_limit_file2.XXXXXX)
 
-       traced=$("$BABELTRACE_BIN" $TRACE_PATH 2>/dev/null | wc -l)
-       "$BABELTRACE_BIN" $TRACE_PATH >/dev/null 2>$TEMP_FILE_2
+       traced=$("$BABELTRACE_BIN" "$TRACE_PATH" 2>/dev/null | wc -l)
+       "$BABELTRACE_BIN" "$TRACE_PATH" >/dev/null 2>"$TEMP_FILE_2"
 
-       cat $TEMP_FILE_2 | cut -f4 -d " " >$TEMP_FILE
+       cat "$TEMP_FILE_2" | cut -f4 -d " " >"$TEMP_FILE"
 
        dropped=0
-       while read line;
-       do
-               let dropped=$dropped+$line
-       done < $TEMP_FILE
+       while read -r line; do
+               dropped=$(( dropped + line ))
+       done < "$TEMP_FILE"
 
-       let total=$dropped+$traced
-       let wanted=$NR_APP_ITER*$NR_ITER
+       total=$(( dropped + traced ))
+       wanted=$(( NR_APP_ITER * NR_ITER ))
 
+       if [ $dropped -le 0 ]; then
+               diag "No dropped events during test, consider increasing the number of " \
+                        "apps or iterations"
+       fi
        if [ $wanted -ne $total ]; then
                fail "Validate trace event count"
                diag "Expected $wanted. Dropped $dropped. Recorded $traced. Total $total... "
@@ -151,8 +153,8 @@ function validate_event_count
                pass "Validate trace event count"
                diag "Expected $wanted. Dropped $dropped. Recorded $traced. Total $total... "
 
-               rm -rf $TRACE_PATH
-               rm $TEMP_FILE $TEMP_FILE_2
+               rm -rf "$TRACE_PATH"
+               rm "$TEMP_FILE" "$TEMP_FILE_2"
 
                return 0
        fi
@@ -184,19 +186,22 @@ skip $isroot "Root access is needed to set bandwith limits. Skipping all tests."
        # Catch sigint and try to cleanup limits
        trap interrupt_cleanup SIGTERM SIGINT
 
-       BW_LIMITS=(3200 1600 800 400 200 100 50 25)
-       for BW in ${BW_LIMITS[@]};
+       BW_LIMITS=(3200 400 100)
+       for BW in "${BW_LIMITS[@]}";
        do
                diag "Test high-throughput with bandwidth limit set to ${BW}kbits"
 
-               set_bw_limit $BW
+               set_bw_limit "$BW"
                ok $? "Setting bandwidth limit"
 
+               # shellcheck disable=SC2119
                start_lttng_sessiond
                start_lttng_relayd "-o $TRACE_PATH"
                test_high_throughput
                result=$?
+               # shellcheck disable=SC2119
                stop_lttng_relayd
+               # shellcheck disable=SC2119
                stop_lttng_sessiond
                reset_bw_limit
                ok $? "Reset bandwith limits"
This page took 0.028261 seconds and 4 git commands to generate.