X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=tests%2Ftools%2Fstreaming%2Fhigh_throughput_limits;fp=tests%2Ftools%2Fstreaming%2Fhigh_throughput_limits;h=2fbed3add319c1ac38b63a5c1eb01ffa796e6dca;hp=0000000000000000000000000000000000000000;hb=17fe049061ade479aef95a72de00385ba3e2ff5b;hpb=c7d620a2a00e1da14a0d06752b9055d9de6017b5 diff --git a/tests/tools/streaming/high_throughput_limits b/tests/tools/streaming/high_throughput_limits new file mode 100755 index 000000000..2fbed3add --- /dev/null +++ b/tests/tools/streaming/high_throughput_limits @@ -0,0 +1,184 @@ +#!/bin/bash +# +# Copyright (C) - 2012 Christian Babeux +# David Goulet +# +# This library is free software; you can redistribute it and/or modify it under +# the terms of the GNU Lesser General Public License as published by the Free +# Software Foundation; version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +# details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +TEST_DESC="Streaming - High throughput with bandwith limits" + +CURDIR=$(dirname $0)/ +TESTDIR=$CURDIR/../.. +NR_APP_ITER=10 +NR_ITER=1000000 +BIN_NAME="gen-ust-events" +SESSION_NAME="high-throughput" +EVENT_NAME="tp:tptest" +SESSIOND_CTRL_PORT=5342 +SESSIOND_DATA_PORT=5343 +DEFAULT_IF="lo" + +TRACE_PATH=$(mktemp -d) + +source $TESTDIR/utils.sh + +print_test_banner "$TEST_DESC" + +if [ ! -x "$CURDIR/$BIN_NAME" ]; then + echo -e "No UST nevents binary detected. Passing." + exit 0 +fi + +if [ "$(id -u)" != "0" ]; then + echo "This test must be running as root to set bandwith limits. Aborting" + # Exit status 0 so the tests can continue + exit 0 +fi + +function set_bw_limit +{ + limit=$1 + echo -n "Setting bandwith limits to ${limit}kbits... " + tc qdisc add dev $DEFAULT_IF root handle 1: htb default 15 >/dev/null 2>&1 + tc class add dev $DEFAULT_IF parent 1: classid 1:1 htb rate ${limit}kbit ceil ${limit}kbit >/dev/null 2>&1 + + # FIXME: Timeout when setting limits on ctrl port. + #tc filter add dev $DEFAULT_IF parent 1: protocol ip u32 match ip dport $SESSIOND_CTRL_PORT 0xffff flowid 1:1 >/dev/null 2>&1 + + tc filter add dev $DEFAULT_IF parent 1: protocol ip u32 match ip dport $SESSIOND_DATA_PORT 0xffff flowid 1:1 >/dev/null 2>&1 + print_ok +} + +function reset_bw_limit +{ + echo -n "Resetting bandwith limits... " + tc qdisc del dev $DEFAULT_IF root >/dev/null 2>&1 + print_ok +} + +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 +} + +function enable_lttng_consumer +{ + uri=$1 + # Create session with custom URI + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-consumer -u $uri >/dev/null 2>&1 +} + +function run_apps +{ + for i in `seq 1 $NR_APP_ITER`; do + ./$CURDIR/$BIN_NAME $NR_ITER & >/dev/null 2>&1 + done +} + +function wait_apps +{ + echo "Waiting for applications to end" + while [ -n "$(pidof $BIN_NAME)" ]; do + echo -n "." + sleep 1 + done + echo "" +} + +function test_high_throughput +{ + NETWORK_URI="net://localhost" + create_lttng_session_with_uri $SESSION_NAME $NETWORK_URI + enable_lttng_consumer $NETWORK_URI + enable_ust_lttng_event $SESSION_NAME $EVENT_NAME + start_lttng_tracing $SESSION_NAME + run_apps + wait_apps + + # FIXME: Should not be necessary... + #echo "Sleeping..." + #sleep 180 + + stop_lttng_tracing $SESSION_NAME + destroy_lttng_session $SESSION_NAME + validate_event_count +} + +function validate_event_count +{ + + TEMP_FILE=$(mktemp) + TEMP_FILE_2=$(mktemp) + + traced=$(babeltrace $TRACE_PATH 2>/dev/null | wc -l) + babeltrace $TRACE_PATH >/dev/null 2>$TEMP_FILE_2 + + cat $TEMP_FILE_2 | cut -f4 -d " " >$TEMP_FILE + + dropped=0 + while read line; + do + let dropped=$dropped+$line + done < $TEMP_FILE + + let total=$dropped+$traced + let wanted=$NR_APP_ITER*$NR_ITER + + rm -rf $TRACE_PATH + rm $TEMP_FILE $TEMP_FILE_2 + + if [ $wanted -ne $total ]; then + echo -n "Expected $wanted. Dropped $dropped. Recorded $traced. Total $total... " + print_fail + return 1 + else + echo -n "Expected $wanted. Dropped $dropped. Recorded $traced. Total $total... " + print_ok + return 0 + fi +} + +function interrupt_cleanup() +{ + echo -en "\n*** Exiting ***\n" + stop_lttng_relayd + stop_lttng_sessiond + reset_bw_limit + exit 1 +} + +# Catch sigint and try to cleanup limits +trap interrupt_cleanup SIGINT + +BW_LIMITS=(3200 1600 800 400 200 100 50 25) +for BW in ${BW_LIMITS[@]}; +do + echo "" + echo -e "=== Testing high-throughput with bandwith limit set to ${BW}kbits" + set_bw_limit $BW + + start_lttng_sessiond + start_lttng_relayd "-o $TRACE_PATH" + test_high_throughput + result=$? + stop_lttng_relayd + stop_lttng_sessiond + reset_bw_limit + + if [ $result -ne 0 ]; then + exit 1 + fi +done